Name: series-workflowkpgtf Phase: Running StartedAt: 2026-09-14 09:12:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[0] Phase: Succeeded StartedAt: 2026-09-14 09:12:00 +0000 UTC FinishedAt: 2026-09-14 09:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 09:12:00 +0000 UTC FinishedAt: 2026-09-14 09:16:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INPUT_YEALINK", "INPUT_MISC", "INPUT", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INPUT_YEALINK", "INPUT_MISC", "INPUT", "USB" ], "series_id": "1385bfd3-01fc-4610-9501-d44b5b27e43d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "urb_irq_callback", "urb_ctl_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOUFVUX1lFQUxJTksmIzM0OywKICAgICYjMzQ7SU5QVVRfTUlTQyYjMzQ7LAogICAgJiMzNDtJTlBVVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cmJfaXJxX2NhbGxiYWNrJiMzNDssCiAgICAmIzM0O3VyYl9jdGxfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoUmF3IEdhZGdldCAvIGR1bW15X2hjZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgVVJCIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucyB1bmRlciBzaW11bGF0ZWQgVVNCIGNvbW11bmljYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXG5AQCAtNDAwLDE0ICYjNDM7NDAwLDMyIEBAIHN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKVxuICAqIGVycm9yLHN0YXJ0XG4gICpcbiAgKi9cbiYjNDM7c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSAtRU5PRU5UOlxuJiM0MztcdGNhc2UgLUVDT05OUkVTRVQ6XG4mIzQzO1x0Y2FzZSAtRVNIVVRET1dOOlxuJiM0MztcdGNhc2UgLUVQUk9UTzpcbiYjNDM7XHRjYXNlIC1FUElQRTpcbiYjNDM7XHRjYXNlIC1FSUxTRVE6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4gXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuIFx0aW50IHJldCwgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiBcbi1cdGlmIChzdGF0dXMpXG4mIzQzO1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuJiM0MztcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgQ01EX0tFWVBSRVNTOlxuQEAgLTQ0Myw5ICYjNDM7NDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbiYjNDM7XHRpZiAoc3RhdHVzKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4mIzQzO1x0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NTE1MWYzZDg5NWRmZWNlNGIwYzdjODcyNDY2OTY0MGEyYTFlNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOToxNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwpAQCAtNDAwLDE0ICYjNDM7NDAwLDMyIEBAIHN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKQogICogZXJyb3Isc3RhcnQKICAqCiAgKi8KJiM0MztzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0dXMpIHsKJiM0MzsJY2FzZSAtRU5PRU5UOgomIzQzOwljYXNlIC1FQ09OTlJFU0VUOgomIzQzOwljYXNlIC1FU0hVVERPV046CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRVBJUEU6CiYjNDM7CWNhc2UgLUVJTFNFUToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItJmd0O2NvbnRleHQ7CiAJaW50IHJldCwgc3RhdHVzID0gdXJiLSZndDtzdGF0dXM7CiAKLQlpZiAoc3RhdHVzKQomIzQzOwlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFtcDt5bGQtJmd0O2ludGYtJmd0O2RldiwgJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiYjNDM7CQlpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KIAogCXN3aXRjaCAoeWxkLSZndDtpcnFfZGF0YS0mZ3Q7Y21kKSB7CiAJY2FzZSBDTURfS0VZUFJFU1M6CkBAIC00NDMsOSAmIzQzOzQ2MSwxMiBAQCBzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi0mZ3Q7Y29udGV4dDsKIAlpbnQgcmV0ID0gMCwgc3RhdHVzID0gdXJiLSZndDtzdGF0dXM7CiAKLQlpZiAoc3RhdHVzKQomIzQzOwlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFtcDt5bGQtJmd0O2ludGYtJmd0O2RldiwgJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiYjNDM7CQlpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KIAogCXN3aXRjaCAoeWxkLSZndDtjdGxfZGF0YS0mZ3Q7Y21kKSB7CiAJY2FzZSBDTURfS0VZUFJFU1M6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgWWVhbGluayBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGV2YWx1YXRlLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gRmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gQWxyaWdodCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKWAsIHdhcyBhZGRlZCwgYW5kIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRvIGB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilgIGFuZCBgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpYC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIEkmIzM5O2xsIHB1bGwgdGhhdCB1cCB3aXRoIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgY29kZS4KCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhpcyBvbmUuLi4gaXQmIzM5O3MgdGhlIFllYWxpbmsgVm9JUCBVU0IgcGhvbmUgZHJpdmVyLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRlc3QgdGhpcz8gQ2FuIEkgZXZlbiBlbXVsYXRlIHRoaXMgaW4gYSBzdGFuZGFyZCBzZXR1cCBsaWtlIFFFTVUgb3IgU3l6a2FsbGVyPyBIbW0sIFN5emthbGxlciwgeWVzLCBpdCBkZWZpbml0ZWx5IGhhcyBVU0IgZW11bGF0aW9uLiBJIGNhbiBwcm9iYWJseSBnZXQgdGhpcyBkb25lIHVzaW5nIFJhdyBHYWRnZXQgb3IgdGhlIER1bW15IEhDRCwgb3IgcGVyaGFwcyBVU0IgZnV6emluZyB0aHJvdWdoIHN5el91c2JfY29ubmVjdC4uLiBCdXQgY2FuIHRoZSBgeWVhbGlua2AgVVNCIGRyaXZlciBldmVuIGJlIHByb2JlZCB2aWEgdGhlIFVTQiBlbXVsYXRpb24gaW4gU3l6a2FsbGVyPwoKUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhlIHRlc3RpbmcgcmFiYml0IGhvbGUsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBUaGF0IHdpbGwgYXQgbGVhc3QgdGVsbCBtZSB3aGF0IGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBldmVuIGNvbXBpbGUgYW5kIHJ1bi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5ZWFsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnPTQ3Mj1jb25maWcgSU5QVVRfWUVBTElOS1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4MS1cdCAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnMsIHNlZVxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDgyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZGV2aWNlcy95ZWFsaW5rLnJzdFx1MDAzZS5cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4My1cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4NC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZzo0ODU6XHQgIGNhbGxlZCB5ZWFsaW5rLlxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg2LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZT05NT1vYmotJChDT05GSUdfSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORClcdCYjNDM7PSB4ZW4ta2JkZnJvbnQub1xuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlOjk2Om9iai0kKENPTkZJR19JTlBVVF9ZRUFMSU5LKVx0XHQmIzQzOz0geWVhbGluay5vXG5kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUtOTctb2JqLSQoQ09ORklHX0lOUFVUX0lERUFQQURfU0xJREVCQVIpXHQmIzQzOz0gaWRlYXBhZF9zbGlkZWJhci5vXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMtMTQtICpcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jOjE1OiAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSB5ZWFsaW5rLmMgZHJpdmVyXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xNi0gKlxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMtMTctICogVGhhbmtzIHRvOlxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmM6MTg6ICogICAtIEF1dGhvcnMgb2YgeWVhbGluay5jXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xOS0gKiAgIC0gVGhvbWFzIFJlaXRtYXlyXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yLS8qXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQtICpcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMzLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzozNDojaW5jbHVkZSBcJiMzNDt5ZWFsaW5rLmhcJiMzNDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMzUtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9zZWdtZW50X21hcCB7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03Mi19IGxjZE1hcFtdID0ge1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzojaW5jbHVkZSBcJiMzNDt5ZWFsaW5rLmhcJiMzNDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzQtfTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzUtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjc2OnN0cnVjdCB5ZWFsaW5rX2RldiB7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc3LVx0c3RydWN0IGlucHV0X2RldiAqaWRldjtcdFx0LyogaW5wdXQgZGV2aWNlICovXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0xMTY9c3RhdGljIFNFRzdfREVGQVVMVF9NQVAobWFwX3NlZzcpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMTIxLSAgKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MTIyOnN0YXRpYyBpbnQgc2V0Q2hhcihzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVsLCBpbnQgY2hyKVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0xMjMte1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9MTgzPXN0YXRpYyBpbnQgbWFwX3Axa190b19rZXkoaW50IHNjYW5jb2RlKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE0LSAqL1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyMTU6c3RhdGljIHZvaWQgcmVwb3J0X2tleShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGtleSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE2LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTIzOS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MjQwOnN0YXRpYyBpbnQgeWVhbGlua19jbWQoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIHN0cnVjdCB5bGRfY3RsX3BhY2tldCAqcClcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjQxLXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTI1OD1zdGF0aWMgdTggZGVmYXVsdF9yaW5ndG9uZVtdID0ge1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjcxLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyNzI6c3RhdGljIGludCB5ZWFsaW5rX3NldF9yaW5ndG9uZShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI3My17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODQtXHR5bGQtXHUwMDNlY3RsX2RhdGEtXHUwMDNlZGF0YVswXVx0PSBidWZbMF07XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjI4NTpcdHllYWxpbmtfY21kKHlsZCwgcCk7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI4Ni1cbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI5OC1cdFx0bWVtY3B5KHAtXHUwMDNlZGF0YSwgXHUwMDI2YnVmW2l4XSwgbGVuKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Mjk5Olx0XHR5ZWFsaW5rX2NtZCh5bGQsIHApO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0zMDAtXHRcdGl4ICYjNDM7PSBsZW47XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0zMDYtICovXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjMwNzpzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMzA4LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDE5LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDIwOlx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDIxLVx0aW50IHJldCwgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0Ny1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDQ4Olx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0OS1cbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQ1OT1zdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDYxOlx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYyLVx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NzktXHRcdC8qIHNlbmQgbmV3IGNvbW1hbmQgKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDgwOlx0XHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDgxLVx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTUxNT1zdGF0aWMgaW50IGlucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01MTYte1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1MTc6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUxOC1cdGludCBpLCByZXQ7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01MjYtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjUyNzogICAgICAgIHllYWxpbmtfc2V0X3Jpbmd0b25lKHlsZCwgZGVmYXVsdF9yaW5ndG9uZSwgc2l6ZW9mKGRlZmF1bHRfcmluZ3RvbmUpKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTI4LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NTQzPXN0YXRpYyB2b2lkIGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTQ0LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NTQ1Olx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01NDYtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01OTM9c3RhdGljIHNzaXplX3Qgc2hvd19saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgYSwgaW50IGIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU5NC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjU5NTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU5Ni1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NjM2PXN0YXRpYyBzc2l6ZV90IHN0b3JlX2xpbmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTYzOC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjYzOTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY0MC1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9Njc1PXN0YXRpYyBzc2l6ZV90IGdldF9pY29ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNjc3LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njc4Olx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNjc5LVx0aW50IGksIHJldCA9IDE7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02OTU9c3RhdGljIHNzaXplX3Qgc2V0X2ljb24oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY5Ny17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjY5ODpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY5OS1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NzMxPXN0YXRpYyBzc2l6ZV90IHN0b3JlX3Jpbmd0b25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzMte1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzQ6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzUtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzgtXHQvKiBUT0RPIGxvY2tpbmcgd2l0aCBhc3luYyB1c2IgY29udHJvbCBpbnRlcmZhY2U/Pz8gKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzM5Olx0eWVhbGlua19zZXRfcmluZ3RvbmUoeWxkLCAoY2hhciAqKWJ1ZiwgY291bnQpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03NDAtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl90YWJsZSBbXSA9IHtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5NS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Nzk2OnN0YXRpYyBpbnQgdXNiX2NsZWFudXAoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIGludCBlcnIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5Ny17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04MTk9c3RhdGljIHZvaWQgdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTgyMC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjgyMTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODIyLVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9ODI3PXN0YXRpYyBpbnQgdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04MzItXHRzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50O1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MzM6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODM0LVx0c3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2O1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTU2LVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTc6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHllYWxpbmtfZHJpdmVyID0ge1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTg6XHQubmFtZVx0XHQ9IFwmIzM0O3llYWxpbmtcJiMzNDssXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OS1cdC5wcm9iZVx0XHQ9IHVzYl9wcm9iZSxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTY1Om1vZHVsZV91c2JfZHJpdmVyKHllYWxpbmtfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmgtMi0vKlxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaDozOiAqIGRyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuaFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaC00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZvciBpbnB1dCBkcml2ZXJzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDQ3Mi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdmFyaW91cyBtaXNjZWxsYW5lb3VzIGlucHV0IGRldmljZXMgYXJlIGRlZmluZWQsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIGF0IGhhbmQuIEhvcGVmdWxseSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNwb3QgdGhlIG9wdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yIG9yIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHJpdmVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7bGwgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNob2ljZXMgcmVsYXRlZCB0byB3aGF0ZXZlciBpbnB1dCBkZXZpY2UgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcbiA0NjY6XHRcdCAgWW91IGNhbiBkb3dubG9hZCB1c2Vyc3BhY2UgdG9vbHMgZnJvbVxuIDQ2NzpcdFx0ICBcdTAwM2NodHRwOi8vc293ZXJidXR0cy5jb20vcG93ZXJtYXRlL1x1MDAzZS5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNDcwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm1hdGUuXG4gNDcxOlx0XG4gNDcyOlx0Y29uZmlnIElOUFVUX1lFQUxJTktcbiA0NzM6XHRcdHRyaXN0YXRlIFwmIzM0O1llYWxpbmsgdXNiLXAxayB2b2lwIHBob25lXCYjMzQ7XG4gNDc0Olx0XHRkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0RcbiA0NzU6XHRcdHNlbGVjdCBVU0JcbiA0NzY6XHRcdGhlbHBcbiA0Nzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUga2V5Ym9hcmQgYW5kIExDRCBmdW5jdGlvbnMgb2YgdGhlXG4gNDc4Olx0XHQgIFllYWxpbmsgdXNiLXAxayB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljXG4gNDc5Olx0XHQgIHVzYiBzb3VuZCBkcml2ZXIsIHNvIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGF0IGFzIHdlbGwuXG4gNDgwOlx0XG4gNDgxOlx0XHQgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdXNlIHRoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zLCBzZWVcbiA0ODI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2RldmljZXMveWVhbGluay5yc3RcdTAwM2UuXG4gNDgzOlx0XG4gNDg0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuIDQ4NTpcdFx0ICBjYWxsZWQgeWVhbGluay5cbiA0ODY6XHRcbiA0ODc6XHRjb25maWcgSU5QVVRfQ00xMDlcbiA0ODg6XHRcdHRyaXN0YXRlIFwmIzM0O0MtTWVkaWEgQ00xMDkgVVNCIEkvTyBDb250cm9sbGVyXCYjMzQ7XG4gNDg5Olx0XHRkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0RcbiA0OTA6XHRcdHNlbGVjdCBVU0JcbiA0OTE6XHRcdGhlbHBcbiA0OTI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUga2V5Ym9hcmQgYW5kIGJ1enplciBmdW5jdGlvbnMgb2YgdGhlXG4gNDkzOlx0XHQgIEMtTWVkaWEgQ00xMDkgdXNiIHBob25lcy4gVGhlIGF1ZGlvIHBhcnQgaXMgZW5hYmxlZCBieSB0aGUgZ2VuZXJpY1xuIDQ5NDpcdFx0ICB1c2Igc291bmQgZHJpdmVyLCBzbyB5b3UgbWlnaHQgd2FudCB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFllYWxpbmsmIzM5O3MgSW5wdXQgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDQwMCB0byA1MDAuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmfigKYgc29tZXRoaW5nLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbnB1dCBwcm9jZXNzaW5nLCBldmVudCBoYW5kbGluZywgb3IgcG9zc2libHkgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBZZWFsaW5rIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBpbnB1dCBzdWJzeXN0ZW0gaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgbG9naWMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIHJldmVhbHMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIGFtIHByZXBhcmluZyB0byByZWFkIHRoZSBjb2RlLCBhbmFseXplIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBkaXNjZXJuIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBvZiB0aGUgZHJpdmVyLiBJIHdpbGwgbG9vayBmb3IgYW55IGFub21hbGllcyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0ICogZXJyb3Isc3RhcnRcbiA0MDE6XHQgKlxuIDQwMjpcdCAqL1xuIDQwMzpcdHN0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3dpdGNoIChzdGF0dXMpIHtcbiA0MDY6XHRcdGNhc2UgLUVOT0VOVDpcbiA0MDc6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gNDA4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gNDA5Olx0XHRjYXNlIC1FUFJPVE86XG4gNDEwOlx0XHRjYXNlIC1FUElQRTpcbiA0MTE6XHRcdGNhc2UgLUVJTFNFUTpcbiA0MTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDEzOlx0XHRkZWZhdWx0OlxuIDQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDE1Olx0XHR9XG4gNDE2Olx0fVxuIDQxNzpcdFxuIDQxODpcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gNDIxOlx0XHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKHN0YXR1cykge1xuIDQyNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQyNTpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQyNjpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Mjc6XHRcdFx0XHRyZXR1cm47XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiA0MzE6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQzMjpcdFxuIDQzMzpcdFx0XHR5bGQtXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF07XG4gNDM0Olx0XHRcdGJyZWFrO1xuIDQzNTpcdFxuIDQzNjpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDM3Olx0XHRcdGRldl9kYmcoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtnZXQgc2NhbmNvZGUgJXhcXG5cJiMzNDssXG4gNDM4Olx0XHRcdFx0eWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRyZXBvcnRfa2V5KHlsZCwgbWFwX3Axa190b19rZXkoeWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pKTtcbiA0NDE6XHRcdFx0YnJlYWs7XG4gNDQyOlx0XG4gNDQzOlx0XHRkZWZhdWx0OlxuIDQ0NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7dW5leHBlY3RlZCByZXNwb25zZSAleFxcblwmIzM0OyxcbiA0NDU6XHRcdFx0XHR5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pIHtcbiA0NTE6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ1MjpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQRVJNKVxuIDQ1MzpcdFx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDQ1NDpcdFx0XHRcdFx0XCYjMzQ7JXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXG5cJiMzNDssXG4gNDU1Olx0XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0NTY6XHRcdH1cbiA0NTc6XHR9XG4gNDU4Olx0XG4gNDU5Olx0c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiA0NjI6XHRcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHN0YXR1cykge1xuIDQ2NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQ2NjpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQ2NzpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm47XG4gNDY5Olx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VjdGxfZGF0YS1cdTAwM2VjbWQpIHtcbiA0NzI6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQ3MzpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDc0Olx0XHRcdC8qIGFzayBmb3IgYSByZXNwb25zZSAqL1xuIDQ3NTpcdFx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbiA0NzY6XHRcdFx0XHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXHUwMDNldXJiX2lycSwgR0ZQX0FUT01JQyk7XG4gNDc3Olx0XHRcdGJyZWFrO1xuIDQ3ODpcdFx0ZGVmYXVsdDpcbiA0Nzk6XHRcdFx0Lyogc2VuZCBuZXcgY29tbWFuZCAqL1xuIDQ4MDpcdFx0XHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcbiA0ODE6XHRcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pXG4gNDgyOlx0XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ4MzpcdFx0XHRicmVhaztcbiA0ODQ6XHRcdH1cbiA0ODU6XHRcbiA0ODY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBFUk0pXG4gNDg3Olx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDslcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcblwmIzM0OyxcbiA0ODg6XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0ODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBJbnRlcnJ1cHQgSGFuZGxpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgVVNCIGludGVycnVwdCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGVhbCB3aXRoIG5vbi16ZXJvIFVSQiBzdGF0dXMgY29kZXMgaW4gYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AuIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGJlZW4gYSByZWNlbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiB0aGUgYHN0YXR1c2Agd2FzbiYjMzk7dCB6ZXJvLCB3ZSYjMzk7ZCBsb2cgYW4gZXJyb3IgYW5kIHRoZW4gcHJvY2VlZCB3aXRoIHByb2Nlc3NpbmcgdGhlIGludGVycnVwdC4gTm93LCB0aGVyZSYjMzk7cyBhbiBhZGRlZCBjaGVjazogYGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKSByZXR1cm47YC4KCkVzc2VudGlhbGx5LCBpZiB0aGUgc3RhdHVzIGluZGljYXRlcyBhICYjMzQ7ZmF0YWwgZXJyb3IsJiMzNDsgdGhlIGZ1bmN0aW9uIHJldHVybnMgKmltbWVkaWF0ZWx5Ki4gVGhhdCBtZWFucyBubyBuZXcgVVJCIGlzIHN1Ym1pdHRlZCwgbm8gdGFza3MgYXJlIGV4ZWN1dGVkLCBhbmQgbm8gZGF0YSBpcyB0b3VjaGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlYXJseSByZXR1cm4gd2FzIGludHJvZHVjZWQuIFdhcyBpdCBhIGZpeCBmb3IgYSBzcGVjaWZpYyBpc3N1ZSwgb3IgYSBnZW5lcmFsIG9wdGltaXphdGlvbj8KClRpbWUgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byBnZXQgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGp1ZGdtZW50IGFib3V0IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCwgb3IgaWYgaXQgbWlnaHQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGhhbmRsaW5nIHBvdGVudGlhbGx5IGVycm9uZW91cyBpbnRlcnJ1cHRzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3llYWxpbmtfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9ODI3PXN0YXRpYyBpbnQgdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTYtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjk1NzpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeWVhbGlua19kcml2ZXIgPSB7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OC1cdC5uYW1lXHRcdD0gXCYjMzQ7eWVhbGlua1wmIzM0Oyxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTY1Om1vZHVsZV91c2JfZHJpdmVyKHllYWxpbmtfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBZZWFsaW5rIFVTQiBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSBgeWVhbGlua2AgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBzdGFuZGFyZCBVU0IgZHJpdmVyIHVzaW5nIGBtb2R1bGVfdXNiX2RyaXZlcih5ZWFsaW5rX2RyaXZlcilgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB0byBwcm9iZSB0aGlzIGRyaXZlci4gSWYgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBSYXcgR2FkZ2V0IG9yIFVTQiBmdXp6aW5nLCB0aGF0IHdvdWxkIGJlIGEgZmFudGFzdGljIGF2ZW51ZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBiZWF1dHkgb2Ygc3l6a2FsbGVyIGlzIGl0cyBhYmlsaXR5IHRvIGNyZWF0ZSB0aGVzZSB2aXJ0dWFsIFVTQiBkZXZpY2VzIHdpdGhpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0ZXN0aW5nIFVTQiBkcml2ZXJzIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgVVNCIGRldmljZSBJRCB0YWJsZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHR9O1xuIDc4MTpcdFxuIDc4MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfdGFibGUgW10gPSB7XG4gNzgzOlx0XHR7XG4gNzg0Olx0XHRcdC5tYXRjaF9mbGFnc1x0XHQ9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHxcbiA3ODU6XHRcdFx0XHRcdFx0XHRVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLFxuIDc4NjpcdFx0XHQuaWRWZW5kb3JcdFx0PSAweDY5OTMsXG4gNzg3Olx0XHRcdC5pZFByb2R1Y3RcdFx0PSAweGIwMDEsXG4gNzg4Olx0XHRcdC5iSW50ZXJmYWNlQ2xhc3NcdD0gVVNCX0NMQVNTX0hJRCxcbiA3ODk6XHRcdFx0LmJJbnRlcmZhY2VTdWJDbGFzc1x0PSAwLFxuIDc5MDpcdFx0XHQuYkludGVyZmFjZVByb3RvY29sXHQ9IDAsXG4gNzkxOlx0XHRcdC5kcml2ZXJfaW5mb1x0XHQ9IChrZXJuZWxfdWxvbmdfdClcdTAwMjZpbmZvX1AxS1xuIDc5MjpcdFx0fSxcbiA3OTM6XHRcdHsgfVxuIDc5NDpcdH07XG4gNzk1Olx0XG4gNzk2Olx0c3RhdGljIGludCB1c2JfY2xlYW51cChzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVycilcbiA3OTc6XHR7XG4gNzk4Olx0XHRpZiAoeWxkID09IE5VTEwpXG4gNzk5Olx0XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY3JpdGVyaWEgcHJlY2lzZWx5LiAmIzM0O1JlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLCYjMzQ7IHJpZ2h0PyBUaGUgY29kZSBoYXMgdG8gYmUgKmV4ZWN1dGFibGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE5vIGJsaW5kIHRydXN0IG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMsIGFuZCBhbnkgbmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gcmVhY2hhYmxlIGNvZGUgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk5vdywgd2hlbiBkbyBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gT25seSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSAoZG9jcywgdXNlci1zcGFjZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBldGMuKSwgaW52b2x2ZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChsaWtlIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCksIG9yIGhhcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgYC5yZW1vdmVgIGZ1bmN0aW9ucyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnKS4KCk9uIHRoZSBmbGlwIHNpZGUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCwgSSBzZWUgaXQgaW52b2x2ZXMgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLCBhIFVTQiBkcml2ZXIuIEV4Y2VsbGVudCEgSSBrbm93IHRoYXQgc3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBhY3RpdmVseSBpbnRlcmFjdCB3aXRoIFVTQiBkcml2ZXJzIHRocm91Z2ggcmF3IGdhZGdldCBhbmQgZHVtbXlfaGNkIGVtdWxhdGlvbi4gVGhlIGNvZGUgc2hvd3MgbWUgdGhpcyBpcyBmb3IgYW4gZW11bGF0ZWQgVVNCIGRldmljZSwgYSBZZWFsaW5rIGRldmljZSwgd2l0aCBhIHNwZWNpZmljIFZJRC9QSUQuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbnNpZGUgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgYmFzZWQgb24gdGhlIHN0YXR1cyBvZiBVUkIgY29tcGxldGlvbnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBpc19mYXRhbF9lcnJvcihzdGF0dXMpYCBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbCBiZWNhdXNlIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBhY3RpdmVseSB0cmllcyB0byB0cmlnZ2VyIHRob3NlIGNvbXBsZXRpb24gZXJyb3JzIGJ5IHNlbmRpbmcgaW52YWxpZCBVU0IgcGFja2V0cywgZGlzY29ubmVjdHMsIGV0Yy4gU28gdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzdWJtaXNzaW9uIGxvZ2ljISBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IGNvcnJlY3RseS4gVGhlIGNvZGUgZGVwZW5kcyBvbiBgY29uZmlnIElOUFVUX1lFQUxJTktgLCBgVVNCX0FSQ0hfSEFTX0hDRGAsIGFuZCBzZWxlY3RzIGBVU0JgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlIGVuY2xvc2luZyBgbWVudWNvbmZpZyBJTlBVVF9NSVNDYCBvciBgaWYgSU5QVVRfTUlTQ2AgaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlbiBJIGNhbiBjb25maXJtIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSW5wdXQgbWlzYyBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJTlBVVF9NSVNDXG4gICA2Olx0XHRib29sIFwmIzM0O01pc2NlbGxhbmVvdXMgZGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTYXkgWSBoZXJlLCBhbmQgYSBsaXN0IG9mIG1pc2NlbGxhbmVvdXMgaW5wdXQgZHJpdmVycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgIDk6XHRcdCAgRXZlcnl0aGluZyB0aGF0IGRpZG4mIzM5O3QgZml0IGludG8gdGhlIG90aGVyIGNhdGVnb3JpZXMgaXMgaGVyZS4gVGhpcyBvcHRpb25cbiAgMTA6XHRcdCAgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBrZXJuZWwuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDEzOlx0XG4gIDE0Olx0aWYgSU5QVVRfTUlTQ1xuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTlBVVF84OFBNODYwWF9PTktFWVxuICAxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODhQTTg2MHggT05LRVkgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0ZGVwZW5kcyBvbiBNRkRfODhQTTg2MFhcbiAgMTk6XHRcdGhlbHBcbiAgMjA6XHRcdCAgU3VwcG9ydCB0aGUgT05LRVkgb2YgTWFydmVsbCA4OFBNODYweCBQTUlDcyBhcyBhbiBpbnB1dCBkZXZpY2VcbiAgMjE6XHRcdCAgcmVwb3J0aW5nIHBvd2VyIGJ1dHRvbiBzdGF0dXMuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMjQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODhwbTg2MHhfb25rZXkuXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIElOUFVUXzg4UE04MFhfT05LRVlcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0Ozg4UE04MHggT05LRVkgc3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBNRkRfODhQTTgwMFxuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBTdXBwb3J0IHRoZSBPTktFWSBvZiBNYXJ2ZWxsIDg4UE04MHggUE1JQ3MgYXMgYW4gaW5wdXQgZGV2aWNlXG4gIDMxOlx0XHQgIHJlcG9ydGluZyBwb3dlciBidXR0b24gc3RhdHVzLlxuICAzMjpcdFxuICAzMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04MHhfb25rZXkuXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIElOUFVUXzg4UE04ODZfT05LRVlcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg4NiBvbmtleSBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1GRF84OFBNODg2X1BNSUNcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCB0aGUgb25rZXkgb2YgTWFydmVsbCA4OFBNODg2IFBNSUMgYXMgYW4gaW5wdXQgZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBJbnB1dCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgaW5wdXQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgcmlnaHQ/IEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGBkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ2AgZmlsZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogZ2V0cyBwdWxsZWQgaW50byB0aGUgbGFyZ2VyIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL2lucHV0L0tjb25maWdgLiBUaGlzIHNob3VsZCBzaG93IG1lIHRoZSBpbmNsdXNpb24gcGF0aCwgaGVscGluZyBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBtaXNjIGRyaXZlciBLY29uZmlnIGZpbGUgZml0cyB3aXRoaW4gdGhlIHdob2xlIGlucHV0IGRyaXZlciBjb25maWd1cmF0aW9uIHNjaGVtZS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L0tjb25maWc9MTg3PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvaW5wdXQvS2NvbmZpZy0xODgtXG5kcml2ZXJzL2lucHV0L0tjb25maWc6MTg5OnNvdXJjZSBcJiMzNDtkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pbnB1dC9LY29uZmlnLTE5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZHJpdmVycy9pbnB1dC9LY29uZmlnYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5wdXQgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgYXJvdW5kIGxpbmUgMTg5IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgaW5wdXQgZGV2aWNlIHNldHRpbmdzLiBIb3dldmVyLCBJIHdhbnQgdGhlIGZ1bGwgY29udGV4dC4gU28sIGJlZm9yZSBJIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgbGluZSwgSSYjMzk7bGwgc3RhcnQgYXQgdGhlIHZlcnkgdG9wIG9mIGBkcml2ZXJzL2lucHV0L0tjb25maWdgIHRvIHJlLWVzdGFibGlzaCB0aGUgb3ZlcmFsbCBsYXlvdXQgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgZ2VuZXJhbGx5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnl0aGluZyBzcGVjaWZpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBsaW5lIGFuZCB0aGUgZ3JlYXRlciB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O0lucHV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIElOUFVUXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGlucHV0IGxheWVyIChuZWVkZWQgZm9yIGtleWJvYXJkLCBtb3VzZSwgLi4uKVwmIzM0OyBpZiBFWFBFUlRcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgKG1vdXNlLCBrZXlib2FyZCwgdGFibGV0LFxuICAxMzpcdFx0ICBqb3lzdGljaywgc3RlZXJpbmcgd2hlZWwgLi4uKSBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0gYW5kIHdhbnRcbiAgMTQ6XHRcdCAgaXQgdG8gYmUgYXZhaWxhYmxlIHRvIGFwcGxpY2F0aW9ucy4gVGhpcyBpbmNsdWRlcyBzdGFuZGFyZCBQUy8yXG4gIDE1Olx0XHQgIGtleWJvYXJkIGFuZCBtb3VzZS5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgU2F5IE4gaGVyZSBpZiB5b3UgaGF2ZSBhIGhlYWRsZXNzIChubyBtb25pdG9yLCBubyBrZXlib2FyZCkgc3lzdGVtLlxuICAxODpcdFxuICAxOTpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTogXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnJzdFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAyMjpcdFxuICAyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlucHV0LlxuICAyNTpcdFxuICAyNjpcdGlmIElOUFVUXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIElOUFVUX0xFRFNcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O0V4cG9ydCBpbnB1dCBkZXZpY2UgTEVEcyBpbiBzeXNmc1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXG4gIDMxOlx0XHRkZWZhdWx0IElOUFVUXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gZXhwb3J0IExFRHMgb24gaW5wdXQgZGV2aWNlc1xuICAzNDpcdFx0ICBhcyBzdGFuZGFyZCBMRUQgY2xhc3MgZGV2aWNlcyBpbiBzeXNmcy5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWWVhbGluayBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFN5emthbGxlciBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgWWVhbGluayBVU0IgZHJpdmVyIGFuZCB0aGVuIHRoaW5rIGFib3V0IHdoYXQgdGhhdCBtZWFucyBmb3Igc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgZHJpdmVyLCBgSU5QVVRfWUVBTElOS2AsIGRlcGVuZHMgb24gYFVTQl9BUkNIX0hBU19IQ0RgIGFuZCBzZWxlY3RzIGBVU0JgLiBBbmQgKlVTQiogcmVxdWlyZXMgKkNPTkZJR19VU0IqLiAgRm9yIGVtdWxhdGlvbiwgSSBtaWdodCBuZWVkIGVpdGhlciBgVVNCX1JBV19HQURHRVRgIG9yIGBVU0JfRFVNTVlfSENEYCwgYnV0IHRoYXQmIzM5O3Mgc2VwYXJhdGUuIFRoZSAqY3JpdGljYWwqIHRoaW5nIGlzIHRoYXQgdG8gYnVpbGQgdGhlIGRyaXZlciBpdHNlbGYsIEkgbmVlZCBgQ09ORklHX0lOUFVUX1lFQUxJTktgLCB3aGljaCBpbiB0dXJuIHB1bGxzIGluIGBDT05GSUdfSU5QVVRgLCBgQ09ORklHX0lOUFVUX01JU0NgLCBhbmQgYENPTkZJR19VU0JgLgoKSSBjb25maXJtZWQgdGhlc2UgZGVwZW5kZW5jaWVzIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgYElOUFVUX1lFQUxJTktgIHNpdHMgdW5kZXIgdGhlIGBpZiBJTlBVVF9NSVNDYCBibG9jaywgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB1bmRlciB0aGUgYGlmIElOUFVUYCBjb25kaXRpb24uIFRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkZXBlbmRlbmN5IGNoYWluOiBgSU5QVVRfWUVBTElOS2AgZGVwZW5kcyBvbiBgSU5QVVRfTUlTQ2AgYW5kIGBJTlBVVGAsIGFuZCB1bHRpbWF0ZWx5IFVTQi4KCkZvciBzeXprYWxsZXIsIHRoZSAqRW5hYmxlQ29uZmlncyogZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgSSYjMzk7dmUgaWRlbnRpZmllZCwgSSYjMzk7ZCBkZWZpbml0ZWx5IHdhbnQgdG8gaW5jbHVkZToKCi0gICBgSU5QVVRfWUVBTElOS2AKLSAgIGBJTlBVVF9NSVNDYAotICAgYElOUFVUYAotICAgYFVTQmAKCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSAqRm9jdXNTeW1ib2xzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgYGlzX2ZhdGFsX2Vycm9yYC4gIGBpc19mYXRhbF9lcnJvcmAgaXMgbGlrZWx5IGlubGluZWQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhcyBjcml0aWNhbC4gQnV0IGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGFyZSBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIFRoZXkmIzM5O3JlIGZ1bmN0aW9uIHBvaW50ZXJzIHBhc3NlZCB0byBgdXNiX2ZpbGxfaW50X3VyYmAgYW5kIGB1c2JfZmlsbF9jb250cm9sX3VyYmAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBpbXBvcnRhbnQ6IHRoZXNlIGNhbGxiYWNrcyBhcmUgKmhvdyogdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hlcmUgdGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdpdGhpbiBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgbG9naWMgbGllcywgYW5kIGl0JiMzOTtzIHdoZXJlIGFueSBwb3RlbnRpYWwgc3l6a2FsbGVyIGZ1enppbmcgdGFyZ2V0cyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cmJfKGlycXxjdGwpX2NhbGxiYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQwMz1zdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDE3LVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MTg6c3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQxOS17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NTgtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ1OTpzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTgyNz1zdGF0aWMgaW50IHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkxLVx0XHRcdFVTQl9QS1RfTEVOLFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4OTI6XHRcdFx0dXJiX2lycV9jYWxsYmFjayxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkzLVx0XHRcdHlsZCwgZW5kcG9pbnQtXHUwMDNlYkludGVydmFsKTtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTkwNy1cdFx0XHQodm9pZCAqKXlsZC1cdTAwM2VjdGxfcmVxLCB5bGQtXHUwMDNlY3RsX2RhdGEsIFVTQl9QS1RfTEVOLFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5MDg6XHRcdFx0dXJiX2N0bF9jYWxsYmFjaywgeWxkKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA5LVx0eWxkLVx1MDAzZXVyYl9jdGwtXHUwMDNldHJhbnNmZXJfZG1hXHQ9IHlsZC1cdTAwM2VjdGxfZG1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IFllYWxpbmsgVVNCIFBob25lIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBZZWFsaW5rIFVTQiBwaG9uZSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb2RpZmljYXRpb25zIHRvIGl0cyBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gZW5zdXJpbmcgdGhlc2UgY2FsbGJhY2tzLCBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCwgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgZGlzY29ubmVjdHMgYW5kIGVycm9yIGluamVjdGlvbiwgd2hpY2ggY2FuIGJlIGVhc2lseSBzaW11bGF0ZWQuCgpGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzeW1ib2xzLiAgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgYXJlIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gVGhleSBjYW4mIzM5O3QgYmUgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB1c2VkIGZvciB0aGUgVVJCIGNhbGxiYWNrcy4gIGBpc19mYXRhbF9lcnJvcmAsIHdoaWxlIHN0YXRpYyBhbmQgbGlrZWx5IGlubGluZWQsIGlzIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MgaW4gY2FzZSBvZiBjb21waWxlciBvcHRpbWl6YXRpb24gaXNzdWVzIChvciBhYnNlbnQgb3B0aW1pemF0aW9uIGZsYWdzLikKCkkgY29uc2lkZXJlZCBgdXNiX3Byb2JlYCBhbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBidXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IHViaXF1aXRvdXMgb3IgZ2VuZXJpYyBuYW1lcy4gYHVzYl9wcm9iZWAgaXMgc3RhdGljIHRvIGB5ZWFsaW5rLmNgLCBidXQgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUgdG9vLCBzbyB0aGF0IGlzIG5vdCB0aGUgcmlnaHQgY2hvaWNlLCBwbHVzIHRoZSBmdW5jdGlvbnMgb2YgZm9jdXMgYXJlIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFja3MuCgpUaGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBkcml2ZXIsIHN1Y2ggYXMgYHllYWxpbmtfZG9faWRsZV90YXNrc2Agb3IgYHllYWxpbmtfY21kYCwgYXJlIHVudG91Y2hlZCwgc28gdGhleSBhcmUgbm90IHdoYXQmIzM5O3MgYmVpbmcgZnV6emVkIGhlcmUuIFRoZSBtb2RpZmljYXRpb24gaXMgY29udGFpbmVkIGluIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgdGhlIGFkZGVkIGBpc19mYXRhbF9lcnJvcmAuCgpCYXNlZCBvbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGRpZmYsIHRoZSBmdXp6aW5nIHRhcmdldCBpcyBjbGVhcjogY2hlY2tpbmcgaG93IHRoZSBkcml2ZXIgcmVhY3RzIHRvIGZhdGFsIFVSQiBzdGF0dXNlcyBpbiB0aG9zZSBjYWxsYmFja3MgaXMgd2hhdCBuZWVkcyB0aGUgYXR0ZW50aW9uLiAgVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgY29uZmlybWVkIGFzIGB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ7IHRoZSB0ZXN0YWJpbGl0eSBpcyBnb29kIGJlY2F1c2Ugb2Ygc3l6a2FsbGVyIGFuZCBVU0IgZW11bGF0aW9uIHN1cHBvcnQsIHNvIGZ1enppbmcgaXMgYW4gZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMgaGVyZS4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBJTlBVVF9ZRUFMSU5LYCwgYElOUFVUX01JU0NgLCBgSU5QVVRgLCBhbmQgYFVTQmAuCgpTbywgdGhlIGZ1enppbmcgc2V0dXAgd2lsbCBiZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBJTlBVVF9ZRUFMSU5LYCwgYElOUFVUX01JU0NgLCBgSU5QVVRgLCBgVVNCYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgKGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgKSBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApIHRvIGNoZWNrIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgKC1FTk9FTlQsIC1FQ09OTlJFU0VULCAtRVNIVVRET1dOLCAtRVBST1RPLCAtRVBJUEUsIC1FSUxTRVEpIGFuZCBhYm9ydCBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uIChlLmcuIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhhdCBVUkIgdGVybWluYXRpb24gYW5kIHN0YXRlIGhhbmRsaW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgdmFyaW91cyBlcnJvciBpbmplY3Rpb24gYW5kIGRldmljZSBkaXNjb25uZWN0IHNjZW5hcmlvcy4KCkV2ZXJ5dGhpbmcgaXMgZ29vZCwgYW5kIGl0IGlzIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU1MTUxZjNkODk1ZGZlY2U0YjBjN2M4NzI0NjY5NjQwYTJhMWU2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA5OjE0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCkBAIC00MDAsMTQgJiM0Mzs0MDAsMzIgQEAgc3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpCiAgKiBlcnJvcixzdGFydAogICoKICAqLwomIzQzO3N0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN0YXR1cykgewomIzQzOwljYXNlIC1FTk9FTlQ6CiYjNDM7CWNhc2UgLUVDT05OUkVTRVQ6CiYjNDM7CWNhc2UgLUVTSFVURE9XTjoKJiM0MzsJY2FzZSAtRVBST1RPOgomIzQzOwljYXNlIC1FUElQRToKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi0mZ3Q7Y29udGV4dDsKIAlpbnQgcmV0LCBzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIAotCWlmIChzdGF0dXMpCiYjNDM7CWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmYW1wO3lsZC0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzIC0gdXJiIHN0YXR1cyAlZFxuJiMzNDssCiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKJiM0MzsJCWlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQogCiAJc3dpdGNoICh5bGQtJmd0O2lycV9kYXRhLSZndDtjbWQpIHsKIAljYXNlIENNRF9LRVlQUkVTUzoKQEAgLTQ0Myw5ICYjNDM7NDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLSZndDtjb250ZXh0OwogCWludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIAotCWlmIChzdGF0dXMpCiYjNDM7CWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmYW1wO3lsZC0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzIC0gdXJiIHN0YXR1cyAlZFxuJiMzNDssCiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKJiM0MzsJCWlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQogCiAJc3dpdGNoICh5bGQtJmd0O2N0bF9kYXRhLSZndDtjbWQpIHsKIAljYXNlIENNRF9LRVlQUkVTUzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFllYWxpbmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggZm9yIHRoZSBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AgZmlsZS4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBleGFtaW5lIHRoZSBwcm9wb3NlZCBjaGFuZ2VzIHRoZW1zZWx2ZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoZSBjaGFuZ2UuIAoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBhcm91bmQgbGluZSA0MDAgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIG9yIGF0IGxlYXN0IGEgcmVnaW9uIHNpZ25pZmljYW50bHkgaW1wYWN0ZWQgYnkgaXQuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgZHJpdmVyIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHQgKlxuIDM5MTpcdCAqIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGRpYWdyYW0gaXMgc29tZXRoaGluZyBsaWtlOlxuIDM5MjpcdCAqXG4gMzkzOlx0ICogICAgICAgICAgc3luY1N0YXRlXHUwMDNjLS0mIzQzO1xuIDM5NDpcdCAqICAgICAgICAgICAgICAgfCAgICAgIHxcbiAzOTU6XHQgKiAgICAgICAgICAgICAgIHwgICAgaWRsZVxuIDM5NjpcdCAqICAgICAgICAgICAgICBcXHwvICAgICB8XG4gMzk3Olx0ICogaW5pdCAtLW9rLS1cdTAwM2Ugd2FpdEZvcktleSAtLW9rLS1cdTAwM2UgZ2V0S2V5XG4gMzk4Olx0ICogIF4gICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIHxcbiAzOTk6XHQgKiAgfCAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLW9rLS0tLS0tLSYjNDM7XG4gNDAwOlx0ICogZXJyb3Isc3RhcnRcbiA0MDE6XHQgKlxuIDQwMjpcdCAqL1xuIDQwMzpcdHN0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3dpdGNoIChzdGF0dXMpIHtcbiA0MDY6XHRcdGNhc2UgLUVOT0VOVDpcbiA0MDc6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gNDA4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gNDA5Olx0XHRjYXNlIC1FUFJPVE86XG4gNDEwOlx0XHRjYXNlIC1FUElQRTpcbiA0MTE6XHRcdGNhc2UgLUVJTFNFUTpcbiA0MTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDEzOlx0XHRkZWZhdWx0OlxuIDQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDE1Olx0XHR9XG4gNDE2Olx0fVxuIDQxNzpcdFxuIDQxODpcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gNDIxOlx0XHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKHN0YXR1cykge1xuIDQyNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQyNTpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQyNjpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Mjc6XHRcdFx0XHRyZXR1cm47XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiA0MzE6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQzMjpcdFxuIDQzMzpcdFx0XHR5bGQtXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF07XG4gNDM0Olx0XHRcdGJyZWFrO1xuIDQzNTpcdFxuIDQzNjpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDM3Olx0XHRcdGRldl9kYmcoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtnZXQgc2NhbmNvZGUgJXhcXG5cJiMzNDssXG4gNDM4Olx0XHRcdFx0eWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRyZXBvcnRfa2V5KHlsZCwgbWFwX3Axa190b19rZXkoeWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pKTtcbiA0NDE6XHRcdFx0YnJlYWs7XG4gNDQyOlx0XG4gNDQzOlx0XHRkZWZhdWx0OlxuIDQ0NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7dW5leHBlY3RlZCByZXNwb25zZSAleFxcblwmIzM0OyxcbiA0NDU6XHRcdFx0XHR5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pIHtcbiA0NTE6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ1MjpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQRVJNKVxuIDQ1MzpcdFx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDQ1NDpcdFx0XHRcdFx0XCYjMzQ7JXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXG5cJiMzNDssXG4gNDU1Olx0XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0NTY6XHRcdH1cbiA0NTc6XHR9XG4gNDU4Olx0XG4gNDU5Olx0c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiA0NjI6XHRcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHN0YXR1cykge1xuIDQ2NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQ2NjpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQ2NzpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm47XG4gNDY5Olx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VjdGxfZGF0YS1cdTAwM2VjbWQpIHtcbiA0NzI6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQ3MzpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDc0Olx0XHRcdC8qIGFzayBmb3IgYSByZXNwb25zZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdXJiX2N0bF9jYWxsYmFja2AgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpZyBpbnRvIHRoZSBgdXJiX2N0bF9jYWxsYmFja2AgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBjb250ZXh0LiBXZSYjMzk7cmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBhIFVTQiBDb250cm9sIFRyYW5zZmVyLCBvciBsaWtlbHkgYSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjYWxsYmFjayBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZW5kcG9pbnQsIGEgcGFydGljdWxhciBVU0IgY29tbWFuZCwgb3Igc29tZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gS25vd2luZyB0aGUgZGV2aWNlIChZZWFsaW5rKSBhbmQgdGhlICYjMzQ7bWlzYyYjMzQ7IGNhdGVnb3JpemF0aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIG5vbi1zdGFuZGFyZCwgcGVyaGFwcyB2ZW5kb3Itc3BlY2lmaWMsIGNvbnRyb2wgbWVzc2FnZXMgZm9yIGEgZGV2aWNlIGxpa2UgYSBwaG9uZSwgb3IgcG90ZW50aWFsbHkgc3BlY2lhbGl6ZWQgcGVyaXBoZXJhbCBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoLiBXaGF0JiMzOTtzIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjaywgYW5kIGhvdyBpcyBpdCB1c2VkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvaW50ZXJzIHRvIGRldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHNvbWUga2luZCBvZiBzdGF0ZSBtYWNoaW5lIHZhcmlhYmxlcywgb3IgcG9zc2libHkgZXZlbnQgcXVldWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgYmVjYXVzZSBhIGZhaWxlZCBVUkIgY2FsbGJhY2sgY2FuIGhhdmUgc2V2ZXJlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGZ1bmN0aW9uYWxpdHksIGFuZCBwb3RlbnRpYWxseSBsb2NrLXVwIHRoZSBkZXZpY2UuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGRhdGEgaW50ZXJwcmV0YXRpb24gdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBjbG9zZWx5LCBhcyB0aGVzZSBhcmUgb2Z0ZW4gd2hlcmUgdnVsbmVyYWJpbGl0aWVzIGFuZCBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuCgpNeSBnb2FsIGlzIHRvIHRob3JvdWdobHkgY29tcHJlaGVuZCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgYHVyYl9jdGxfY2FsbGJhY2tgIGlzIGludGVncmF0ZWQgaW50byB0aGUgWWVhbGluayBkZXZpY2UmIzM5O3MgZnVuY3Rpb25hbGl0eSwgc28gSSBjYW4gcHJvdmlkZSBteSBpbnNpZ2h0cyB0byB0aGUgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHRcbiA0NzE6XHRcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIDQ3MjpcdFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4gNDczOlx0XHRjYXNlIENNRF9TQ0FOQ09ERTpcbiA0NzQ6XHRcdFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXG4gNDc1Olx0XHRcdGlmICgheWxkLVx1MDAzZXNodXRkb3duKVxuIDQ3NjpcdFx0XHRcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cdTAwM2V1cmJfaXJxLCBHRlBfQVRPTUlDKTtcbiA0Nzc6XHRcdFx0YnJlYWs7XG4gNDc4Olx0XHRkZWZhdWx0OlxuIDQ3OTpcdFx0XHQvKiBzZW5kIG5ldyBjb21tYW5kICovXG4gNDgwOlx0XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ4MTpcdFx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbiA0ODI6XHRcdFx0XHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XG4gNDgzOlx0XHRcdGJyZWFrO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUEVSTSlcbiA0ODc6XHRcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0OyVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkICVkXFxuXCYjMzQ7LFxuIDQ4ODpcdFx0XHRcdF9fZnVuY19fLCByZXQpO1xuIDQ4OTpcdH1cbiA0OTA6XHRcbiA0OTE6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDQ5MjpcdCAqIGlucHV0IGV2ZW50IGludGVyZmFjZVxuIDQ5MzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gNDk0Olx0XG4gNDk1Olx0LyogVE9ETyBzaG91bGQgd2UgaXNzdWUgYSByaW5ndG9uZSBvbiBhIFNORF9CRUxMIGV2ZW50P1xuIDQ5NjpcdHN0YXRpYyBpbnQgaW5wdXRfZXYoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSxcbiA0OTc6XHRcdFx0dW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSlcbiA0OTg6XHR7XG4gNDk5Olx0XG4gNTAwOlx0XHRpZiAodHlwZSAhPSBFVl9TTkQpXG4gNTAxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwMjpcdFxuIDUwMzpcdFx0c3dpdGNoIChjb2RlKSB7XG4gNTA0Olx0XHRjYXNlIFNORF9CRUxMOlxuIDUwNTpcdFx0Y2FzZSBTTkRfVE9ORTpcbiA1MDY6XHRcdFx0YnJlYWs7XG4gNTA3Olx0XHRkZWZhdWx0OlxuIDUwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBZZWFsaW5rIFVTQiBkcml2ZXIgcmVsYXRlZCB0byBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBoYW5kbGluZy4gUHJldmlvdXNseSwgZXZlbiBpZiBhIFVSQiByZXR1cm5lZCBhIG5vbi16ZXJvIHN0YXR1cyBjb2RlLCBpbmRpY2F0aW5nIGFuIGVycm9yIGxpa2UgYSBkaXNjb25uZWN0IG9yIGZhdGFsIGVycm9yLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24ga2VwdCBjaHVnZ2luZyBhbG9uZy4gVGhlIGNvZGUgd291bGQgYmxpdGhlbHkgY29udGludWUgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmAgKGxpa2UgYGlycV9kYXRhYCksIHBvdGVudGlhbGx5IHJlLXN1Ym1pdHRpbmcgdGhlIFVSQiB3aXRoIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB3YXMgY2hlY2tpbmcgYHlsZC0mZ3Q7aXJxX2RhdGEtJmd0O2NtZGAgb3IgYHlsZC0mZ3Q7Y3RsX2RhdGEtJmd0O2NtZGAgYW5kIGNhbGxpbmcgYHllYWxpbmtfZG9faWRsZV90YXNrc2AgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IuIFRoaXMgaXMgYSByZWQgZmxhZy4KClRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlzX2ZhdGFsX2Vycm9yKHN0YXR1cylgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIHRoZSBjYWxsYmFjayAqaW1tZWRpYXRlbHkqIHJldHVybnMuIE5vIGZ1cnRoZXIgcHJvY2Vzc2luZywgbm8gcmVzdWJtaXNzaW9uLCBwZXJpb2QuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGFwcHJvYWNoIHRvIHByZXZlbnQgdGhlIGlzc3VlcyBJJiMzOTt2ZSBvZnRlbiBzZWVuIGluIG90aGVyIHNpbWlsYXIgZHJpdmVycy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gU28gSSYjMzk7bSBydW5uaW5nIGRvd24gdGhlIGxpc3QuCgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIHRoYXQmIzM5O3MgZ29vZC4KKiAgIFRoZSBsb2dpYyBpdHNlbGYgcmVsaWVzIG9uIGB1cmItJmd0O3N0YXR1c2AsIHdoaWNoIGlzIHNldCBieSB0aGUgVVNCIGNvcmUuIFRoZW4gaXQgdXNlcyB0aGUgcmVzdWx0IGluIGBpc19mYXRhbF9lcnJvcigpYC4gU2VlbXMgc2FmZSwgYXMgSSByZWNhbGwgaG93IHRoZSBVU0IgY29yZSB3b3Jrcy4KKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHBhdGNoIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuCiogICBUaGlzIGFsc28gcHJldmVudHMgdW5pbml0aWFsaXplZCBieXRlcy4gQWN0dWFsbHksIGJ5IHJldHVybmluZyBlYXJseSwgdGhlIHBhdGNoICpwcmV2ZW50cyogcmVhZGluZyBmcm9tIHRoZSBidWZmZXIgd2hlbiBpdCBtaWdodCBjb250YWluIHN0YWxlLCBpbnZhbGlkLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmchCgpVbHRpbWF0ZWx5LCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBkZWZlbnNpdmUgcGF0Y2gsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBJdCBpcyBsaWtlbHkgZGVzaWduZWQgdG8gcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZ2V0dGluZyBpbnRvIGFuIGluZmluaXRlIGxvb3Agb2YgVVJCIHJlc3VibWlzc2lvbiBvciByZWFkaW5nIGZyb20gaW52YWxpZCBtZW1vcnkgYWZ0ZXIgYSBkZXZpY2UgZGlzY29ubmVjdCBvciBzZXJpb3VzIFVTQiBlcnJvci4gSXQgbG9va3MgbGlrZSB0aGlzIGZpeGVzIGEgY2xhc3NpYyBwcm9ibGVtIEkmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QgLSBpbmZpbml0ZSBsb29wIG9mIHVyYiBzdWJtaXNzaW9uIG9uIGRpc2Nvbm5lY3QsIG9yIHVzZS1hZnRlci1mcmVlLCBvciBgV0FSTl9PTmAgaW4gdGhlIFVTQiBjb3JlIHdoZW4gcmVzdWJtaXR0aW5nIGEgZGVhZCBVUkIuIFNvIEkmIzM5O2xsIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSwgYW5kIHRoZSBzdXJyb3VuZGluZyBVU0IgZHJpdmVyIGNvZGUgZm9yIHRoZXNlIGVycm9yIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19mYXRhbF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9MzA3PXN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDAyLSAqL1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MDM6c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDA0LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQyNS1cdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDI2Olx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDI3LVx0XHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQ1OT1zdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Ni1cdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDY3Olx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDY4LVx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFllYWxpbmsgRHJpdmVyIENvZGUgLSBEaXZpbmcgaW50byBHaXQgTG9nKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFllYWxpbmsgZHJpdmVyJiMzOTtzIHN0cnVjdHVyZSBhbmQgYW55IGNvbW1vbiBjb2RpbmcgcGF0dGVybnMgd2l0aGluIHRoaXMgZHJpdmVyIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgbGlrZSBpdC4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGluaXRpYWxseSBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIG9mIGB5ZWFsaW5rLmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBsb2cgd2lsbCBpbGx1bWluYXRlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvZGUsIGtleSBjb21taXRzLCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjZXJ0YWluIGRlc2lnbiBjaG9pY2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcmVjdXJyaW5nIGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBhZGRyZXNzZWQgb3ZlciB0aW1lLiBFeGFtaW5pbmcgdGhlIGNvbW1pdHMgcmVsYXRlZCB0byBvdGhlciBkcml2ZXJzIGluIHRoaXMgYXJlYSwgdG9vLCB3b3VsZCBiZSBoZWxwZnVsLiBDb21wYXJpbmcgdGhlIGFwcHJvYWNoZXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBiZXN0IHByYWN0aWNlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgb3duIHdvcmsgb24gc2ltaWxhciBkcml2ZXJzLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaWRlYSBvZiBob3cgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1FTk9FTlQuKi1FQ09OTlJFU0VULiotRVNIVVRET1dOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0yOTg9c3RhdGljIHZvaWQgdWFzX3N0YXRfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtMzEyLVx0aWYgKHN0YXR1cykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzozMTM6XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FQ09OTlJFU0VUIFx1MDAyNlx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtMzE0LVx0XHRcdGRldl9lcnIoXHUwMDI2dXJiLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3N0YXQgdXJiOiBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0zOTg9c3RhdGljIHZvaWQgdWFzX2RhdGFfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtNDI2LVx0aWYgKHN0YXR1cykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzo0Mjc6XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FQ09OTlJFU0VUIFx1MDAyNlx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtNDI4LVx0XHRcdHVhc19sb2dfY21kX3N0YXRlKGNtbmQsIFwmIzM0O2RhdGEgY21wbHQgZXJyXCYjMzQ7LCBzdGF0dXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODIyCgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVUkIgQ29tcGxldGlvbiBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlYWxpbmcgd2l0aCB0aGUgc3RhbmRhcmQgVVNCIGRyaXZlciBiZWhhdmlvciBhcm91bmQgVVJCIGNvbXBsZXRpb24gc3RhdHVzZXMgbGlrZSBgLUVOT0VOVGAsIGAtRUNPTk5SRVNFVGAsIGFuZCBgLUVTSFVURE9XTmAgd2hlbiBhbiBVUkIgaXMgdW5saW5rZWQgb3IgdGhlIGRldmljZSBnZXRzIGRpc2Nvbm5lY3RlZC4gV2UgYWxsIGtub3cgdGhhdCByZXN1Ym1pdHRpbmcgaW4gdGhlc2Ugc2NlbmFyaW9zIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgcmVzdWJtaXNzaW9uIGxvb3BzIG9yIFVBRnMuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgY29ycmVjdGx5LCBpcyBhIGNoZWNrIHdpdGhpbiB0aGUgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgZnVuY3Rpb25zOiBgaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKWAuIFRoaXMgaXMgbWVhbnQgdG8gcHJldmVudCBmdXJ0aGVyIGFjdGlvbiBvbiBhbiBVUkIsIG9yIGF0dGVtcHRpbmcgdG8gcmVzdWJtaXQgaXQsIGlmIGEgY3JpdGljYWwgVVNCIGVycm9yLCBsaWtlIGEgZGV2aWNlIGRpc2Nvbm5lY3QsIGhhcyBoYXBwZW5lZC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHNwZWNpZmljYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICBEb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkPyBOby4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuCiogICBEb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZS4KKiAgIElzIGl0IHJlYWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4KKiAgIERvZXMgaXQgYWZmZWN0IGJvdW5kcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBTdGlsbCBuby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG91ciB3b3JrIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBLQVNBTiBoYW5kbGVzIG1lbW9yeSBjb3JydXB0aW9uLCBVQUZzLCBhbmQgb3V0LW9mLWJvdW5kcywgd2hpbGUgS01TQU4gd291bGQgZmxhZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGp1c3QgYWRkcmVzc2VzIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24sIHByZXZlbnRpbmcgcHJvYmxlbXMgbGlrZSBpbmZpbml0ZSByZXN1Ym1pc3Npb25zIG9yIFVBRiB3YXJuaW5ncy4gVGhlcmUgaXMgemVybyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uLCByZWFkIG9yIGxlYWsgdG8gdXNlcnNwYWNlIGFuZCB3ZSBhcmUgc29sZWx5IG1hbmFnaW5nIHRoZSBVUkIgY29tcGxldGlvbiBwcm9jZXNzIGR1cmluZyBhIGZhaWx1cmUgdG8gcHJldmVudCB1bmludGVuZGVkIGNvZGUgZXhlY3V0aW9uIGluIGEgZmFpbHVyZSBjb25kaXRpb24uIFRoZXJlZm9yZSwgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeS4gU3RhbmRhcmQgS0FTQU4vc3l6a2FsbGVyIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHZlcmlmaWNhdGlvbi4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNS42MDIyMzA2ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMDI5MjE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5QVVRfWUVBTElOS1wiLFxuICAgIFwiSU5QVVRfTUlTQ1wiLFxuICAgIFwiSU5QVVRcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVyYl9pcnFfY2FsbGJhY2tcIixcbiAgICBcInVyYl9jdGxfY2FsbGJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBjb250cm9sIGZsb3cgb24gVVNCIGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgaW5maW5pdGUgVVJCIHJlc3VibWlzc2lvbnMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB1cG9uIGRldmljZSB0ZWFyZG93bi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MDUuNjAyMjM2MjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MTYxODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU1MTUxZjNkODk1ZGZlY2U0YjBjN2M4NzI0NjY5NjQwYTJhMWU2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOToxNDowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xcbmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcXG5AQCAtNDAwLDE0ICs0MDAsMzIgQEAgc3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpXFxuICAqIGVycm9yLHN0YXJ0XFxuICAqXFxuICAqL1xcbitzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAoc3RhdHVzKSB7XFxuK1xcdGNhc2UgLUVOT0VOVDpcXG4rXFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4rXFx0Y2FzZSAtRVNIVVRET1dOOlxcbitcXHRjYXNlIC1FUFJPVE86XFxuK1xcdGNhc2UgLUVQSVBFOlxcbitcXHRjYXNlIC1FSUxTRVE6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuIHtcXG4gXFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIFxcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG4tXFx0aWYgKHN0YXR1cylcXG4rXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuK1xcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4gXFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG4tXFx0aWYgKHN0YXR1cylcXG4rXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuK1xcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNy4xOTg0MTU1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY5MjI5NTMwMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOUFVUX1lFQUxJTktcIixcbiAgICBcIklOUFVUX01JU0NcIixcbiAgICBcIklOUFVUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cmJfaXJxX2NhbGxiYWNrXCIsXG4gICAgXCJ1cmJfY3RsX2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xuaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbkBAIC00MDAsMTQgKzQwMCwzMiBAQCBzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbiAgKiBlcnJvcixzdGFydFxuICAqXG4gICovXG4rc3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSAtRU5PRU5UOlxuK1x0Y2FzZSAtRUNPTk5SRVNFVDpcbitcdGNhc2UgLUVTSFVURE9XTjpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVQSVBFOlxuK1x0Y2FzZSAtRUlMU0VROlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG4tXHRpZiAoc3RhdHVzKVxuK1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCIlcyAtIHVyYiBzdGF0dXMgJWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbitcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0c3dpdGNoICh5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKSB7XG4gXHRjYXNlIENNRF9LRVlQUkVTUzpcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbitcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiJXMgLSB1cmIgc3RhdHVzICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4rXHRcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNy4xOTg0MTgxNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTEwMjU1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIFllYWxpbmsgVVNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIEZpcnN0IHRoaW5nIEknbGwgZG8gaXMgemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gQWxyaWdodCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKWAsIHdhcyBhZGRlZCwgYW5kIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRvIGB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilgIGFuZCBgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpYC4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5ICppbiogYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBJJ2xsIHB1bGwgdGhhdCB1cCB3aXRoIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgY29kZS5cblxuQWxyaWdodCwgSSByZW1lbWJlciB0aGlzIG9uZS4uLiBpdCdzIHRoZSBZZWFsaW5rIFZvSVAgVVNCIHBob25lIGRyaXZlci4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gSSB0ZXN0IHRoaXM/IENhbiBJIGV2ZW4gZW11bGF0ZSB0aGlzIGluIGEgc3RhbmRhcmQgc2V0dXAgbGlrZSBRRU1VIG9yIFN5emthbGxlcj8gSG1tLCBTeXprYWxsZXIsIHllcywgaXQgZGVmaW5pdGVseSBoYXMgVVNCIGVtdWxhdGlvbi4gSSBjYW4gcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSB1c2luZyBSYXcgR2FkZ2V0IG9yIHRoZSBEdW1teSBIQ0QsIG9yIHBlcmhhcHMgVVNCIGZ1enppbmcgdGhyb3VnaCBzeXpfdXNiX2Nvbm5lY3QuLi4gQnV0IGNhbiB0aGUgYHllYWxpbmtgIFVTQiBkcml2ZXIgZXZlbiBiZSBwcm9iZWQgdmlhIHRoZSBVU0IgZW11bGF0aW9uIGluIFN5emthbGxlcj9cblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhlIHRlc3RpbmcgcmFiYml0IGhvbGUsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBUaGF0IHdpbGwgYXQgbGVhc3QgdGVsbCBtZSB3aGF0IGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBldmVuIGNvbXBpbGUgYW5kIHJ1bi4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoxMS4zMDg2NzYzOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5Njk3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieWVhbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc9NDcyPWNvbmZpZyBJTlBVVF9ZRUFMSU5LXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZy00ODEtXFx0ICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgc2VlXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDgyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9kZXZpY2VzL3llYWxpbmsucnN0XFx1MDAzZS5cXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZy00ODMtXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDg1OlxcdCAgY2FsbGVkIHllYWxpbmsuXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg2LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlPTk1PW9iai0kKENPTkZJR19JTlBVVF9YRU5fS0JEREVWX0ZST05URU5EKVxcdCs9IHhlbi1rYmRmcm9udC5vXFxuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlOjk2Om9iai0kKENPTkZJR19JTlBVVF9ZRUFMSU5LKVxcdFxcdCs9IHllYWxpbmsub1xcbmRyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZS05Ny1vYmotJChDT05GSUdfSU5QVVRfSURFQVBBRF9TTElERUJBUilcXHQrPSBpZGVhcGFkX3NsaWRlYmFyLm9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jLTE0LSAqXFxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmM6MTU6ICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIHllYWxpbmsuYyBkcml2ZXJcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xNi0gKlxcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jLTE3LSAqIFRoYW5rcyB0bzpcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYzoxODogKiAgIC0gQXV0aG9ycyBvZiB5ZWFsaW5rLmNcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xOS0gKiAgIC0gVGhvbWFzIFJlaXRtYXlyXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTItLypcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00LSAqXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMzLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MzQ6I2luY2x1ZGUgXFxcInllYWxpbmsuaFxcXCJcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTM1LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9zZWdtZW50X21hcCB7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTcyLX0gbGNkTWFwW10gPSB7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzojaW5jbHVkZSBcXFwieWVhbGluay5oXFxcIlxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzQtfTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc1LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzY6c3RydWN0IHllYWxpbmtfZGV2IHtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc3LVxcdHN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7XFx0XFx0LyogaW5wdXQgZGV2aWNlICovXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTExNj1zdGF0aWMgU0VHN19ERUZBVUxUX01BUChtYXBfc2VnNyk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTEyMS0gICovXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoxMjI6c3RhdGljIGludCBzZXRDaGFyKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkLCBpbnQgZWwsIGludCBjaHIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0xODM9c3RhdGljIGludCBtYXBfcDFrX3RvX2tleShpbnQgc2NhbmNvZGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTIxNC0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjIxNTpzdGF0aWMgdm9pZCByZXBvcnRfa2V5KHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkLCBpbnQga2V5KVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjM5LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MjQwOnN0YXRpYyBpbnQgeWVhbGlua19jbWQoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIHN0cnVjdCB5bGRfY3RsX3BhY2tldCAqcClcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI0MS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTI1OD1zdGF0aWMgdTggZGVmYXVsdF9yaW5ndG9uZVtdID0ge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yNzEtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyNzI6c3RhdGljIGludCB5ZWFsaW5rX3NldF9yaW5ndG9uZShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODQtXFx0eWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlZGF0YVswXVxcdD0gYnVmWzBdO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Mjg1OlxcdHllYWxpbmtfY21kKHlsZCwgcCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI5OC1cXHRcXHRtZW1jcHkocC1cXHUwMDNlZGF0YSwgXFx1MDAyNmJ1ZltpeF0sIGxlbik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyOTk6XFx0XFx0eWVhbGlua19jbWQoeWxkLCBwKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwMC1cXHRcXHRpeCArPSBsZW47XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwNi0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjMwNzpzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwOC17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQxOS17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MjA6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjEtXFx0aW50IHJldCwgc3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0Ny1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ0ODpcXHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0OS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NDU5PXN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ2MTpcXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Mi1cXHRpbnQgcmV0ID0gMCwgc3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ3OS1cXHRcXHQvKiBzZW5kIG5ldyBjb21tYW5kICovXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0ODA6XFx0XFx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00ODEtXFx0XFx0aWYgKCF5bGQtXFx1MDAzZXNodXRkb3duKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01MTU9c3RhdGljIGludCBpbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUxNi17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1MTc6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTE4LVxcdGludCBpLCByZXQ7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUyNi1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjUyNzogICAgICAgIHllYWxpbmtfc2V0X3Jpbmd0b25lKHlsZCwgZGVmYXVsdF9yaW5ndG9uZSwgc2l6ZW9mKGRlZmF1bHRfcmluZ3RvbmUpKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUyOC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NTQzPXN0YXRpYyB2b2lkIGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU0NC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1NDU6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTQ2LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01OTM9c3RhdGljIHNzaXplX3Qgc2hvd19saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgYSwgaW50IGIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01OTQte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NTk1OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01OTYtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTYzNj1zdGF0aWMgc3NpemVfdCBzdG9yZV9saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTYzOC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo2Mzk6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY0MC1cXHRpbnQgaTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9Njc1PXN0YXRpYyBzc2l6ZV90IGdldF9pY29ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02Nzcte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njc4OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02NzktXFx0aW50IGksIHJldCA9IDE7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTY5NT1zdGF0aWMgc3NpemVfdCBzZXRfaWNvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02OTcte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njk4OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02OTktXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTczMT1zdGF0aWMgc3NpemVfdCBzdG9yZV9yaW5ndG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzMte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzM0OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzUtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTczOC1cXHQvKiBUT0RPIGxvY2tpbmcgd2l0aCBhc3luYyB1c2IgY29udHJvbCBpbnRlcmZhY2U/Pz8gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjczOTpcXHR5ZWFsaW5rX3NldF9yaW5ndG9uZSh5bGQsIChjaGFyICopYnVmLCBjb3VudCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03NDAtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTc4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RhYmxlIFtdID0ge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03OTUtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3OTY6c3RhdGljIGludCB1c2JfY2xlYW51cChzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVycilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5Ny17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTgxOT1zdGF0aWMgdm9pZCB1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTgyMC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MjE6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODIyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODMyLVxcdHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MzM6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04MzQtXFx0c3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2O1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTYtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTc6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHllYWxpbmtfZHJpdmVyID0ge1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTU4OlxcdC5uYW1lXFx0XFx0PSBcXFwieWVhbGlua1xcXCIsXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTktXFx0LnByb2JlXFx0XFx0PSB1c2JfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjk2NTptb2R1bGVfdXNiX2RyaXZlcih5ZWFsaW5rX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NjYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oLTItLypcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5oXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaC00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjExLjM3NjY1Mjk0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDgwODMzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgZm9yIGlucHV0IGRyaXZlcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWdgIOKAkyBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSA0NzIuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhcmlvdXMgbWlzY2VsbGFuZW91cyBpbnB1dCBkZXZpY2VzIGFyZSBkZWZpbmVkLCBhbmQgSSdtIGdvaW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0gYXQgaGFuZC4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBzcG90IHRoZSBvcHRpb24gSSdtIGxvb2tpbmcgZm9yIG9yIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHJpdmVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ20gaG9waW5nIGl0J2xsIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaG9pY2VzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgaW5wdXQgZGV2aWNlIGZ1bmN0aW9uYWxpdHkgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjEzLjg4NDczOTA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFxuIDQ2NjpcXHRcXHQgIFlvdSBjYW4gZG93bmxvYWQgdXNlcnNwYWNlIHRvb2xzIGZyb21cXG4gNDY3OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zb3dlcmJ1dHRzLmNvbS9wb3dlcm1hdGUvXFx1MDAzZS5cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNDcwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2VybWF0ZS5cXG4gNDcxOlxcdFxcbiA0NzI6XFx0Y29uZmlnIElOUFVUX1lFQUxJTktcXG4gNDczOlxcdFxcdHRyaXN0YXRlIFxcXCJZZWFsaW5rIHVzYi1wMWsgdm9pcCBwaG9uZVxcXCJcXG4gNDc0OlxcdFxcdGRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRFxcbiA0NzU6XFx0XFx0c2VsZWN0IFVTQlxcbiA0NzY6XFx0XFx0aGVscFxcbiA0Nzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBrZXlib2FyZCBhbmQgTENEIGZ1bmN0aW9ucyBvZiB0aGVcXG4gNDc4OlxcdFxcdCAgWWVhbGluayB1c2ItcDFrIHVzYiBwaG9uZXMuIFRoZSBhdWRpbyBwYXJ0IGlzIGVuYWJsZWQgYnkgdGhlIGdlbmVyaWNcXG4gNDc5OlxcdFxcdCAgdXNiIHNvdW5kIGRyaXZlciwgc28geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlIHRoYXQgYXMgd2VsbC5cXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgc2VlXFxuIDQ4MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZGV2aWNlcy95ZWFsaW5rLnJzdFxcdTAwM2UuXFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuIDQ4NTpcXHRcXHQgIGNhbGxlZCB5ZWFsaW5rLlxcbiA0ODY6XFx0XFxuIDQ4NzpcXHRjb25maWcgSU5QVVRfQ00xMDlcXG4gNDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJDLU1lZGlhIENNMTA5IFVTQiBJL08gQ29udHJvbGxlclxcXCJcXG4gNDg5OlxcdFxcdGRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRFxcbiA0OTA6XFx0XFx0c2VsZWN0IFVTQlxcbiA0OTE6XFx0XFx0aGVscFxcbiA0OTI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBrZXlib2FyZCBhbmQgYnV6emVyIGZ1bmN0aW9ucyBvZiB0aGVcXG4gNDkzOlxcdFxcdCAgQy1NZWRpYSBDTTEwOSB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljXFxuIDQ5NDpcXHRcXHQgIHVzYiBzb3VuZCBkcml2ZXIsIHNvIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGF0IGFzIHdlbGwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjEzLjg4NDg2NDYzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MzUzNTAwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gWWVhbGluaydzIElucHV0IERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDAwIHRvIDUwMC4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGV5J3JlIGhhbmRsaW5n4oCmIHNvbWV0aGluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbnB1dCBwcm9jZXNzaW5nLCBldmVudCBoYW5kbGluZywgb3IgcG9zc2libHkgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBZZWFsaW5rIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGlucHV0IHN1YnN5c3RlbSBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljLiBMZXQncyBzZWUgaWYgdGhpcyBzZWN0aW9uIHJldmVhbHMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0gSSdtIGludmVzdGlnYXRpbmcuIEkgYW0gcHJlcGFyaW5nIHRvIHJlYWQgdGhlIGNvZGUsIGFuYWx5emUgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIGRpc2Nlcm4gdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBkcml2ZXIuIEkgd2lsbCBsb29rIGZvciBhbnkgYW5vbWFsaWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjE2LjUyMDIxODUxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHQgKiBlcnJvcixzdGFydFxcbiA0MDE6XFx0ICpcXG4gNDAyOlxcdCAqL1xcbiA0MDM6XFx0c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN3aXRjaCAoc3RhdHVzKSB7XFxuIDQwNjpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDQwNzpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiA0MDg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiA0MDk6XFx0XFx0Y2FzZSAtRVBST1RPOlxcbiA0MTA6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDQxMTpcXHRcXHRjYXNlIC1FSUxTRVE6XFxuIDQxMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDEzOlxcdFxcdGRlZmF1bHQ6XFxuIDQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxNTpcXHRcXHR9XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDQyMTpcXHRcXHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKHN0YXR1cykge1xcbiA0MjQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVyYiBzdGF0dXMgJWRcXFxcblxcXCIsXFxuIDQyNTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG4gNDI2OlxcdFxcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbiA0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0Mjg6XFx0XFx0fVxcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRzd2l0Y2ggKHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCkge1xcbiA0MzE6XFx0XFx0Y2FzZSBDTURfS0VZUFJFU1M6XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdHlsZC1cXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXTtcXG4gNDM0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRjYXNlIENNRF9TQ0FOQ09ERTpcXG4gNDM3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiZ2V0IHNjYW5jb2RlICV4XFxcXG5cXFwiLFxcbiA0Mzg6XFx0XFx0XFx0XFx0eWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXSk7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdFxcdHJlcG9ydF9rZXkoeWxkLCBtYXBfcDFrX3RvX2tleSh5bGQtXFx1MDAzZWlycV9kYXRhLVxcdTAwM2VkYXRhWzBdKSk7XFxuIDQ0MTpcXHRcXHRcXHRicmVhaztcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0ZGVmYXVsdDpcXG4gNDQ0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCByZXNwb25zZSAleFxcXFxuXFxcIixcXG4gNDQ1OlxcdFxcdFxcdFxcdHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pIHtcXG4gNDUxOlxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBFUk0pXFxuIDQ1MzpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gNDU0OlxcdFxcdFxcdFxcdFxcdFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG4gNDYwOlxcdHtcXG4gNDYxOlxcdFxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiA0NjI6XFx0XFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIDQ2NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gNDY2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbiA0Njc6XFx0XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIDQ3MjpcXHRcXHRjYXNlIENNRF9LRVlQUkVTUzpcXG4gNDczOlxcdFxcdGNhc2UgQ01EX1NDQU5DT0RFOlxcbiA0NzQ6XFx0XFx0XFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXFxuIDQ3NTpcXHRcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pXFxuIDQ3NjpcXHRcXHRcXHRcXHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXFx1MDAzZXVyYl9pcnEsIEdGUF9BVE9NSUMpO1xcbiA0Nzc6XFx0XFx0XFx0YnJlYWs7XFxuIDQ3ODpcXHRcXHRkZWZhdWx0OlxcbiA0Nzk6XFx0XFx0XFx0Lyogc2VuZCBuZXcgY29tbWFuZCAqL1xcbiA0ODA6XFx0XFx0XFx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XFxuIDQ4MTpcXHRcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pXFxuIDQ4MjpcXHRcXHRcXHRcXHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXFx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xcbiA0ODM6XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NDpcXHRcXHR9XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUEVSTSlcXG4gNDg3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXFxcblxcXCIsXFxuIDQ4ODpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgcmV0KTtcXG4gNDg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MTYuNTIwMzc1MjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA5MTkwOTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBJbnRlcnJ1cHQgSGFuZGxpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIFVTQiBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlIGRlYWwgd2l0aCBub24temVybyBVUkIgc3RhdHVzIGNvZGVzIGluIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgLiBJdCBzZWVtcyB0aGVyZSdzIGJlZW4gYSByZWNlbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiB0aGUgYHN0YXR1c2Agd2Fzbid0IHplcm8sIHdlJ2QgbG9nIGFuIGVycm9yIGFuZCB0aGVuIHByb2NlZWQgd2l0aCBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQuIE5vdywgdGhlcmUncyBhbiBhZGRlZCBjaGVjazogYGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKSByZXR1cm47YC5cblxuRXNzZW50aWFsbHksIGlmIHRoZSBzdGF0dXMgaW5kaWNhdGVzIGEgXCJmYXRhbCBlcnJvcixcIiB0aGUgZnVuY3Rpb24gcmV0dXJucyAqaW1tZWRpYXRlbHkqLiBUaGF0IG1lYW5zIG5vIG5ldyBVUkIgaXMgc3VibWl0dGVkLCBubyB0YXNrcyBhcmUgZXhlY3V0ZWQsIGFuZCBubyBkYXRhIGlzIHRvdWNoZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGVhcmx5IHJldHVybiB3YXMgaW50cm9kdWNlZC4gV2FzIGl0IGEgZml4IGZvciBhIHNwZWNpZmljIGlzc3VlLCBvciBhIGdlbmVyYWwgb3B0aW1pemF0aW9uP1xuXG5UaW1lIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byBnZXQgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gSSdtIGhvcGluZyB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkganVkZ21lbnQgYWJvdXQgd2hldGhlciB0aGlzIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLCBvciBpZiBpdCBtaWdodCBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBoYW5kbGluZyBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW50ZXJydXB0cyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MTkuNjEyMjg3NTE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5ZWFsaW5rX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTU2LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTU3OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB5ZWFsaW5rX2RyaXZlciA9IHtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OC1cXHQubmFtZVxcdFxcdD0gXFxcInllYWxpbmtcXFwiLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NjQtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NjU6bW9kdWxlX3VzYl9kcml2ZXIoeWVhbGlua19kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoxOS42NzkxODkyNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4NjMwODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFllYWxpbmsgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgYHllYWxpbmtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWdpc3RlcnMgaXRzZWxmIGFzIGEgc3RhbmRhcmQgVVNCIGRyaXZlciB1c2luZyBgbW9kdWxlX3VzYl9kcml2ZXIoeWVhbGlua19kcml2ZXIpYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB0byBwcm9iZSB0aGlzIGRyaXZlci4gSWYgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBSYXcgR2FkZ2V0IG9yIFVTQiBmdXp6aW5nLCB0aGF0IHdvdWxkIGJlIGEgZmFudGFzdGljIGF2ZW51ZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBiZWF1dHkgb2Ygc3l6a2FsbGVyIGlzIGl0cyBhYmlsaXR5IHRvIGNyZWF0ZSB0aGVzZSB2aXJ0dWFsIFVTQiBkZXZpY2VzIHdpdGhpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0ZXN0aW5nIFVTQiBkcml2ZXJzIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgVVNCIGRldmljZSBJRCB0YWJsZSBhbmQgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MjIuNDY1NTAxMTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHR9O1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RhYmxlIFtdID0ge1xcbiA3ODM6XFx0XFx0e1xcbiA3ODQ6XFx0XFx0XFx0Lm1hdGNoX2ZsYWdzXFx0XFx0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8XFxuIDc4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLFxcbiA3ODY6XFx0XFx0XFx0LmlkVmVuZG9yXFx0XFx0PSAweDY5OTMsXFxuIDc4NzpcXHRcXHRcXHQuaWRQcm9kdWN0XFx0XFx0PSAweGIwMDEsXFxuIDc4ODpcXHRcXHRcXHQuYkludGVyZmFjZUNsYXNzXFx0PSBVU0JfQ0xBU1NfSElELFxcbiA3ODk6XFx0XFx0XFx0LmJJbnRlcmZhY2VTdWJDbGFzc1xcdD0gMCxcXG4gNzkwOlxcdFxcdFxcdC5iSW50ZXJmYWNlUHJvdG9jb2xcXHQ9IDAsXFxuIDc5MTpcXHRcXHRcXHQuZHJpdmVyX2luZm9cXHRcXHQ9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2aW5mb19QMUtcXG4gNzkyOlxcdFxcdH0sXFxuIDc5MzpcXHRcXHR7IH1cXG4gNzk0OlxcdH07XFxuIDc5NTpcXHRcXG4gNzk2OlxcdHN0YXRpYyBpbnQgdXNiX2NsZWFudXAoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIGludCBlcnIpXFxuIDc5NzpcXHR7XFxuIDc5ODpcXHRcXHRpZiAoeWxkID09IE5VTEwpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoyMi40NjU2NDIyMTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY3MDUxMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNyaXRlcmlhIHByZWNpc2VseS4gXCJSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSxcIiByaWdodD8gVGhlIGNvZGUgaGFzIHRvIGJlICpleGVjdXRhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBObyBibGluZCB0cnVzdCBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zLCBhbmQgYW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgd2hlbiBkbyBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gT25seSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSAoZG9jcywgdXNlci1zcGFjZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBldGMuKSwgaW52b2x2ZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChsaWtlIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCksIG9yIGhhcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgYC5yZW1vdmVgIGZ1bmN0aW9ucyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnKS5cblxuT24gdGhlIGZsaXAgc2lkZSwgYFdvcnRoRnV6emluZz10cnVlYCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCB0aGlzIHNwZWNpZmljIHBhdGNoLCBJIHNlZSBpdCBpbnZvbHZlcyBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AsIGEgVVNCIGRyaXZlci4gRXhjZWxsZW50ISBJIGtub3cgdGhhdCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGFjdGl2ZWx5IGludGVyYWN0IHdpdGggVVNCIGRyaXZlcnMgdGhyb3VnaCByYXcgZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZW11bGF0aW9uLiBUaGUgY29kZSBzaG93cyBtZSB0aGlzIGlzIGZvciBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlLCBhIFllYWxpbmsgZGV2aWNlLCB3aXRoIGEgc3BlY2lmaWMgVklEL1BJRC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgaW5zaWRlIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGJhc2VkIG9uIHRoZSBzdGF0dXMgb2YgVVJCIGNvbXBsZXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKWAgYmVmb3JlIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHJlc3VibWl0dGluZyBVUkJzLiBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNydWNpYWwgYmVjYXVzZSBzeXprYWxsZXIncyBVU0IgZnV6emluZyBhY3RpdmVseSB0cmllcyB0byB0cmlnZ2VyIHRob3NlIGNvbXBsZXRpb24gZXJyb3JzIGJ5IHNlbmRpbmcgaW52YWxpZCBVU0IgcGFja2V0cywgZGlzY29ubmVjdHMsIGV0Yy4gU28gdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzdWJtaXNzaW9uIGxvZ2ljISBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5LiBUaGUgY29kZSBkZXBlbmRzIG9uIGBjb25maWcgSU5QVVRfWUVBTElOS2AsIGBVU0JfQVJDSF9IQVNfSENEYCwgYW5kIHNlbGVjdHMgYFVTQmAuIEknbGwgY29uZmlybSB0aGF0IHRoZSBlbmNsb3NpbmcgYG1lbnVjb25maWcgSU5QVVRfTUlTQ2Agb3IgYGlmIElOUFVUX01JU0NgIGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZW4gSSBjYW4gY29uZmlybSB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoyOC4xMzYxNTUyMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElucHV0IG1pc2MgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRtZW51Y29uZmlnIElOUFVUX01JU0NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1pc2NlbGxhbmVvdXMgZGV2aWNlc1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgU2F5IFkgaGVyZSwgYW5kIGEgbGlzdCBvZiBtaXNjZWxsYW5lb3VzIGlucHV0IGRyaXZlcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXFxuICAgOTpcXHRcXHQgIEV2ZXJ5dGhpbmcgdGhhdCBkaWRuJ3QgZml0IGludG8gdGhlIG90aGVyIGNhdGVnb3JpZXMgaXMgaGVyZS4gVGhpcyBvcHRpb25cXG4gIDEwOlxcdFxcdCAgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJTlBVVF9NSVNDXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTlBVVF84OFBNODYwWF9PTktFWVxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIjg4UE04NjB4IE9OS0VZIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1GRF84OFBNODYwWFxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBTdXBwb3J0IHRoZSBPTktFWSBvZiBNYXJ2ZWxsIDg4UE04NjB4IFBNSUNzIGFzIGFuIGlucHV0IGRldmljZVxcbiAgMjE6XFx0XFx0ICByZXBvcnRpbmcgcG93ZXIgYnV0dG9uIHN0YXR1cy5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAyNDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04NjB4X29ua2V5LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgSU5QVVRfODhQTTgwWF9PTktFWVxcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIjg4UE04MHggT05LRVkgc3VwcG9ydFxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gTUZEXzg4UE04MDBcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgU3VwcG9ydCB0aGUgT05LRVkgb2YgTWFydmVsbCA4OFBNODB4IFBNSUNzIGFzIGFuIGlucHV0IGRldmljZVxcbiAgMzE6XFx0XFx0ICByZXBvcnRpbmcgcG93ZXIgYnV0dG9uIHN0YXR1cy5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzNDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04MHhfb25rZXkuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBJTlBVVF84OFBNODg2X09OS0VZXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBNODg2IG9ua2V5IHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE1GRF84OFBNODg2X1BNSUNcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCB0aGUgb25rZXkgb2YgTWFydmVsbCA4OFBNODg2IFBNSUMgYXMgYW4gaW5wdXQgZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjI4LjEzNjI3MzQ4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzQ2MjAwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgaW5wdXQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgcmlnaHQ/IEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCBmaWxlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGF0KiBnZXRzIHB1bGxlZCBpbnRvIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9pbnB1dC9LY29uZmlnYC4gVGhpcyBzaG91bGQgc2hvdyBtZSB0aGUgaW5jbHVzaW9uIHBhdGgsIGhlbHBpbmcgbWUgc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaG93IHRoaXMgc3BlY2lmaWMgbWlzYyBkcml2ZXIgS2NvbmZpZyBmaWxlIGZpdHMgd2l0aGluIHRoZSB3aG9sZSBpbnB1dCBkcml2ZXIgY29uZmlndXJhdGlvbiBzY2hlbWUuIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozMS44ODI0NzYzMjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjcxMDI3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlzYy9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9LY29uZmlnPTE4Nz1zb3VyY2UgXFxcImRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2lucHV0L0tjb25maWctMTg4LVxcbmRyaXZlcnMvaW5wdXQvS2NvbmZpZzoxODk6c291cmNlIFxcXCJkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2lucHV0L0tjb25maWctMTkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozMy4zNDk1ODQxNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTUxODIyMDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBkcml2ZXJzL2lucHV0L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBpbnB1dCBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBjaGVjayBhcm91bmQgbGluZSAxODkgd2l0aGluIHRoYXQgZmlsZSwgYXMgdGhhdCdzIG9mdGVuIGEga2V5IGFyZWEgZm9yIGlucHV0IGRldmljZSBzZXR0aW5ncy4gSG93ZXZlciwgSSB3YW50IHRoZSBmdWxsIGNvbnRleHQuIFNvLCBiZWZvcmUgSSBkaWcgaW50byB0aGF0IHNwZWNpZmljIGxpbmUsIEknbGwgc3RhcnQgYXQgdGhlIHZlcnkgdG9wIG9mIGBkcml2ZXJzL2lucHV0L0tjb25maWdgIHRvIHJlLWVzdGFibGlzaCB0aGUgb3ZlcmFsbCBsYXlvdXQgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgZ2VuZXJhbGx5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnl0aGluZyBzcGVjaWZpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBsaW5lIGFuZCB0aGUgZ3JlYXRlciB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozOC44Njc4MDcyMDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJbnB1dCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIElOUFVUXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBpbnB1dCBsYXllciAobmVlZGVkIGZvciBrZXlib2FyZCwgbW91c2UsIC4uLilcXFwiIGlmIEVYUEVSVFxcbiAgMTA6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW55IGlucHV0IGRldmljZSAobW91c2UsIGtleWJvYXJkLCB0YWJsZXQsXFxuICAxMzpcXHRcXHQgIGpveXN0aWNrLCBzdGVlcmluZyB3aGVlbCAuLi4pIGNvbm5lY3RlZCB0byB5b3VyIHN5c3RlbSBhbmQgd2FudFxcbiAgMTQ6XFx0XFx0ICBpdCB0byBiZSBhdmFpbGFibGUgdG8gYXBwbGljYXRpb25zLiBUaGlzIGluY2x1ZGVzIHN0YW5kYXJkIFBTLzJcXG4gIDE1OlxcdFxcdCAga2V5Ym9hcmQgYW5kIG1vdXNlLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFNheSBOIGhlcmUgaWYgeW91IGhhdmUgYSBoZWFkbGVzcyAobm8gbW9uaXRvciwgbm8ga2V5Ym9hcmQpIHN5c3RlbS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTogXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC5yc3RcXHUwMDNlXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlucHV0LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRpZiBJTlBVVFxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgSU5QVVRfTEVEU1xcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIkV4cG9ydCBpbnB1dCBkZXZpY2UgTEVEcyBpbiBzeXNmc1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xcbiAgMzE6XFx0XFx0ZGVmYXVsdCBJTlBVVFxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGV4cG9ydCBMRURzIG9uIGlucHV0IGRldmljZXNcXG4gIDM0OlxcdFxcdCAgYXMgc3RhbmRhcmQgTEVEIGNsYXNzIGRldmljZXMgaW4gc3lzZnMuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MzguODY3OTMzODAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTgwMDc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWWVhbGluayBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFN5emthbGxlciBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBlbmFibGUgdGhlIFllYWxpbmsgVVNCIGRyaXZlciBhbmQgdGhlbiB0aGluayBhYm91dCB3aGF0IHRoYXQgbWVhbnMgZm9yIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgZHJpdmVyLCBgSU5QVVRfWUVBTElOS2AsIGRlcGVuZHMgb24gYFVTQl9BUkNIX0hBU19IQ0RgIGFuZCBzZWxlY3RzIGBVU0JgLiBBbmQgKlVTQiogcmVxdWlyZXMgKkNPTkZJR19VU0IqLiAgRm9yIGVtdWxhdGlvbiwgSSBtaWdodCBuZWVkIGVpdGhlciBgVVNCX1JBV19HQURHRVRgIG9yIGBVU0JfRFVNTVlfSENEYCwgYnV0IHRoYXQncyBzZXBhcmF0ZS4gVGhlICpjcml0aWNhbCogdGhpbmcgaXMgdGhhdCB0byBidWlsZCB0aGUgZHJpdmVyIGl0c2VsZiwgSSBuZWVkIGBDT05GSUdfSU5QVVRfWUVBTElOS2AsIHdoaWNoIGluIHR1cm4gcHVsbHMgaW4gYENPTkZJR19JTlBVVGAsIGBDT05GSUdfSU5QVVRfTUlTQ2AsIGFuZCBgQ09ORklHX1VTQmAuXG5cbkkgY29uZmlybWVkIHRoZXNlIGRlcGVuZGVuY2llcyBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIGBJTlBVVF9ZRUFMSU5LYCBzaXRzIHVuZGVyIHRoZSBgaWYgSU5QVVRfTUlTQ2AgYmxvY2ssIHdoaWNoIGl0c2VsZiBpcyBuZXN0ZWQgdW5kZXIgdGhlIGBpZiBJTlBVVGAgY29uZGl0aW9uLiBUaGF0IGdpdmVzIG1lIGEgY2xlYXIgZGVwZW5kZW5jeSBjaGFpbjogYElOUFVUX1lFQUxJTktgIGRlcGVuZHMgb24gYElOUFVUX01JU0NgIGFuZCBgSU5QVVRgLCBhbmQgdWx0aW1hdGVseSBVU0IuXG5cbkZvciBzeXprYWxsZXIsIHRoZSAqRW5hYmxlQ29uZmlncyogZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgSSd2ZSBpZGVudGlmaWVkLCBJJ2QgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGU6XG5cbi0gICBgSU5QVVRfWUVBTElOS2Bcbi0gICBgSU5QVVRfTUlTQ2Bcbi0gICBgSU5QVVRgXG4tICAgYFVTQmBcblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUgKkZvY3VzU3ltYm9scyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgdXJiX2lycV9jYWxsYmFja2AsIGB1cmJfY3RsX2NhbGxiYWNrYCwgYW5kIGBpc19mYXRhbF9lcnJvcmAuICBgaXNfZmF0YWxfZXJyb3JgIGlzIGxpa2VseSBpbmxpbmVkLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBhcyBjcml0aWNhbC4gQnV0IGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGFyZSBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIFRoZXkncmUgZnVuY3Rpb24gcG9pbnRlcnMgcGFzc2VkIHRvIGB1c2JfZmlsbF9pbnRfdXJiYCBhbmQgYHVzYl9maWxsX2NvbnRyb2xfdXJiYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGlzIGltcG9ydGFudDogdGhlc2UgY2FsbGJhY2tzIGFyZSAqaG93KiB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGVzZSBjYWxsYmFja3MgYXJlIHVzZWQgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyJ3MgbG9naWMgbGllcywgYW5kIGl0J3Mgd2hlcmUgYW55IHBvdGVudGlhbCBzeXprYWxsZXIgZnV6emluZyB0YXJnZXRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6NDMuNzg1OTQ0MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTUwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVyYl8oaXJxfGN0bClfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQwMz1zdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MTctXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MTg6c3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MTkte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NTgtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0NTk6c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NjAte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkxLVxcdFxcdFxcdFVTQl9QS1RfTEVOLFxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6ODkyOlxcdFxcdFxcdHVyYl9pcnFfY2FsbGJhY2ssXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04OTMtXFx0XFx0XFx0eWxkLCBlbmRwb2ludC1cXHUwMDNlYkludGVydmFsKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA3LVxcdFxcdFxcdCh2b2lkICopeWxkLVxcdTAwM2VjdGxfcmVxLCB5bGQtXFx1MDAzZWN0bF9kYXRhLCBVU0JfUEtUX0xFTixcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjkwODpcXHRcXHRcXHR1cmJfY3RsX2NhbGxiYWNrLCB5bGQpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA5LVxcdHlsZC1cXHUwMDNldXJiX2N0bC1cXHUwMDNldHJhbnNmZXJfZG1hXFx0PSB5bGQtXFx1MDAzZWN0bF9kbWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjQzLjg1NDQ5OTA0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQxNTYyNTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBZZWFsaW5rIFVTQiBQaG9uZSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZpY2F0aW9ucyB0byBpdHMgVVJCIGNvbXBsZXRpb24gY2FsbGJhY2tzLiBJJ20gZm9jdXNpbmcgb24gZW5zdXJpbmcgdGhlc2UgY2FsbGJhY2tzLCBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCwgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgZGlzY29ubmVjdHMgYW5kIGVycm9yIGluamVjdGlvbiwgd2hpY2ggY2FuIGJlIGVhc2lseSBzaW11bGF0ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMuICBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCBhcmUgZGVmaW5pdGVseSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBUaGV5IGNhbid0IGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgdGhlIFVSQiBjYWxsYmFja3MuICBgaXNfZmF0YWxfZXJyb3JgLCB3aGlsZSBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLCBpcyBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzIGluIGNhc2Ugb2YgY29tcGlsZXIgb3B0aW1pemF0aW9uIGlzc3VlcyAob3IgYWJzZW50IG9wdGltaXphdGlvbiBmbGFncy4pXG5cbkkgY29uc2lkZXJlZCBgdXNiX3Byb2JlYCBhbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBidXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IHViaXF1aXRvdXMgb3IgZ2VuZXJpYyBuYW1lcy4gYHVzYl9wcm9iZWAgaXMgc3RhdGljIHRvIGB5ZWFsaW5rLmNgLCBidXQgaXQncyB1c2VkIGVsc2V3aGVyZSB0b28sIHNvIHRoYXQgaXMgbm90IHRoZSByaWdodCBjaG9pY2UsIHBsdXMgdGhlIGZ1bmN0aW9ucyBvZiBmb2N1cyBhcmUgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrcy5cblxuVGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyLCBzdWNoIGFzIGB5ZWFsaW5rX2RvX2lkbGVfdGFza3NgIG9yIGB5ZWFsaW5rX2NtZGAsIGFyZSB1bnRvdWNoZWQsIHNvIHRoZXkgYXJlIG5vdCB3aGF0J3MgYmVpbmcgZnV6emVkIGhlcmUuIFRoZSBtb2RpZmljYXRpb24gaXMgY29udGFpbmVkIGluIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgdGhlIGFkZGVkIGBpc19mYXRhbF9lcnJvcmAuXG5cbkJhc2VkIG9uIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgZGlmZiwgdGhlIGZ1enppbmcgdGFyZ2V0IGlzIGNsZWFyOiBjaGVja2luZyBob3cgdGhlIGRyaXZlciByZWFjdHMgdG8gZmF0YWwgVVJCIHN0YXR1c2VzIGluIHRob3NlIGNhbGxiYWNrcyBpcyB3aGF0IG5lZWRzIHRoZSBhdHRlbnRpb24uICBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBjb25maXJtZWQgYXMgYHRydWVgLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBzb3VuZDsgdGhlIHRlc3RhYmlsaXR5IGlzIGdvb2QgYmVjYXVzZSBvZiBzeXprYWxsZXIgYW5kIFVTQiBlbXVsYXRpb24gc3VwcG9ydCwgc28gZnV6emluZyBpcyBhbiBlZmZpY2llbnQgdXNlIG9mIHJlc291cmNlcyBoZXJlLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBgSU5QVVRfWUVBTElOS2AsIGBJTlBVVF9NSVNDYCwgYElOUFVUYCwgYW5kIGBVU0JgLlxuXG5TbywgdGhlIGZ1enppbmcgc2V0dXAgd2lsbCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgSU5QVVRfWUVBTElOS2AsIGBJTlBVVF9NSVNDYCwgYElOUFVUYCwgYFVTQmBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyAoYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2ApIGluIHRoZSBZZWFsaW5rIFVTQiBwaG9uZSBkcml2ZXIgKGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCkgdG8gY2hlY2sgZm9yIGZhdGFsIFVSQiBzdGF0dXNlcyAoLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgLUVJTFNFUSkgYW5kIGFib3J0IGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmRzIG9yIHJlc3VibWl0dGluZyBVUkJzLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbiAoZS5nLiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgVVJCIHRlcm1pbmF0aW9uIGFuZCBzdGF0ZSBoYW5kbGluZyBiZWhhdmUgY29ycmVjdGx5IHVuZGVyIHZhcmlvdXMgZXJyb3IgaW5qZWN0aW9uIGFuZCBkZXZpY2UgZGlzY29ubmVjdCBzY2VuYXJpb3MuXG5cbkV2ZXJ5dGhpbmcgaXMgZ29vZCwgYW5kIGl0IGlzIHJlYWR5IHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjE2LjI3MDEyODg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgxMjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5QVVRfWUVBTElOS1wiLFxuICAgIFwiSU5QVVRfTUlTQ1wiLFxuICAgIFwiSU5QVVRcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVyYl9pcnFfY2FsbGJhY2tcIixcbiAgICBcInVyYl9jdGxfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJ3MgVVNCIGRldmljZSBlbXVsYXRpb24gKFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IFVSQiBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nIGFuZCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMgdW5kZXIgc2ltdWxhdGVkIFVTQiBjb21tdW5pY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOUFVUX1lFQUxJTktcIixcbiAgICBcIklOUFVUX01JU0NcIixcbiAgICBcIklOUFVUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cmJfaXJxX2NhbGxiYWNrXCIsXG4gICAgXCJ1cmJfY3RsX2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTU6MTYuNDI3OTUwMzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc3MTQ3MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTU6MTYuNDI4NDYxNjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NjE3NjYyOTY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfZmF0YWxfZXJyb3IoKWAgY2hlY2sgaW4gYHVyYl9pcnFfY2FsbGJhY2soKWAgYW5kIGB1cmJfY3RsX2NhbGxiYWNrKClgIHdpdGhpbiB0aGUgWWVhbGluayBVU0IgVm9JUCBkcml2ZXIgKGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCkuIFdoZW4gYW4gVVJCIGNvbXBsZXRlcyB3aXRoIGEgZmF0YWwgZXJyb3Igc3RhdHVzIChzdWNoIGFzIC1FTk9FTlQsIC1FQ09OTlJFU0VULCAtRVNIVVRET1dOLCAtRVBST1RPLCAtRVBJUEUsIG9yIC1FSUxTRVEsIHR5cGljYWxseSBvY2N1cnJpbmcgb24gZGV2aWNlIGRpc2Nvbm5lY3Qgb3IgVVJCIHVubGlua2luZyksIHRoZSBjYWxsYmFjayBub3cgcmV0dXJucyBlYXJseSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgdG8gcHJvY2VzcyB0cmFuc2ZlciBkYXRhIGFuZCByZXN1Ym1pdCB0aGUgVVJCLlxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xuaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbkBAIC00MDAsMTQgKzQwMCwzMiBAQCBzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbiAgKiBlcnJvcixzdGFydFxuICAqXG4gICovXG4rc3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSAtRU5PRU5UOlxuK1x0Y2FzZSAtRUNPTk5SRVNFVDpcbitcdGNhc2UgLUVTSFVURE9XTjpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVQSVBFOlxuK1x0Y2FzZSAtRUlMU0VROlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG4tXHRpZiAoc3RhdHVzKVxuK1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCIlcyAtIHVyYiBzdGF0dXMgJWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbitcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0c3dpdGNoICh5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKSB7XG4gXHRjYXNlIENNRF9LRVlQUkVTUzpcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbitcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiJXMgLSB1cmIgc3RhdHVzICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4rXHRcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNToxNi40Mjg0NjMyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODk0MzE2NTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFllYWxpbmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCBmb3IgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBSaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0aGVtc2VsdmVzIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGFsdGVyZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGNoYW5nZS4gXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBhcm91bmQgbGluZSA0MDAgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCdzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhpcyBwYXRjaCwgb3IgYXQgbGVhc3QgYSByZWdpb24gc2lnbmlmaWNhbnRseSBpbXBhY3RlZCBieSBpdC4gQnkgdW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGRyaXZlciBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjU1LjM3MTYzMjA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0ICpcXG4gMzkxOlxcdCAqIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGRpYWdyYW0gaXMgc29tZXRoaGluZyBsaWtlOlxcbiAzOTI6XFx0ICpcXG4gMzkzOlxcdCAqICAgICAgICAgIHN5bmNTdGF0ZVxcdTAwM2MtLStcXG4gMzk0OlxcdCAqICAgICAgICAgICAgICAgfCAgICAgIHxcXG4gMzk1OlxcdCAqICAgICAgICAgICAgICAgfCAgICBpZGxlXFxuIDM5NjpcXHQgKiAgICAgICAgICAgICAgXFxcXHwvICAgICB8XFxuIDM5NzpcXHQgKiBpbml0IC0tb2stLVxcdTAwM2Ugd2FpdEZvcktleSAtLW9rLS1cXHUwMDNlIGdldEtleVxcbiAzOTg6XFx0ICogIF4gICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIHxcXG4gMzk5OlxcdCAqICB8ICAgICAgICAgICAgICAgKy0tLS0tLS1vay0tLS0tLS0rXFxuIDQwMDpcXHQgKiBlcnJvcixzdGFydFxcbiA0MDE6XFx0ICpcXG4gNDAyOlxcdCAqL1xcbiA0MDM6XFx0c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN3aXRjaCAoc3RhdHVzKSB7XFxuIDQwNjpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDQwNzpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiA0MDg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiA0MDk6XFx0XFx0Y2FzZSAtRVBST1RPOlxcbiA0MTA6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDQxMTpcXHRcXHRjYXNlIC1FSUxTRVE6XFxuIDQxMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDEzOlxcdFxcdGRlZmF1bHQ6XFxuIDQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxNTpcXHRcXHR9XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDQyMTpcXHRcXHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKHN0YXR1cykge1xcbiA0MjQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVyYiBzdGF0dXMgJWRcXFxcblxcXCIsXFxuIDQyNTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG4gNDI2OlxcdFxcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbiA0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0Mjg6XFx0XFx0fVxcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRzd2l0Y2ggKHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCkge1xcbiA0MzE6XFx0XFx0Y2FzZSBDTURfS0VZUFJFU1M6XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdHlsZC1cXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXTtcXG4gNDM0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRjYXNlIENNRF9TQ0FOQ09ERTpcXG4gNDM3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiZ2V0IHNjYW5jb2RlICV4XFxcXG5cXFwiLFxcbiA0Mzg6XFx0XFx0XFx0XFx0eWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXSk7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdFxcdHJlcG9ydF9rZXkoeWxkLCBtYXBfcDFrX3RvX2tleSh5bGQtXFx1MDAzZWlycV9kYXRhLVxcdTAwM2VkYXRhWzBdKSk7XFxuIDQ0MTpcXHRcXHRcXHRicmVhaztcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0ZGVmYXVsdDpcXG4gNDQ0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCByZXNwb25zZSAleFxcXFxuXFxcIixcXG4gNDQ1OlxcdFxcdFxcdFxcdHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pIHtcXG4gNDUxOlxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBFUk0pXFxuIDQ1MzpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gNDU0OlxcdFxcdFxcdFxcdFxcdFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG4gNDYwOlxcdHtcXG4gNDYxOlxcdFxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiA0NjI6XFx0XFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIDQ2NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gNDY2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbiA0Njc6XFx0XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIDQ3MjpcXHRcXHRjYXNlIENNRF9LRVlQUkVTUzpcXG4gNDczOlxcdFxcdGNhc2UgQ01EX1NDQU5DT0RFOlxcbiA0NzQ6XFx0XFx0XFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjU1LjM3MTc5OTcyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI5OTM1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB1cmJfY3RsX2NhbGxiYWNrYCBDb250ZXh0KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkaWcgaW50byB0aGUgYHVyYl9jdGxfY2FsbGJhY2tgIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AgY29udGV4dC4gV2UncmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBhIFVTQiBDb250cm9sIFRyYW5zZmVyLCBvciBsaWtlbHkgYSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjYWxsYmFjayBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZW5kcG9pbnQsIGEgcGFydGljdWxhciBVU0IgY29tbWFuZCwgb3Igc29tZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gS25vd2luZyB0aGUgZGV2aWNlIChZZWFsaW5rKSBhbmQgdGhlIFwibWlzY1wiIGNhdGVnb3JpemF0aW9uIHN1Z2dlc3RzIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgbm9uLXN0YW5kYXJkLCBwZXJoYXBzIHZlbmRvci1zcGVjaWZpYywgY29udHJvbCBtZXNzYWdlcyBmb3IgYSBkZXZpY2UgbGlrZSBhIHBob25lLCBvciBwb3RlbnRpYWxseSBzcGVjaWFsaXplZCBwZXJpcGhlcmFsIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZSBjYWxsYmFjayBpbnRlcmFjdHMgd2l0aC4gV2hhdCdzIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjaywgYW5kIGhvdyBpcyBpdCB1c2VkPyBJJ20gbG9va2luZyBmb3IgcG9pbnRlcnMgdG8gZGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZXMsIHBlcmhhcHMgc29tZSBraW5kIG9mIHN0YXRlIG1hY2hpbmUgdmFyaWFibGVzLCBvciBwb3NzaWJseSBldmVudCBxdWV1ZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGJlY2F1c2UgYSBmYWlsZWQgVVJCIGNhbGxiYWNrIGNhbiBoYXZlIHNldmVyZSBpbXBsaWNhdGlvbnMgZm9yIGRldmljZSBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsbHkgbG9jay11cCB0aGUgZGV2aWNlLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBkYXRhIGludGVycHJldGF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgY2xvc2VseSwgYXMgdGhlc2UgYXJlIG9mdGVuIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBhbmQgbG9naWMgZXJyb3JzIGFyZSBpbnRyb2R1Y2VkLlxuXG5NeSBnb2FsIGlzIHRvIHRob3JvdWdobHkgY29tcHJlaGVuZCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgYHVyYl9jdGxfY2FsbGJhY2tgIGlzIGludGVncmF0ZWQgaW50byB0aGUgWWVhbGluayBkZXZpY2UncyBmdW5jdGlvbmFsaXR5LCBzbyBJIGNhbiBwcm92aWRlIG15IGluc2lnaHRzIHRvIHRoZSBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNTo1OC4yMDE3MzkzMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcbiA0NzE6XFx0XFx0c3dpdGNoICh5bGQtXFx1MDAzZWN0bF9kYXRhLVxcdTAwM2VjbWQpIHtcXG4gNDcyOlxcdFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcbiA0NzM6XFx0XFx0Y2FzZSBDTURfU0NBTkNPREU6XFxuIDQ3NDpcXHRcXHRcXHQvKiBhc2sgZm9yIGEgcmVzcG9uc2UgKi9cXG4gNDc1OlxcdFxcdFxcdGlmICgheWxkLVxcdTAwM2VzaHV0ZG93bilcXG4gNDc2OlxcdFxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2lycSwgR0ZQX0FUT01JQyk7XFxuIDQ3NzpcXHRcXHRcXHRicmVhaztcXG4gNDc4OlxcdFxcdGRlZmF1bHQ6XFxuIDQ3OTpcXHRcXHRcXHQvKiBzZW5kIG5ldyBjb21tYW5kICovXFxuIDQ4MDpcXHRcXHRcXHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcXG4gNDgxOlxcdFxcdFxcdGlmICgheWxkLVxcdTAwM2VzaHV0ZG93bilcXG4gNDgyOlxcdFxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ4MzpcXHRcXHRcXHRicmVhaztcXG4gNDg0OlxcdFxcdH1cXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVQRVJNKVxcbiA0ODc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDg4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA0OTI6XFx0ICogaW5wdXQgZXZlbnQgaW50ZXJmYWNlXFxuIDQ5MzpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiA0OTQ6XFx0XFxuIDQ5NTpcXHQvKiBUT0RPIHNob3VsZCB3ZSBpc3N1ZSBhIHJpbmd0b25lIG9uIGEgU05EX0JFTEwgZXZlbnQ/XFxuIDQ5NjpcXHRzdGF0aWMgaW50IGlucHV0X2V2KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsXFxuIDQ5NzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKVxcbiA0OTg6XFx0e1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHRpZiAodHlwZSAhPSBFVl9TTkQpXFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0c3dpdGNoIChjb2RlKSB7XFxuIDUwNDpcXHRcXHRjYXNlIFNORF9CRUxMOlxcbiA1MDU6XFx0XFx0Y2FzZSBTTkRfVE9ORTpcXG4gNTA2OlxcdFxcdFxcdGJyZWFrO1xcbiA1MDc6XFx0XFx0ZGVmYXVsdDpcXG4gNTA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNTo1OC4yMDE4NzI5MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODIwNjkzNjc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgWWVhbGluayBVU0IgZHJpdmVyIHJlbGF0ZWQgdG8gVVJCIChVU0IgUmVxdWVzdCBCbG9jaykgaGFuZGxpbmcuIFByZXZpb3VzbHksIGV2ZW4gaWYgYSBVUkIgcmV0dXJuZWQgYSBub24temVybyBzdGF0dXMgY29kZSwgaW5kaWNhdGluZyBhbiBlcnJvciBsaWtlIGEgZGlzY29ubmVjdCBvciBmYXRhbCBlcnJvciwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGtlcHQgY2h1Z2dpbmcgYWxvbmcuIFRoZSBjb2RlIHdvdWxkIGJsaXRoZWx5IGNvbnRpbnVlIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgKGxpa2UgYGlycV9kYXRhYCksIHBvdGVudGlhbGx5IHJlLXN1Ym1pdHRpbmcgdGhlIFVSQiB3aXRoIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB3YXMgY2hlY2tpbmcgYHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWRgIG9yIGB5bGQtXHUwMDNlY3RsX2RhdGEtXHUwMDNlY21kYCBhbmQgY2FsbGluZyBgeWVhbGlua19kb19pZGxlX3Rhc2tzYCByZWdhcmRsZXNzIG9mIHRoZSBlcnJvci4gVGhpcyBpcyBhIHJlZCBmbGFnLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBpc19mYXRhbF9lcnJvcihzdGF0dXMpYC4gTm93LCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLCB0aGUgY2FsbGJhY2sgKmltbWVkaWF0ZWx5KiByZXR1cm5zLiBObyBmdXJ0aGVyIHByb2Nlc3NpbmcsIG5vIHJlc3VibWlzc2lvbiwgcGVyaW9kLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBwcmV2ZW50IHRoZSBpc3N1ZXMgSSd2ZSBvZnRlbiBzZWVuIGluIG90aGVyIHNpbWlsYXIgZHJpdmVycy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBTbyBJJ20gcnVubmluZyBkb3duIHRoZSBsaXN0LlxuXG4qICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIHRoYXQncyBnb29kLlxuKiAgIFRoZSBsb2dpYyBpdHNlbGYgcmVsaWVzIG9uIGB1cmItXHUwMDNlc3RhdHVzYCwgd2hpY2ggaXMgc2V0IGJ5IHRoZSBVU0IgY29yZS4gVGhlbiBpdCB1c2VzIHRoZSByZXN1bHQgaW4gYGlzX2ZhdGFsX2Vycm9yKClgLiBTZWVtcyBzYWZlLCBhcyBJIHJlY2FsbCBob3cgdGhlIFVTQiBjb3JlIHdvcmtzLlxuKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHBhdGNoIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuXG4qICAgVGhpcyBhbHNvIHByZXZlbnRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFjdHVhbGx5LCBieSByZXR1cm5pbmcgZWFybHksIHRoZSBwYXRjaCAqcHJldmVudHMqIHJlYWRpbmcgZnJvbSB0aGUgYnVmZmVyIHdoZW4gaXQgbWlnaHQgY29udGFpbiBzdGFsZSwgaW52YWxpZCwgb3IgZXZlbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyBhIGdvb2QgdGhpbmchXG5cblVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGRlZmVuc2l2ZSBwYXRjaCwgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZS4gSXQgaXMgbGlrZWx5IGRlc2lnbmVkIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIGdldHRpbmcgaW50byBhbiBpbmZpbml0ZSBsb29wIG9mIFVSQiByZXN1Ym1pc3Npb24gb3IgcmVhZGluZyBmcm9tIGludmFsaWQgbWVtb3J5IGFmdGVyIGEgZGV2aWNlIGRpc2Nvbm5lY3Qgb3Igc2VyaW91cyBVU0IgZXJyb3IuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBhIGNsYXNzaWMgcHJvYmxlbSBJJ3ZlIHNlZW4gaW4gdGhlIHBhc3QgLSBpbmZpbml0ZSBsb29wIG9mIHVyYiBzdWJtaXNzaW9uIG9uIGRpc2Nvbm5lY3QsIG9yIHVzZS1hZnRlci1mcmVlLCBvciBgV0FSTl9PTmAgaW4gdGhlIFVTQiBjb3JlIHdoZW4gcmVzdWJtaXR0aW5nIGEgZGVhZCBVUkIuIFNvIEknbGwgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5LCBhbmQgdGhlIHN1cnJvdW5kaW5nIFVTQiBkcml2ZXIgY29kZSBmb3IgdGhlc2UgZXJyb3IgcGF0dGVybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjowNi40MDg4MTI5NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY4NjQ3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfZmF0YWxfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0zMDc9c3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQwMi0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQwMzpzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDA0LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NDE4PXN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjUtXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MjY6XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz00NTk9c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Ni1cXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ2NzpcXHRcXHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2OC1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE2OjA3Ljk1NTY4MjExN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTI0NDk1NzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgWWVhbGluayBEcml2ZXIgQ29kZSAtIERpdmluZyBpbnRvIEdpdCBMb2cqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBZZWFsaW5rIGRyaXZlcidzIHN0cnVjdHVyZSBhbmQgYW55IGNvbW1vbiBjb2RpbmcgcGF0dGVybnMgd2l0aGluIHRoaXMgZHJpdmVyIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgbGlrZSBpdC4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGluaXRpYWxseSBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIG9mIGB5ZWFsaW5rLmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBsb2cgd2lsbCBpbGx1bWluYXRlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvZGUsIGtleSBjb21taXRzLCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjZXJ0YWluIGRlc2lnbiBjaG9pY2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcmVjdXJyaW5nIGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBhZGRyZXNzZWQgb3ZlciB0aW1lLiBFeGFtaW5pbmcgdGhlIGNvbW1pdHMgcmVsYXRlZCB0byBvdGhlciBkcml2ZXJzIGluIHRoaXMgYXJlYSwgdG9vLCB3b3VsZCBiZSBoZWxwZnVsLiBDb21wYXJpbmcgdGhlIGFwcHJvYWNoZXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBiZXN0IHByYWN0aWNlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgb3duIHdvcmsgb24gc2ltaWxhciBkcml2ZXJzLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaWRlYSBvZiBob3cgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjozMy4yMDA2NDI5NjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYzMzQ2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLUVOT0VOVC4qLUVDT05OUkVTRVQuKi1FU0hVVERPV05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0yOTg9c3RhdGljIHZvaWQgdWFzX3N0YXRfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYy0zMTItXFx0aWYgKHN0YXR1cykge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmM6MzEzOlxcdFxcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcXHUwMDI2XFx1MDAyNiBzdGF0dXMgIT0gLUVDT05OUkVTRVQgXFx1MDAyNlxcdTAwMjYgc3RhdHVzICE9IC1FU0hVVERPV04pXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYy0zMTQtXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dXJiLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInN0YXQgdXJiOiBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jPTM5OD1zdGF0aWMgdm9pZCB1YXNfZGF0YV9jbXBsdChzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jLTQyNi1cXHRpZiAoc3RhdHVzKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzo0Mjc6XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PRU5UIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSAtRUNPTk5SRVNFVCBcXHUwMDI2XFx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jLTQyOC1cXHRcXHRcXHR1YXNfbG9nX2NtZF9zdGF0ZShjbW5kLCBcXFwiZGF0YSBjbXBsdCBlcnJcXFwiLCBzdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjozNC4zNTY5ODMwNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODI0ODA4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVUkIgQ29tcGxldGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBVU0IgZHJpdmVyIGJlaGF2aW9yIGFyb3VuZCBVUkIgY29tcGxldGlvbiBzdGF0dXNlcyBsaWtlIGAtRU5PRU5UYCwgYC1FQ09OTlJFU0VUYCwgYW5kIGAtRVNIVVRET1dOYCB3aGVuIGFuIFVSQiBpcyB1bmxpbmtlZCBvciB0aGUgZGV2aWNlIGdldHMgZGlzY29ubmVjdGVkLiBXZSBhbGwga25vdyB0aGF0IHJlc3VibWl0dGluZyBpbiB0aGVzZSBzY2VuYXJpb3MgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIOKAkyByZXN1Ym1pc3Npb24gbG9vcHMgb3IgVUFGcy4gU28sIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGlmIEknbSB1bmRlcnN0YW5kaW5nIGNvcnJlY3RseSwgaXMgYSBjaGVjayB3aXRoaW4gdGhlIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGZ1bmN0aW9uczogYGlzX2ZhdGFsX2Vycm9yKHN0YXR1cylgLiBUaGlzIGlzIG1lYW50IHRvIHByZXZlbnQgZnVydGhlciBhY3Rpb24gb24gYW4gVVJCLCBvciBhdHRlbXB0aW5nIHRvIHJlc3VibWl0IGl0LCBpZiBhIGNyaXRpY2FsIFVTQiBlcnJvciwgbGlrZSBhIGRldmljZSBkaXNjb25uZWN0LCBoYXMgaGFwcGVuZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHNwZWNpZmljYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgRG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIGJ1ZmZlcnMgdW5pbml0aWFsaXplZD8gTm8uIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG4qICAgRG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUuXG4qICAgSXMgaXQgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vIGFnYWluLlxuKiAgIERvZXMgaXQgYWZmZWN0IGJvdW5kcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBTdGlsbCBuby5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgb3VyIHdvcmsgYW5kIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZy4gS0FTQU4gaGFuZGxlcyBtZW1vcnkgY29ycnVwdGlvbiwgVUFGcywgYW5kIG91dC1vZi1ib3VuZHMsIHdoaWxlIEtNU0FOIHdvdWxkIGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBqdXN0IGFkZHJlc3NlcyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLCBwcmV2ZW50aW5nIHByb2JsZW1zIGxpa2UgaW5maW5pdGUgcmVzdWJtaXNzaW9ucyBvciBVQUYgd2FybmluZ3MuIFRoZXJlIGlzIHplcm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiwgcmVhZCBvciBsZWFrIHRvIHVzZXJzcGFjZSBhbmQgd2UgYXJlIHNvbGVseSBtYW5hZ2luZyB0aGUgVVJCIGNvbXBsZXRpb24gcHJvY2VzcyBkdXJpbmcgYSBmYWlsdXJlIHRvIHByZXZlbnQgdW5pbnRlbmRlZCBjb2RlIGV4ZWN1dGlvbiBpbiBhIGZhaWx1cmUgY29uZGl0aW9uLiBUaGVyZWZvcmUsIEtNU0FOIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkuIFN0YW5kYXJkIEtBU0FOL3N5emthbGxlciB0ZXN0aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB2ZXJpZmljYXRpb24uXG5cbk9rYXksIEknbSBjb25maWRlbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyMiwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTY6NDIuNjA1MDY4MDkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBjb250cm9sIGZsb3cgb24gVVNCIGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgaW5maW5pdGUgVVJCIHJlc3VibWlzc2lvbnMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB1cG9uIGRldmljZSB0ZWFyZG93bi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkpgtf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 09:12:00 +0000 UTC FinishedAt: 2026-09-14 09:16:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INPUT_YEALINK", "INPUT_MISC", "INPUT", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INPUT_YEALINK", "INPUT_MISC", "INPUT", "USB" ], "series_id": "1385bfd3-01fc-4610-9501-d44b5b27e43d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "urb_irq_callback", "urb_ctl_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lOUFVUX1lFQUxJTksmIzM0OywKICAgICYjMzQ7SU5QVVRfTUlTQyYjMzQ7LAogICAgJiMzNDtJTlBVVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cmJfaXJxX2NhbGxiYWNrJiMzNDssCiAgICAmIzM0O3VyYl9jdGxfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlciYjMzk7cyBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoUmF3IEdhZGdldCAvIGR1bW15X2hjZCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgVVJCIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcgYW5kIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucyB1bmRlciBzaW11bGF0ZWQgVVNCIGNvbW11bmljYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXG5AQCAtNDAwLDE0ICYjNDM7NDAwLDMyIEBAIHN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKVxuICAqIGVycm9yLHN0YXJ0XG4gICpcbiAgKi9cbiYjNDM7c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSAtRU5PRU5UOlxuJiM0MztcdGNhc2UgLUVDT05OUkVTRVQ6XG4mIzQzO1x0Y2FzZSAtRVNIVVRET1dOOlxuJiM0MztcdGNhc2UgLUVQUk9UTzpcbiYjNDM7XHRjYXNlIC1FUElQRTpcbiYjNDM7XHRjYXNlIC1FSUxTRVE6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4gXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuIFx0aW50IHJldCwgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiBcbi1cdGlmIChzdGF0dXMpXG4mIzQzO1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuJiM0MztcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiBcdGNhc2UgQ01EX0tFWVBSRVNTOlxuQEAgLTQ0Myw5ICYjNDM7NDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbiYjNDM7XHRpZiAoc3RhdHVzKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4mIzQzO1x0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NTE1MWYzZDg5NWRmZWNlNGIwYzdjODcyNDY2OTY0MGEyYTFlNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOToxNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwpAQCAtNDAwLDE0ICYjNDM7NDAwLDMyIEBAIHN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKQogICogZXJyb3Isc3RhcnQKICAqCiAgKi8KJiM0MztzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0dXMpIHsKJiM0MzsJY2FzZSAtRU5PRU5UOgomIzQzOwljYXNlIC1FQ09OTlJFU0VUOgomIzQzOwljYXNlIC1FU0hVVERPV046CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRVBJUEU6CiYjNDM7CWNhc2UgLUVJTFNFUToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItJmd0O2NvbnRleHQ7CiAJaW50IHJldCwgc3RhdHVzID0gdXJiLSZndDtzdGF0dXM7CiAKLQlpZiAoc3RhdHVzKQomIzQzOwlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFtcDt5bGQtJmd0O2ludGYtJmd0O2RldiwgJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiYjNDM7CQlpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KIAogCXN3aXRjaCAoeWxkLSZndDtpcnFfZGF0YS0mZ3Q7Y21kKSB7CiAJY2FzZSBDTURfS0VZUFJFU1M6CkBAIC00NDMsOSAmIzQzOzQ2MSwxMiBAQCBzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi0mZ3Q7Y29udGV4dDsKIAlpbnQgcmV0ID0gMCwgc3RhdHVzID0gdXJiLSZndDtzdGF0dXM7CiAKLQlpZiAoc3RhdHVzKQomIzQzOwlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFtcDt5bGQtJmd0O2ludGYtJmd0O2RldiwgJiMzNDslcyAtIHVyYiBzdGF0dXMgJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiYjNDM7CQlpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KIAogCXN3aXRjaCAoeWxkLSZndDtjdGxfZGF0YS0mZ3Q7Y21kKSB7CiAJY2FzZSBDTURfS0VZUFJFU1M6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgWWVhbGluayBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsIHRoYXQgSSBuZWVkIHRvIGV2YWx1YXRlLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gRmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gQWxyaWdodCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKWAsIHdhcyBhZGRlZCwgYW5kIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRvIGB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilgIGFuZCBgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpYC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIEkmIzM5O2xsIHB1bGwgdGhhdCB1cCB3aXRoIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgY29kZS4KCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhpcyBvbmUuLi4gaXQmIzM5O3MgdGhlIFllYWxpbmsgVm9JUCBVU0IgcGhvbmUgZHJpdmVyLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgZWFzaWx5IGNhbiBJIHRlc3QgdGhpcz8gQ2FuIEkgZXZlbiBlbXVsYXRlIHRoaXMgaW4gYSBzdGFuZGFyZCBzZXR1cCBsaWtlIFFFTVUgb3IgU3l6a2FsbGVyPyBIbW0sIFN5emthbGxlciwgeWVzLCBpdCBkZWZpbml0ZWx5IGhhcyBVU0IgZW11bGF0aW9uLiBJIGNhbiBwcm9iYWJseSBnZXQgdGhpcyBkb25lIHVzaW5nIFJhdyBHYWRnZXQgb3IgdGhlIER1bW15IEhDRCwgb3IgcGVyaGFwcyBVU0IgZnV6emluZyB0aHJvdWdoIHN5el91c2JfY29ubmVjdC4uLiBCdXQgY2FuIHRoZSBgeWVhbGlua2AgVVNCIGRyaXZlciBldmVuIGJlIHByb2JlZCB2aWEgdGhlIFVTQiBlbXVsYXRpb24gaW4gU3l6a2FsbGVyPwoKUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhlIHRlc3RpbmcgcmFiYml0IGhvbGUsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBUaGF0IHdpbGwgYXQgbGVhc3QgdGVsbCBtZSB3aGF0IGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBldmVuIGNvbXBpbGUgYW5kIHJ1bi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5ZWFsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnPTQ3Mj1jb25maWcgSU5QVVRfWUVBTElOS1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4MS1cdCAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnMsIHNlZVxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDgyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZGV2aWNlcy95ZWFsaW5rLnJzdFx1MDAzZS5cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4My1cbmRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnLTQ4NC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZzo0ODU6XHQgIGNhbGxlZCB5ZWFsaW5rLlxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg2LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZT05NT1vYmotJChDT05GSUdfSU5QVVRfWEVOX0tCRERFVl9GUk9OVEVORClcdCYjNDM7PSB4ZW4ta2JkZnJvbnQub1xuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlOjk2Om9iai0kKENPTkZJR19JTlBVVF9ZRUFMSU5LKVx0XHQmIzQzOz0geWVhbGluay5vXG5kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUtOTctb2JqLSQoQ09ORklHX0lOUFVUX0lERUFQQURfU0xJREVCQVIpXHQmIzQzOz0gaWRlYXBhZF9zbGlkZWJhci5vXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMtMTQtICpcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jOjE1OiAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSB5ZWFsaW5rLmMgZHJpdmVyXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xNi0gKlxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMtMTctICogVGhhbmtzIHRvOlxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmM6MTg6ICogICAtIEF1dGhvcnMgb2YgeWVhbGluay5jXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xOS0gKiAgIC0gVGhvbWFzIFJlaXRtYXlyXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yLS8qXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQtICpcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMzLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzozNDojaW5jbHVkZSBcJiMzNDt5ZWFsaW5rLmhcJiMzNDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMzUtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9zZWdtZW50X21hcCB7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03Mi19IGxjZE1hcFtdID0ge1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzojaW5jbHVkZSBcJiMzNDt5ZWFsaW5rLmhcJiMzNDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzQtfTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzUtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjc2OnN0cnVjdCB5ZWFsaW5rX2RldiB7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc3LVx0c3RydWN0IGlucHV0X2RldiAqaWRldjtcdFx0LyogaW5wdXQgZGV2aWNlICovXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0xMTY9c3RhdGljIFNFRzdfREVGQVVMVF9NQVAobWFwX3NlZzcpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMTIxLSAgKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MTIyOnN0YXRpYyBpbnQgc2V0Q2hhcihzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVsLCBpbnQgY2hyKVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0xMjMte1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9MTgzPXN0YXRpYyBpbnQgbWFwX3Axa190b19rZXkoaW50IHNjYW5jb2RlKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE0LSAqL1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyMTU6c3RhdGljIHZvaWQgcmVwb3J0X2tleShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGtleSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE2LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTIzOS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MjQwOnN0YXRpYyBpbnQgeWVhbGlua19jbWQoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIHN0cnVjdCB5bGRfY3RsX3BhY2tldCAqcClcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjQxLXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTI1OD1zdGF0aWMgdTggZGVmYXVsdF9yaW5ndG9uZVtdID0ge1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjcxLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyNzI6c3RhdGljIGludCB5ZWFsaW5rX3NldF9yaW5ndG9uZShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI3My17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODQtXHR5bGQtXHUwMDNlY3RsX2RhdGEtXHUwMDNlZGF0YVswXVx0PSBidWZbMF07XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjI4NTpcdHllYWxpbmtfY21kKHlsZCwgcCk7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI4Ni1cbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI5OC1cdFx0bWVtY3B5KHAtXHUwMDNlZGF0YSwgXHUwMDI2YnVmW2l4XSwgbGVuKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Mjk5Olx0XHR5ZWFsaW5rX2NtZCh5bGQsIHApO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0zMDAtXHRcdGl4ICYjNDM7PSBsZW47XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0zMDYtICovXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjMwNzpzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMzA4LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDE5LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDIwOlx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDIxLVx0aW50IHJldCwgc3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0Ny1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDQ4Olx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0OS1cbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQ1OT1zdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDYxOlx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYyLVx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NzktXHRcdC8qIHNlbmQgbmV3IGNvbW1hbmQgKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDgwOlx0XHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDgxLVx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTUxNT1zdGF0aWMgaW50IGlucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01MTYte1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1MTc6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUxOC1cdGludCBpLCByZXQ7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01MjYtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjUyNzogICAgICAgIHllYWxpbmtfc2V0X3Jpbmd0b25lKHlsZCwgZGVmYXVsdF9yaW5ndG9uZSwgc2l6ZW9mKGRlZmF1bHRfcmluZ3RvbmUpKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTI4LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NTQzPXN0YXRpYyB2b2lkIGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTQ0LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NTQ1Olx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01NDYtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01OTM9c3RhdGljIHNzaXplX3Qgc2hvd19saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgYSwgaW50IGIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU5NC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjU5NTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU5Ni1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NjM2PXN0YXRpYyBzc2l6ZV90IHN0b3JlX2xpbmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTYzOC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjYzOTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY0MC1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9Njc1PXN0YXRpYyBzc2l6ZV90IGdldF9pY29ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNjc3LXtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njc4Olx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNjc5LVx0aW50IGksIHJldCA9IDE7XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02OTU9c3RhdGljIHNzaXplX3Qgc2V0X2ljb24oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY5Ny17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjY5ODpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY5OS1cdGludCBpO1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NzMxPXN0YXRpYyBzc2l6ZV90IHN0b3JlX3Jpbmd0b25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzMte1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzQ6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzUtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzgtXHQvKiBUT0RPIGxvY2tpbmcgd2l0aCBhc3luYyB1c2IgY29udHJvbCBpbnRlcmZhY2U/Pz8gKi9cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzM5Olx0eWVhbGlua19zZXRfcmluZ3RvbmUoeWxkLCAoY2hhciAqKWJ1ZiwgY291bnQpO1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03NDAtXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl90YWJsZSBbXSA9IHtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5NS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Nzk2OnN0YXRpYyBpbnQgdXNiX2NsZWFudXAoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIGludCBlcnIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5Ny17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04MTk9c3RhdGljIHZvaWQgdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTgyMC17XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjgyMTpcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODIyLVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9ODI3PXN0YXRpYyBpbnQgdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04MzItXHRzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50O1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MzM6XHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZDtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODM0LVx0c3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2O1xuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTU2LVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTc6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHllYWxpbmtfZHJpdmVyID0ge1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTg6XHQubmFtZVx0XHQ9IFwmIzM0O3llYWxpbmtcJiMzNDssXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OS1cdC5wcm9iZVx0XHQ9IHVzYl9wcm9iZSxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTY1Om1vZHVsZV91c2JfZHJpdmVyKHllYWxpbmtfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmgtMi0vKlxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaDozOiAqIGRyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuaFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaC00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZvciBpbnB1dCBkcml2ZXJzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDQ3Mi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdmFyaW91cyBtaXNjZWxsYW5lb3VzIGlucHV0IGRldmljZXMgYXJlIGRlZmluZWQsIGFuZCBJJiMzOTttIGdvaW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIGF0IGhhbmQuIEhvcGVmdWxseSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNwb3QgdGhlIG9wdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yIG9yIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHJpdmVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7bGwgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNob2ljZXMgcmVsYXRlZCB0byB3aGF0ZXZlciBpbnB1dCBkZXZpY2UgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcbiA0NjY6XHRcdCAgWW91IGNhbiBkb3dubG9hZCB1c2Vyc3BhY2UgdG9vbHMgZnJvbVxuIDQ2NzpcdFx0ICBcdTAwM2NodHRwOi8vc293ZXJidXR0cy5jb20vcG93ZXJtYXRlL1x1MDAzZS5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNDcwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm1hdGUuXG4gNDcxOlx0XG4gNDcyOlx0Y29uZmlnIElOUFVUX1lFQUxJTktcbiA0NzM6XHRcdHRyaXN0YXRlIFwmIzM0O1llYWxpbmsgdXNiLXAxayB2b2lwIHBob25lXCYjMzQ7XG4gNDc0Olx0XHRkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0RcbiA0NzU6XHRcdHNlbGVjdCBVU0JcbiA0NzY6XHRcdGhlbHBcbiA0Nzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUga2V5Ym9hcmQgYW5kIExDRCBmdW5jdGlvbnMgb2YgdGhlXG4gNDc4Olx0XHQgIFllYWxpbmsgdXNiLXAxayB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljXG4gNDc5Olx0XHQgIHVzYiBzb3VuZCBkcml2ZXIsIHNvIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGF0IGFzIHdlbGwuXG4gNDgwOlx0XG4gNDgxOlx0XHQgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdXNlIHRoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zLCBzZWVcbiA0ODI6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2RldmljZXMveWVhbGluay5yc3RcdTAwM2UuXG4gNDgzOlx0XG4gNDg0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuIDQ4NTpcdFx0ICBjYWxsZWQgeWVhbGluay5cbiA0ODY6XHRcbiA0ODc6XHRjb25maWcgSU5QVVRfQ00xMDlcbiA0ODg6XHRcdHRyaXN0YXRlIFwmIzM0O0MtTWVkaWEgQ00xMDkgVVNCIEkvTyBDb250cm9sbGVyXCYjMzQ7XG4gNDg5Olx0XHRkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0RcbiA0OTA6XHRcdHNlbGVjdCBVU0JcbiA0OTE6XHRcdGhlbHBcbiA0OTI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUga2V5Ym9hcmQgYW5kIGJ1enplciBmdW5jdGlvbnMgb2YgdGhlXG4gNDkzOlx0XHQgIEMtTWVkaWEgQ00xMDkgdXNiIHBob25lcy4gVGhlIGF1ZGlvIHBhcnQgaXMgZW5hYmxlZCBieSB0aGUgZ2VuZXJpY1xuIDQ5NDpcdFx0ICB1c2Igc291bmQgZHJpdmVyLCBzbyB5b3UgbWlnaHQgd2FudCB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFllYWxpbmsmIzM5O3MgSW5wdXQgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDQwMCB0byA1MDAuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmfigKYgc29tZXRoaW5nLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbnB1dCBwcm9jZXNzaW5nLCBldmVudCBoYW5kbGluZywgb3IgcG9zc2libHkgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBZZWFsaW5rIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBpbnB1dCBzdWJzeXN0ZW0gaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgbG9naWMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIHJldmVhbHMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIGFtIHByZXBhcmluZyB0byByZWFkIHRoZSBjb2RlLCBhbmFseXplIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBkaXNjZXJuIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBvZiB0aGUgZHJpdmVyLiBJIHdpbGwgbG9vayBmb3IgYW55IGFub21hbGllcyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0ICogZXJyb3Isc3RhcnRcbiA0MDE6XHQgKlxuIDQwMjpcdCAqL1xuIDQwMzpcdHN0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3dpdGNoIChzdGF0dXMpIHtcbiA0MDY6XHRcdGNhc2UgLUVOT0VOVDpcbiA0MDc6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gNDA4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gNDA5Olx0XHRjYXNlIC1FUFJPVE86XG4gNDEwOlx0XHRjYXNlIC1FUElQRTpcbiA0MTE6XHRcdGNhc2UgLUVJTFNFUTpcbiA0MTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDEzOlx0XHRkZWZhdWx0OlxuIDQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDE1Olx0XHR9XG4gNDE2Olx0fVxuIDQxNzpcdFxuIDQxODpcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gNDIxOlx0XHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKHN0YXR1cykge1xuIDQyNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQyNTpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQyNjpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Mjc6XHRcdFx0XHRyZXR1cm47XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiA0MzE6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQzMjpcdFxuIDQzMzpcdFx0XHR5bGQtXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF07XG4gNDM0Olx0XHRcdGJyZWFrO1xuIDQzNTpcdFxuIDQzNjpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDM3Olx0XHRcdGRldl9kYmcoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtnZXQgc2NhbmNvZGUgJXhcXG5cJiMzNDssXG4gNDM4Olx0XHRcdFx0eWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRyZXBvcnRfa2V5KHlsZCwgbWFwX3Axa190b19rZXkoeWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pKTtcbiA0NDE6XHRcdFx0YnJlYWs7XG4gNDQyOlx0XG4gNDQzOlx0XHRkZWZhdWx0OlxuIDQ0NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7dW5leHBlY3RlZCByZXNwb25zZSAleFxcblwmIzM0OyxcbiA0NDU6XHRcdFx0XHR5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pIHtcbiA0NTE6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ1MjpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQRVJNKVxuIDQ1MzpcdFx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDQ1NDpcdFx0XHRcdFx0XCYjMzQ7JXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXG5cJiMzNDssXG4gNDU1Olx0XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0NTY6XHRcdH1cbiA0NTc6XHR9XG4gNDU4Olx0XG4gNDU5Olx0c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiA0NjI6XHRcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHN0YXR1cykge1xuIDQ2NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQ2NjpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQ2NzpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm47XG4gNDY5Olx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VjdGxfZGF0YS1cdTAwM2VjbWQpIHtcbiA0NzI6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQ3MzpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDc0Olx0XHRcdC8qIGFzayBmb3IgYSByZXNwb25zZSAqL1xuIDQ3NTpcdFx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbiA0NzY6XHRcdFx0XHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXHUwMDNldXJiX2lycSwgR0ZQX0FUT01JQyk7XG4gNDc3Olx0XHRcdGJyZWFrO1xuIDQ3ODpcdFx0ZGVmYXVsdDpcbiA0Nzk6XHRcdFx0Lyogc2VuZCBuZXcgY29tbWFuZCAqL1xuIDQ4MDpcdFx0XHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcbiA0ODE6XHRcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pXG4gNDgyOlx0XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ4MzpcdFx0XHRicmVhaztcbiA0ODQ6XHRcdH1cbiA0ODU6XHRcbiA0ODY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBFUk0pXG4gNDg3Olx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDslcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcblwmIzM0OyxcbiA0ODg6XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0ODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBJbnRlcnJ1cHQgSGFuZGxpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgVVNCIGludGVycnVwdCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGVhbCB3aXRoIG5vbi16ZXJvIFVSQiBzdGF0dXMgY29kZXMgaW4gYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AuIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGJlZW4gYSByZWNlbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiB0aGUgYHN0YXR1c2Agd2FzbiYjMzk7dCB6ZXJvLCB3ZSYjMzk7ZCBsb2cgYW4gZXJyb3IgYW5kIHRoZW4gcHJvY2VlZCB3aXRoIHByb2Nlc3NpbmcgdGhlIGludGVycnVwdC4gTm93LCB0aGVyZSYjMzk7cyBhbiBhZGRlZCBjaGVjazogYGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKSByZXR1cm47YC4KCkVzc2VudGlhbGx5LCBpZiB0aGUgc3RhdHVzIGluZGljYXRlcyBhICYjMzQ7ZmF0YWwgZXJyb3IsJiMzNDsgdGhlIGZ1bmN0aW9uIHJldHVybnMgKmltbWVkaWF0ZWx5Ki4gVGhhdCBtZWFucyBubyBuZXcgVVJCIGlzIHN1Ym1pdHRlZCwgbm8gdGFza3MgYXJlIGV4ZWN1dGVkLCBhbmQgbm8gZGF0YSBpcyB0b3VjaGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBlYXJseSByZXR1cm4gd2FzIGludHJvZHVjZWQuIFdhcyBpdCBhIGZpeCBmb3IgYSBzcGVjaWZpYyBpc3N1ZSwgb3IgYSBnZW5lcmFsIG9wdGltaXphdGlvbj8KClRpbWUgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byBnZXQgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGp1ZGdtZW50IGFib3V0IHdoZXRoZXIgdGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCwgb3IgaWYgaXQgbWlnaHQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpbiBjZXJ0YWluIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGhhbmRsaW5nIHBvdGVudGlhbGx5IGVycm9uZW91cyBpbnRlcnJ1cHRzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3llYWxpbmtfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9ODI3PXN0YXRpYyBpbnQgdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTYtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjk1NzpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeWVhbGlua19kcml2ZXIgPSB7XG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OC1cdC5uYW1lXHRcdD0gXCYjMzQ7eWVhbGlua1wmIzM0Oyxcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTY1Om1vZHVsZV91c2JfZHJpdmVyKHllYWxpbmtfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Nzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBZZWFsaW5rIFVTQiBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSBgeWVhbGlua2AgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBzdGFuZGFyZCBVU0IgZHJpdmVyIHVzaW5nIGBtb2R1bGVfdXNiX2RyaXZlcih5ZWFsaW5rX2RyaXZlcilgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgY2FuIGxldmVyYWdlIHN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB0byBwcm9iZSB0aGlzIGRyaXZlci4gSWYgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBSYXcgR2FkZ2V0IG9yIFVTQiBmdXp6aW5nLCB0aGF0IHdvdWxkIGJlIGEgZmFudGFzdGljIGF2ZW51ZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBiZWF1dHkgb2Ygc3l6a2FsbGVyIGlzIGl0cyBhYmlsaXR5IHRvIGNyZWF0ZSB0aGVzZSB2aXJ0dWFsIFVTQiBkZXZpY2VzIHdpdGhpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0ZXN0aW5nIFVTQiBkcml2ZXJzIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgVVNCIGRldmljZSBJRCB0YWJsZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHR9O1xuIDc4MTpcdFxuIDc4MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfdGFibGUgW10gPSB7XG4gNzgzOlx0XHR7XG4gNzg0Olx0XHRcdC5tYXRjaF9mbGFnc1x0XHQ9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHxcbiA3ODU6XHRcdFx0XHRcdFx0XHRVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLFxuIDc4NjpcdFx0XHQuaWRWZW5kb3JcdFx0PSAweDY5OTMsXG4gNzg3Olx0XHRcdC5pZFByb2R1Y3RcdFx0PSAweGIwMDEsXG4gNzg4Olx0XHRcdC5iSW50ZXJmYWNlQ2xhc3NcdD0gVVNCX0NMQVNTX0hJRCxcbiA3ODk6XHRcdFx0LmJJbnRlcmZhY2VTdWJDbGFzc1x0PSAwLFxuIDc5MDpcdFx0XHQuYkludGVyZmFjZVByb3RvY29sXHQ9IDAsXG4gNzkxOlx0XHRcdC5kcml2ZXJfaW5mb1x0XHQ9IChrZXJuZWxfdWxvbmdfdClcdTAwMjZpbmZvX1AxS1xuIDc5MjpcdFx0fSxcbiA3OTM6XHRcdHsgfVxuIDc5NDpcdH07XG4gNzk1Olx0XG4gNzk2Olx0c3RhdGljIGludCB1c2JfY2xlYW51cChzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVycilcbiA3OTc6XHR7XG4gNzk4Olx0XHRpZiAoeWxkID09IE5VTEwpXG4gNzk5Olx0XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY3JpdGVyaWEgcHJlY2lzZWx5LiAmIzM0O1JlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLCYjMzQ7IHJpZ2h0PyBUaGUgY29kZSBoYXMgdG8gYmUgKmV4ZWN1dGFibGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE5vIGJsaW5kIHRydXN0IG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMsIGFuZCBhbnkgbmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gcmVhY2hhYmxlIGNvZGUgYXJlIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk5vdywgd2hlbiBkbyBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gT25seSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSAoZG9jcywgdXNlci1zcGFjZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBldGMuKSwgaW52b2x2ZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChsaWtlIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCksIG9yIGhhcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgYC5yZW1vdmVgIGZ1bmN0aW9ucyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnKS4KCk9uIHRoZSBmbGlwIHNpZGUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCwgSSBzZWUgaXQgaW52b2x2ZXMgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLCBhIFVTQiBkcml2ZXIuIEV4Y2VsbGVudCEgSSBrbm93IHRoYXQgc3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBhY3RpdmVseSBpbnRlcmFjdCB3aXRoIFVTQiBkcml2ZXJzIHRocm91Z2ggcmF3IGdhZGdldCBhbmQgZHVtbXlfaGNkIGVtdWxhdGlvbi4gVGhlIGNvZGUgc2hvd3MgbWUgdGhpcyBpcyBmb3IgYW4gZW11bGF0ZWQgVVNCIGRldmljZSwgYSBZZWFsaW5rIGRldmljZSwgd2l0aCBhIHNwZWNpZmljIFZJRC9QSUQuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbnNpZGUgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgYmFzZWQgb24gdGhlIHN0YXR1cyBvZiBVUkIgY29tcGxldGlvbnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBpc19mYXRhbF9lcnJvcihzdGF0dXMpYCBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3J1Y2lhbCBiZWNhdXNlIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBhY3RpdmVseSB0cmllcyB0byB0cmlnZ2VyIHRob3NlIGNvbXBsZXRpb24gZXJyb3JzIGJ5IHNlbmRpbmcgaW52YWxpZCBVU0IgcGFja2V0cywgZGlzY29ubmVjdHMsIGV0Yy4gU28gdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzdWJtaXNzaW9uIGxvZ2ljISBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IGNvcnJlY3RseS4gVGhlIGNvZGUgZGVwZW5kcyBvbiBgY29uZmlnIElOUFVUX1lFQUxJTktgLCBgVVNCX0FSQ0hfSEFTX0hDRGAsIGFuZCBzZWxlY3RzIGBVU0JgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlIGVuY2xvc2luZyBgbWVudWNvbmZpZyBJTlBVVF9NSVNDYCBvciBgaWYgSU5QVVRfTUlTQ2AgaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlbiBJIGNhbiBjb25maXJtIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSW5wdXQgbWlzYyBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0bWVudWNvbmZpZyBJTlBVVF9NSVNDXG4gICA2Olx0XHRib29sIFwmIzM0O01pc2NlbGxhbmVvdXMgZGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBTYXkgWSBoZXJlLCBhbmQgYSBsaXN0IG9mIG1pc2NlbGxhbmVvdXMgaW5wdXQgZHJpdmVycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgIDk6XHRcdCAgRXZlcnl0aGluZyB0aGF0IGRpZG4mIzM5O3QgZml0IGludG8gdGhlIG90aGVyIGNhdGVnb3JpZXMgaXMgaGVyZS4gVGhpcyBvcHRpb25cbiAgMTA6XHRcdCAgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBrZXJuZWwuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDEzOlx0XG4gIDE0Olx0aWYgSU5QVVRfTUlTQ1xuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTlBVVF84OFBNODYwWF9PTktFWVxuICAxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODhQTTg2MHggT05LRVkgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0ZGVwZW5kcyBvbiBNRkRfODhQTTg2MFhcbiAgMTk6XHRcdGhlbHBcbiAgMjA6XHRcdCAgU3VwcG9ydCB0aGUgT05LRVkgb2YgTWFydmVsbCA4OFBNODYweCBQTUlDcyBhcyBhbiBpbnB1dCBkZXZpY2VcbiAgMjE6XHRcdCAgcmVwb3J0aW5nIHBvd2VyIGJ1dHRvbiBzdGF0dXMuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMjQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODhwbTg2MHhfb25rZXkuXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIElOUFVUXzg4UE04MFhfT05LRVlcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0Ozg4UE04MHggT05LRVkgc3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBNRkRfODhQTTgwMFxuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBTdXBwb3J0IHRoZSBPTktFWSBvZiBNYXJ2ZWxsIDg4UE04MHggUE1JQ3MgYXMgYW4gaW5wdXQgZGV2aWNlXG4gIDMxOlx0XHQgIHJlcG9ydGluZyBwb3dlciBidXR0b24gc3RhdHVzLlxuICAzMjpcdFxuICAzMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04MHhfb25rZXkuXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIElOUFVUXzg4UE04ODZfT05LRVlcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgODhQTTg4NiBvbmtleSBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1GRF84OFBNODg2X1BNSUNcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCB0aGUgb25rZXkgb2YgTWFydmVsbCA4OFBNODg2IFBNSUMgYXMgYW4gaW5wdXQgZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBJbnB1dCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgaW5wdXQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgcmlnaHQ/IEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGBkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ2AgZmlsZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogZ2V0cyBwdWxsZWQgaW50byB0aGUgbGFyZ2VyIGJ1aWxkIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL2lucHV0L0tjb25maWdgLiBUaGlzIHNob3VsZCBzaG93IG1lIHRoZSBpbmNsdXNpb24gcGF0aCwgaGVscGluZyBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBtaXNjIGRyaXZlciBLY29uZmlnIGZpbGUgZml0cyB3aXRoaW4gdGhlIHdob2xlIGlucHV0IGRyaXZlciBjb25maWd1cmF0aW9uIHNjaGVtZS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlzYy9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L0tjb25maWc9MTg3PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvaW5wdXQvS2NvbmZpZy0xODgtXG5kcml2ZXJzL2lucHV0L0tjb25maWc6MTg5OnNvdXJjZSBcJiMzNDtkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pbnB1dC9LY29uZmlnLTE5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZHJpdmVycy9pbnB1dC9LY29uZmlnYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5wdXQgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgYXJvdW5kIGxpbmUgMTg5IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgaW5wdXQgZGV2aWNlIHNldHRpbmdzLiBIb3dldmVyLCBJIHdhbnQgdGhlIGZ1bGwgY29udGV4dC4gU28sIGJlZm9yZSBJIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgbGluZSwgSSYjMzk7bGwgc3RhcnQgYXQgdGhlIHZlcnkgdG9wIG9mIGBkcml2ZXJzL2lucHV0L0tjb25maWdgIHRvIHJlLWVzdGFibGlzaCB0aGUgb3ZlcmFsbCBsYXlvdXQgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgZ2VuZXJhbGx5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnl0aGluZyBzcGVjaWZpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBsaW5lIGFuZCB0aGUgZ3JlYXRlciB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O0lucHV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIElOUFVUXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGlucHV0IGxheWVyIChuZWVkZWQgZm9yIGtleWJvYXJkLCBtb3VzZSwgLi4uKVwmIzM0OyBpZiBFWFBFUlRcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgKG1vdXNlLCBrZXlib2FyZCwgdGFibGV0LFxuICAxMzpcdFx0ICBqb3lzdGljaywgc3RlZXJpbmcgd2hlZWwgLi4uKSBjb25uZWN0ZWQgdG8geW91ciBzeXN0ZW0gYW5kIHdhbnRcbiAgMTQ6XHRcdCAgaXQgdG8gYmUgYXZhaWxhYmxlIHRvIGFwcGxpY2F0aW9ucy4gVGhpcyBpbmNsdWRlcyBzdGFuZGFyZCBQUy8yXG4gIDE1Olx0XHQgIGtleWJvYXJkIGFuZCBtb3VzZS5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgU2F5IE4gaGVyZSBpZiB5b3UgaGF2ZSBhIGhlYWRsZXNzIChubyBtb25pdG9yLCBubyBrZXlib2FyZCkgc3lzdGVtLlxuICAxODpcdFxuICAxOTpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTogXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnJzdFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAyMjpcdFxuICAyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlucHV0LlxuICAyNTpcdFxuICAyNjpcdGlmIElOUFVUXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIElOUFVUX0xFRFNcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O0V4cG9ydCBpbnB1dCBkZXZpY2UgTEVEcyBpbiBzeXNmc1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXG4gIDMxOlx0XHRkZWZhdWx0IElOUFVUXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gZXhwb3J0IExFRHMgb24gaW5wdXQgZGV2aWNlc1xuICAzNDpcdFx0ICBhcyBzdGFuZGFyZCBMRUQgY2xhc3MgZGV2aWNlcyBpbiBzeXNmcy5cbiAgMzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWWVhbGluayBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFN5emthbGxlciBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgWWVhbGluayBVU0IgZHJpdmVyIGFuZCB0aGVuIHRoaW5rIGFib3V0IHdoYXQgdGhhdCBtZWFucyBmb3Igc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgZHJpdmVyLCBgSU5QVVRfWUVBTElOS2AsIGRlcGVuZHMgb24gYFVTQl9BUkNIX0hBU19IQ0RgIGFuZCBzZWxlY3RzIGBVU0JgLiBBbmQgKlVTQiogcmVxdWlyZXMgKkNPTkZJR19VU0IqLiAgRm9yIGVtdWxhdGlvbiwgSSBtaWdodCBuZWVkIGVpdGhlciBgVVNCX1JBV19HQURHRVRgIG9yIGBVU0JfRFVNTVlfSENEYCwgYnV0IHRoYXQmIzM5O3Mgc2VwYXJhdGUuIFRoZSAqY3JpdGljYWwqIHRoaW5nIGlzIHRoYXQgdG8gYnVpbGQgdGhlIGRyaXZlciBpdHNlbGYsIEkgbmVlZCBgQ09ORklHX0lOUFVUX1lFQUxJTktgLCB3aGljaCBpbiB0dXJuIHB1bGxzIGluIGBDT05GSUdfSU5QVVRgLCBgQ09ORklHX0lOUFVUX01JU0NgLCBhbmQgYENPTkZJR19VU0JgLgoKSSBjb25maXJtZWQgdGhlc2UgZGVwZW5kZW5jaWVzIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgYElOUFVUX1lFQUxJTktgIHNpdHMgdW5kZXIgdGhlIGBpZiBJTlBVVF9NSVNDYCBibG9jaywgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB1bmRlciB0aGUgYGlmIElOUFVUYCBjb25kaXRpb24uIFRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBkZXBlbmRlbmN5IGNoYWluOiBgSU5QVVRfWUVBTElOS2AgZGVwZW5kcyBvbiBgSU5QVVRfTUlTQ2AgYW5kIGBJTlBVVGAsIGFuZCB1bHRpbWF0ZWx5IFVTQi4KCkZvciBzeXprYWxsZXIsIHRoZSAqRW5hYmxlQ29uZmlncyogZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgSSYjMzk7dmUgaWRlbnRpZmllZCwgSSYjMzk7ZCBkZWZpbml0ZWx5IHdhbnQgdG8gaW5jbHVkZToKCi0gICBgSU5QVVRfWUVBTElOS2AKLSAgIGBJTlBVVF9NSVNDYAotICAgYElOUFVUYAotICAgYFVTQmAKCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSAqRm9jdXNTeW1ib2xzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgYGlzX2ZhdGFsX2Vycm9yYC4gIGBpc19mYXRhbF9lcnJvcmAgaXMgbGlrZWx5IGlubGluZWQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhcyBjcml0aWNhbC4gQnV0IGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGFyZSBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIFRoZXkmIzM5O3JlIGZ1bmN0aW9uIHBvaW50ZXJzIHBhc3NlZCB0byBgdXNiX2ZpbGxfaW50X3VyYmAgYW5kIGB1c2JfZmlsbF9jb250cm9sX3VyYmAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBpbXBvcnRhbnQ6IHRoZXNlIGNhbGxiYWNrcyBhcmUgKmhvdyogdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hlcmUgdGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdpdGhpbiBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgbG9naWMgbGllcywgYW5kIGl0JiMzOTtzIHdoZXJlIGFueSBwb3RlbnRpYWwgc3l6a2FsbGVyIGZ1enppbmcgdGFyZ2V0cyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cmJfKGlycXxjdGwpX2NhbGxiYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQwMz1zdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDE3LVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MTg6c3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQxOS17XG4tLVxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NTgtXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ1OTpzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTgyNz1zdGF0aWMgaW50IHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkxLVx0XHRcdFVTQl9QS1RfTEVOLFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4OTI6XHRcdFx0dXJiX2lycV9jYWxsYmFjayxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkzLVx0XHRcdHlsZCwgZW5kcG9pbnQtXHUwMDNlYkludGVydmFsKTtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTkwNy1cdFx0XHQodm9pZCAqKXlsZC1cdTAwM2VjdGxfcmVxLCB5bGQtXHUwMDNlY3RsX2RhdGEsIFVTQl9QS1RfTEVOLFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5MDg6XHRcdFx0dXJiX2N0bF9jYWxsYmFjaywgeWxkKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA5LVx0eWxkLVx1MDAzZXVyYl9jdGwtXHUwMDNldHJhbnNmZXJfZG1hXHQ9IHlsZC1cdTAwM2VjdGxfZG1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5NgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IFllYWxpbmsgVVNCIFBob25lIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBZZWFsaW5rIFVTQiBwaG9uZSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb2RpZmljYXRpb25zIHRvIGl0cyBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gZW5zdXJpbmcgdGhlc2UgY2FsbGJhY2tzLCBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCwgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgZGlzY29ubmVjdHMgYW5kIGVycm9yIGluamVjdGlvbiwgd2hpY2ggY2FuIGJlIGVhc2lseSBzaW11bGF0ZWQuCgpGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzeW1ib2xzLiAgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgYXJlIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gVGhleSBjYW4mIzM5O3QgYmUgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB1c2VkIGZvciB0aGUgVVJCIGNhbGxiYWNrcy4gIGBpc19mYXRhbF9lcnJvcmAsIHdoaWxlIHN0YXRpYyBhbmQgbGlrZWx5IGlubGluZWQsIGlzIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MgaW4gY2FzZSBvZiBjb21waWxlciBvcHRpbWl6YXRpb24gaXNzdWVzIChvciBhYnNlbnQgb3B0aW1pemF0aW9uIGZsYWdzLikKCkkgY29uc2lkZXJlZCBgdXNiX3Byb2JlYCBhbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBidXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IHViaXF1aXRvdXMgb3IgZ2VuZXJpYyBuYW1lcy4gYHVzYl9wcm9iZWAgaXMgc3RhdGljIHRvIGB5ZWFsaW5rLmNgLCBidXQgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUgdG9vLCBzbyB0aGF0IGlzIG5vdCB0aGUgcmlnaHQgY2hvaWNlLCBwbHVzIHRoZSBmdW5jdGlvbnMgb2YgZm9jdXMgYXJlIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFja3MuCgpUaGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBkcml2ZXIsIHN1Y2ggYXMgYHllYWxpbmtfZG9faWRsZV90YXNrc2Agb3IgYHllYWxpbmtfY21kYCwgYXJlIHVudG91Y2hlZCwgc28gdGhleSBhcmUgbm90IHdoYXQmIzM5O3MgYmVpbmcgZnV6emVkIGhlcmUuIFRoZSBtb2RpZmljYXRpb24gaXMgY29udGFpbmVkIGluIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgdGhlIGFkZGVkIGBpc19mYXRhbF9lcnJvcmAuCgpCYXNlZCBvbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGRpZmYsIHRoZSBmdXp6aW5nIHRhcmdldCBpcyBjbGVhcjogY2hlY2tpbmcgaG93IHRoZSBkcml2ZXIgcmVhY3RzIHRvIGZhdGFsIFVSQiBzdGF0dXNlcyBpbiB0aG9zZSBjYWxsYmFja3MgaXMgd2hhdCBuZWVkcyB0aGUgYXR0ZW50aW9uLiAgVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgY29uZmlybWVkIGFzIGB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ7IHRoZSB0ZXN0YWJpbGl0eSBpcyBnb29kIGJlY2F1c2Ugb2Ygc3l6a2FsbGVyIGFuZCBVU0IgZW11bGF0aW9uIHN1cHBvcnQsIHNvIGZ1enppbmcgaXMgYW4gZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMgaGVyZS4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBJTlBVVF9ZRUFMSU5LYCwgYElOUFVUX01JU0NgLCBgSU5QVVRgLCBhbmQgYFVTQmAuCgpTbywgdGhlIGZ1enppbmcgc2V0dXAgd2lsbCBiZToKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBJTlBVVF9ZRUFMSU5LYCwgYElOUFVUX01JU0NgLCBgSU5QVVRgLCBgVVNCYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgKGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgKSBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApIHRvIGNoZWNrIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgKC1FTk9FTlQsIC1FQ09OTlJFU0VULCAtRVNIVVRET1dOLCAtRVBST1RPLCAtRVBJUEUsIC1FSUxTRVEpIGFuZCBhYm9ydCBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHN5emthbGxlciYjMzk7cyBVU0IgZW11bGF0aW9uIChlLmcuIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpLiBGdXp6aW5nIGNhbiB2ZXJpZnkgdGhhdCBVUkIgdGVybWluYXRpb24gYW5kIHN0YXRlIGhhbmRsaW5nIGJlaGF2ZSBjb3JyZWN0bHkgdW5kZXIgdmFyaW91cyBlcnJvciBpbmplY3Rpb24gYW5kIGRldmljZSBkaXNjb25uZWN0IHNjZW5hcmlvcy4KCkV2ZXJ5dGhpbmcgaXMgZ29vZCwgYW5kIGl0IGlzIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5QVVRfWUVBTElOSyYjMzQ7LAogICAgJiMzNDtJTlBVVF9NSVNDJiMzNDssCiAgICAmIzM0O0lOUFVUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VyYl9pcnFfY2FsbGJhY2smIzM0OywKICAgICYjMzQ7dXJiX2N0bF9jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU1MTUxZjNkODk1ZGZlY2U0YjBjN2M4NzI0NjY5NjQwYTJhMWU2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA5OjE0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCkBAIC00MDAsMTQgJiM0Mzs0MDAsMzIgQEAgc3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpCiAgKiBlcnJvcixzdGFydAogICoKICAqLwomIzQzO3N0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN0YXR1cykgewomIzQzOwljYXNlIC1FTk9FTlQ6CiYjNDM7CWNhc2UgLUVDT05OUkVTRVQ6CiYjNDM7CWNhc2UgLUVTSFVURE9XTjoKJiM0MzsJY2FzZSAtRVBST1RPOgomIzQzOwljYXNlIC1FUElQRToKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi0mZ3Q7Y29udGV4dDsKIAlpbnQgcmV0LCBzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIAotCWlmIChzdGF0dXMpCiYjNDM7CWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmYW1wO3lsZC0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzIC0gdXJiIHN0YXR1cyAlZFxuJiMzNDssCiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKJiM0MzsJCWlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQogCiAJc3dpdGNoICh5bGQtJmd0O2lycV9kYXRhLSZndDtjbWQpIHsKIAljYXNlIENNRF9LRVlQUkVTUzoKQEAgLTQ0Myw5ICYjNDM7NDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLSZndDtjb250ZXh0OwogCWludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIAotCWlmIChzdGF0dXMpCiYjNDM7CWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmYW1wO3lsZC0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0OyVzIC0gdXJiIHN0YXR1cyAlZFxuJiMzNDssCiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKJiM0MzsJCWlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJfQogCiAJc3dpdGNoICh5bGQtJmd0O2N0bF9kYXRhLSZndDtjbWQpIHsKIAljYXNlIENNRF9LRVlQUkVTUzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFllYWxpbmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEgcGF0Y2ggZm9yIHRoZSBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AgZmlsZS4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBleGFtaW5lIHRoZSBwcm9wb3NlZCBjaGFuZ2VzIHRoZW1zZWx2ZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoZSBjaGFuZ2UuIAoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBhcm91bmQgbGluZSA0MDAgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIG9yIGF0IGxlYXN0IGEgcmVnaW9uIHNpZ25pZmljYW50bHkgaW1wYWN0ZWQgYnkgaXQuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgZHJpdmVyIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHQgKlxuIDM5MTpcdCAqIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGRpYWdyYW0gaXMgc29tZXRoaGluZyBsaWtlOlxuIDM5MjpcdCAqXG4gMzkzOlx0ICogICAgICAgICAgc3luY1N0YXRlXHUwMDNjLS0mIzQzO1xuIDM5NDpcdCAqICAgICAgICAgICAgICAgfCAgICAgIHxcbiAzOTU6XHQgKiAgICAgICAgICAgICAgIHwgICAgaWRsZVxuIDM5NjpcdCAqICAgICAgICAgICAgICBcXHwvICAgICB8XG4gMzk3Olx0ICogaW5pdCAtLW9rLS1cdTAwM2Ugd2FpdEZvcktleSAtLW9rLS1cdTAwM2UgZ2V0S2V5XG4gMzk4Olx0ICogIF4gICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIHxcbiAzOTk6XHQgKiAgfCAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLW9rLS0tLS0tLSYjNDM7XG4gNDAwOlx0ICogZXJyb3Isc3RhcnRcbiA0MDE6XHQgKlxuIDQwMjpcdCAqL1xuIDQwMzpcdHN0YXRpYyBib29sIGlzX2ZhdGFsX2Vycm9yKGludCBzdGF0dXMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0c3dpdGNoIChzdGF0dXMpIHtcbiA0MDY6XHRcdGNhc2UgLUVOT0VOVDpcbiA0MDc6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gNDA4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gNDA5Olx0XHRjYXNlIC1FUFJPVE86XG4gNDEwOlx0XHRjYXNlIC1FUElQRTpcbiA0MTE6XHRcdGNhc2UgLUVJTFNFUTpcbiA0MTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gNDEzOlx0XHRkZWZhdWx0OlxuIDQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDE1Olx0XHR9XG4gNDE2Olx0fVxuIDQxNzpcdFxuIDQxODpcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gNDIxOlx0XHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQyMjpcdFxuIDQyMzpcdFx0aWYgKHN0YXR1cykge1xuIDQyNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQyNTpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQyNjpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Mjc6XHRcdFx0XHRyZXR1cm47XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWQpIHtcbiA0MzE6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQzMjpcdFxuIDQzMzpcdFx0XHR5bGQtXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF07XG4gNDM0Olx0XHRcdGJyZWFrO1xuIDQzNTpcdFxuIDQzNjpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDM3Olx0XHRcdGRldl9kYmcoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtnZXQgc2NhbmNvZGUgJXhcXG5cJiMzNDssXG4gNDM4Olx0XHRcdFx0eWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pO1xuIDQzOTpcdFxuIDQ0MDpcdFx0XHRyZXBvcnRfa2V5KHlsZCwgbWFwX3Axa190b19rZXkoeWxkLVx1MDAzZWlycV9kYXRhLVx1MDAzZWRhdGFbMF0pKTtcbiA0NDE6XHRcdFx0YnJlYWs7XG4gNDQyOlx0XG4gNDQzOlx0XHRkZWZhdWx0OlxuIDQ0NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7dW5leHBlY3RlZCByZXNwb25zZSAleFxcblwmIzM0OyxcbiA0NDU6XHRcdFx0XHR5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKTtcbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0aWYgKCF5bGQtXHUwMDNlc2h1dGRvd24pIHtcbiA0NTE6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoeWxkLVx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xuIDQ1MjpcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQRVJNKVxuIDQ1MzpcdFx0XHRcdGRldl9lcnIoXHUwMDI2eWxkLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDQ1NDpcdFx0XHRcdFx0XCYjMzQ7JXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXG5cJiMzNDssXG4gNDU1Olx0XHRcdFx0XHRfX2Z1bmNfXywgcmV0KTtcbiA0NTY6XHRcdH1cbiA0NTc6XHR9XG4gNDU4Olx0XG4gNDU5Olx0c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiA0NjI6XHRcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIDQ2MzpcdFxuIDQ2NDpcdFx0aWYgKHN0YXR1cykge1xuIDQ2NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7JXMgLSB1cmIgc3RhdHVzICVkXFxuXCYjMzQ7LFxuIDQ2NjpcdFx0XHRcdF9fZnVuY19fLCBzdGF0dXMpO1xuIDQ2NzpcdFx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbiA0Njg6XHRcdFx0XHRyZXR1cm47XG4gNDY5Olx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRzd2l0Y2ggKHlsZC1cdTAwM2VjdGxfZGF0YS1cdTAwM2VjbWQpIHtcbiA0NzI6XHRcdGNhc2UgQ01EX0tFWVBSRVNTOlxuIDQ3MzpcdFx0Y2FzZSBDTURfU0NBTkNPREU6XG4gNDc0Olx0XHRcdC8qIGFzayBmb3IgYSByZXNwb25zZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdXJiX2N0bF9jYWxsYmFja2AgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpZyBpbnRvIHRoZSBgdXJiX2N0bF9jYWxsYmFja2AgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBjb250ZXh0LiBXZSYjMzk7cmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBhIFVTQiBDb250cm9sIFRyYW5zZmVyLCBvciBsaWtlbHkgYSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjYWxsYmFjayBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZW5kcG9pbnQsIGEgcGFydGljdWxhciBVU0IgY29tbWFuZCwgb3Igc29tZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gS25vd2luZyB0aGUgZGV2aWNlIChZZWFsaW5rKSBhbmQgdGhlICYjMzQ7bWlzYyYjMzQ7IGNhdGVnb3JpemF0aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIG5vbi1zdGFuZGFyZCwgcGVyaGFwcyB2ZW5kb3Itc3BlY2lmaWMsIGNvbnRyb2wgbWVzc2FnZXMgZm9yIGEgZGV2aWNlIGxpa2UgYSBwaG9uZSwgb3IgcG90ZW50aWFsbHkgc3BlY2lhbGl6ZWQgcGVyaXBoZXJhbCBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoLiBXaGF0JiMzOTtzIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjaywgYW5kIGhvdyBpcyBpdCB1c2VkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvaW50ZXJzIHRvIGRldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHNvbWUga2luZCBvZiBzdGF0ZSBtYWNoaW5lIHZhcmlhYmxlcywgb3IgcG9zc2libHkgZXZlbnQgcXVldWVzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGVycm9ycyBhcmUgaGFuZGxlZCwgYmVjYXVzZSBhIGZhaWxlZCBVUkIgY2FsbGJhY2sgY2FuIGhhdmUgc2V2ZXJlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGZ1bmN0aW9uYWxpdHksIGFuZCBwb3RlbnRpYWxseSBsb2NrLXVwIHRoZSBkZXZpY2UuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGRhdGEgaW50ZXJwcmV0YXRpb24gdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBjbG9zZWx5LCBhcyB0aGVzZSBhcmUgb2Z0ZW4gd2hlcmUgdnVsbmVyYWJpbGl0aWVzIGFuZCBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuCgpNeSBnb2FsIGlzIHRvIHRob3JvdWdobHkgY29tcHJlaGVuZCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgYHVyYl9jdGxfY2FsbGJhY2tgIGlzIGludGVncmF0ZWQgaW50byB0aGUgWWVhbGluayBkZXZpY2UmIzM5O3MgZnVuY3Rpb25hbGl0eSwgc28gSSBjYW4gcHJvdmlkZSBteSBpbnNpZ2h0cyB0byB0aGUgcHJvamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHRcbiA0NzE6XHRcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIDQ3MjpcdFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4gNDczOlx0XHRjYXNlIENNRF9TQ0FOQ09ERTpcbiA0NzQ6XHRcdFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXG4gNDc1Olx0XHRcdGlmICgheWxkLVx1MDAzZXNodXRkb3duKVxuIDQ3NjpcdFx0XHRcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cdTAwM2V1cmJfaXJxLCBHRlBfQVRPTUlDKTtcbiA0Nzc6XHRcdFx0YnJlYWs7XG4gNDc4Olx0XHRkZWZhdWx0OlxuIDQ3OTpcdFx0XHQvKiBzZW5kIG5ldyBjb21tYW5kICovXG4gNDgwOlx0XHRcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xuIDQ4MTpcdFx0XHRpZiAoIXlsZC1cdTAwM2VzaHV0ZG93bilcbiA0ODI6XHRcdFx0XHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XG4gNDgzOlx0XHRcdGJyZWFrO1xuIDQ4NDpcdFx0fVxuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FUEVSTSlcbiA0ODc6XHRcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0OyVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkICVkXFxuXCYjMzQ7LFxuIDQ4ODpcdFx0XHRcdF9fZnVuY19fLCByZXQpO1xuIDQ4OTpcdH1cbiA0OTA6XHRcbiA0OTE6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDQ5MjpcdCAqIGlucHV0IGV2ZW50IGludGVyZmFjZVxuIDQ5MzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gNDk0Olx0XG4gNDk1Olx0LyogVE9ETyBzaG91bGQgd2UgaXNzdWUgYSByaW5ndG9uZSBvbiBhIFNORF9CRUxMIGV2ZW50P1xuIDQ5NjpcdHN0YXRpYyBpbnQgaW5wdXRfZXYoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSxcbiA0OTc6XHRcdFx0dW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSlcbiA0OTg6XHR7XG4gNDk5Olx0XG4gNTAwOlx0XHRpZiAodHlwZSAhPSBFVl9TTkQpXG4gNTAxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwMjpcdFxuIDUwMzpcdFx0c3dpdGNoIChjb2RlKSB7XG4gNTA0Olx0XHRjYXNlIFNORF9CRUxMOlxuIDUwNTpcdFx0Y2FzZSBTTkRfVE9ORTpcbiA1MDY6XHRcdFx0YnJlYWs7XG4gNTA3Olx0XHRkZWZhdWx0OlxuIDUwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBZZWFsaW5rIFVTQiBkcml2ZXIgcmVsYXRlZCB0byBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBoYW5kbGluZy4gUHJldmlvdXNseSwgZXZlbiBpZiBhIFVSQiByZXR1cm5lZCBhIG5vbi16ZXJvIHN0YXR1cyBjb2RlLCBpbmRpY2F0aW5nIGFuIGVycm9yIGxpa2UgYSBkaXNjb25uZWN0IG9yIGZhdGFsIGVycm9yLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24ga2VwdCBjaHVnZ2luZyBhbG9uZy4gVGhlIGNvZGUgd291bGQgYmxpdGhlbHkgY29udGludWUgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmAgKGxpa2UgYGlycV9kYXRhYCksIHBvdGVudGlhbGx5IHJlLXN1Ym1pdHRpbmcgdGhlIFVSQiB3aXRoIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB3YXMgY2hlY2tpbmcgYHlsZC0mZ3Q7aXJxX2RhdGEtJmd0O2NtZGAgb3IgYHlsZC0mZ3Q7Y3RsX2RhdGEtJmd0O2NtZGAgYW5kIGNhbGxpbmcgYHllYWxpbmtfZG9faWRsZV90YXNrc2AgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IuIFRoaXMgaXMgYSByZWQgZmxhZy4KClRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGlzX2ZhdGFsX2Vycm9yKHN0YXR1cylgLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIHRoZSBjYWxsYmFjayAqaW1tZWRpYXRlbHkqIHJldHVybnMuIE5vIGZ1cnRoZXIgcHJvY2Vzc2luZywgbm8gcmVzdWJtaXNzaW9uLCBwZXJpb2QuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGFwcHJvYWNoIHRvIHByZXZlbnQgdGhlIGlzc3VlcyBJJiMzOTt2ZSBvZnRlbiBzZWVuIGluIG90aGVyIHNpbWlsYXIgZHJpdmVycy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gU28gSSYjMzk7bSBydW5uaW5nIGRvd24gdGhlIGxpc3QuCgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIHRoYXQmIzM5O3MgZ29vZC4KKiAgIFRoZSBsb2dpYyBpdHNlbGYgcmVsaWVzIG9uIGB1cmItJmd0O3N0YXR1c2AsIHdoaWNoIGlzIHNldCBieSB0aGUgVVNCIGNvcmUuIFRoZW4gaXQgdXNlcyB0aGUgcmVzdWx0IGluIGBpc19mYXRhbF9lcnJvcigpYC4gU2VlbXMgc2FmZSwgYXMgSSByZWNhbGwgaG93IHRoZSBVU0IgY29yZSB3b3Jrcy4KKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHBhdGNoIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuCiogICBUaGlzIGFsc28gcHJldmVudHMgdW5pbml0aWFsaXplZCBieXRlcy4gQWN0dWFsbHksIGJ5IHJldHVybmluZyBlYXJseSwgdGhlIHBhdGNoICpwcmV2ZW50cyogcmVhZGluZyBmcm9tIHRoZSBidWZmZXIgd2hlbiBpdCBtaWdodCBjb250YWluIHN0YWxlLCBpbnZhbGlkLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmchCgpVbHRpbWF0ZWx5LCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBkZWZlbnNpdmUgcGF0Y2gsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gYmVmb3JlLiBJdCBpcyBsaWtlbHkgZGVzaWduZWQgdG8gcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZ2V0dGluZyBpbnRvIGFuIGluZmluaXRlIGxvb3Agb2YgVVJCIHJlc3VibWlzc2lvbiBvciByZWFkaW5nIGZyb20gaW52YWxpZCBtZW1vcnkgYWZ0ZXIgYSBkZXZpY2UgZGlzY29ubmVjdCBvciBzZXJpb3VzIFVTQiBlcnJvci4gSXQgbG9va3MgbGlrZSB0aGlzIGZpeGVzIGEgY2xhc3NpYyBwcm9ibGVtIEkmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QgLSBpbmZpbml0ZSBsb29wIG9mIHVyYiBzdWJtaXNzaW9uIG9uIGRpc2Nvbm5lY3QsIG9yIHVzZS1hZnRlci1mcmVlLCBvciBgV0FSTl9PTmAgaW4gdGhlIFVTQiBjb3JlIHdoZW4gcmVzdWJtaXR0aW5nIGEgZGVhZCBVUkIuIFNvIEkmIzM5O2xsIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSwgYW5kIHRoZSBzdXJyb3VuZGluZyBVU0IgZHJpdmVyIGNvZGUgZm9yIHRoZXNlIGVycm9yIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19mYXRhbF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9MzA3PXN0YXRpYyBpbnQgeWVhbGlua19kb19pZGxlX3Rhc2tzKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkKVxuLS1cbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDAyLSAqL1xuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MDM6c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDA0LXtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQyNS1cdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDI2Olx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDI3LVx0XHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQ1OT1zdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Ni1cdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NDY3Olx0XHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDY4LVx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFllYWxpbmsgRHJpdmVyIENvZGUgLSBEaXZpbmcgaW50byBHaXQgTG9nKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFllYWxpbmsgZHJpdmVyJiMzOTtzIHN0cnVjdHVyZSBhbmQgYW55IGNvbW1vbiBjb2RpbmcgcGF0dGVybnMgd2l0aGluIHRoaXMgZHJpdmVyIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgbGlrZSBpdC4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGluaXRpYWxseSBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIG9mIGB5ZWFsaW5rLmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBsb2cgd2lsbCBpbGx1bWluYXRlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvZGUsIGtleSBjb21taXRzLCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjZXJ0YWluIGRlc2lnbiBjaG9pY2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcmVjdXJyaW5nIGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBhZGRyZXNzZWQgb3ZlciB0aW1lLiBFeGFtaW5pbmcgdGhlIGNvbW1pdHMgcmVsYXRlZCB0byBvdGhlciBkcml2ZXJzIGluIHRoaXMgYXJlYSwgdG9vLCB3b3VsZCBiZSBoZWxwZnVsLiBDb21wYXJpbmcgdGhlIGFwcHJvYWNoZXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBiZXN0IHByYWN0aWNlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgb3duIHdvcmsgb24gc2ltaWxhciBkcml2ZXJzLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaWRlYSBvZiBob3cgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1FTk9FTlQuKi1FQ09OTlJFU0VULiotRVNIVVRET1dOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0yOTg9c3RhdGljIHZvaWQgdWFzX3N0YXRfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtMzEyLVx0aWYgKHN0YXR1cykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzozMTM6XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FQ09OTlJFU0VUIFx1MDAyNlx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtMzE0LVx0XHRcdGRldl9lcnIoXHUwMDI2dXJiLVx1MDAzZWRldi1cdTAwM2VkZXYsIFwmIzM0O3N0YXQgdXJiOiBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0zOTg9c3RhdGljIHZvaWQgdWFzX2RhdGFfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtNDI2LVx0aWYgKHN0YXR1cykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzo0Mjc6XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FQ09OTlJFU0VUIFx1MDAyNlx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMtNDI4LVx0XHRcdHVhc19sb2dfY21kX3N0YXRlKGNtbmQsIFwmIzM0O2RhdGEgY21wbHQgZXJyXCYjMzQ7LCBzdGF0dXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODIyCgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVUkIgQ29tcGxldGlvbiBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlYWxpbmcgd2l0aCB0aGUgc3RhbmRhcmQgVVNCIGRyaXZlciBiZWhhdmlvciBhcm91bmQgVVJCIGNvbXBsZXRpb24gc3RhdHVzZXMgbGlrZSBgLUVOT0VOVGAsIGAtRUNPTk5SRVNFVGAsIGFuZCBgLUVTSFVURE9XTmAgd2hlbiBhbiBVUkIgaXMgdW5saW5rZWQgb3IgdGhlIGRldmljZSBnZXRzIGRpc2Nvbm5lY3RlZC4gV2UgYWxsIGtub3cgdGhhdCByZXN1Ym1pdHRpbmcgaW4gdGhlc2Ugc2NlbmFyaW9zIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgcmVzdWJtaXNzaW9uIGxvb3BzIG9yIFVBRnMuIFNvLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCBpZiBJJiMzOTttIHVuZGVyc3RhbmRpbmcgY29ycmVjdGx5LCBpcyBhIGNoZWNrIHdpdGhpbiB0aGUgYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2AgZnVuY3Rpb25zOiBgaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKWAuIFRoaXMgaXMgbWVhbnQgdG8gcHJldmVudCBmdXJ0aGVyIGFjdGlvbiBvbiBhbiBVUkIsIG9yIGF0dGVtcHRpbmcgdG8gcmVzdWJtaXQgaXQsIGlmIGEgY3JpdGljYWwgVVNCIGVycm9yLCBsaWtlIGEgZGV2aWNlIGRpc2Nvbm5lY3QsIGhhcyBoYXBwZW5lZC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHNwZWNpZmljYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICBEb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3IgYnVmZmVycyB1bmluaXRpYWxpemVkPyBOby4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuCiogICBEb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZS4KKiAgIElzIGl0IHJlYWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4KKiAgIERvZXMgaXQgYWZmZWN0IGJvdW5kcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBTdGlsbCBuby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG91ciB3b3JrIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBLQVNBTiBoYW5kbGVzIG1lbW9yeSBjb3JydXB0aW9uLCBVQUZzLCBhbmQgb3V0LW9mLWJvdW5kcywgd2hpbGUgS01TQU4gd291bGQgZmxhZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGlzIHBhdGNoIGp1c3QgYWRkcmVzc2VzIGNvbnRyb2wgZmxvdyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24sIHByZXZlbnRpbmcgcHJvYmxlbXMgbGlrZSBpbmZpbml0ZSByZXN1Ym1pc3Npb25zIG9yIFVBRiB3YXJuaW5ncy4gVGhlcmUgaXMgemVybyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uLCByZWFkIG9yIGxlYWsgdG8gdXNlcnNwYWNlIGFuZCB3ZSBhcmUgc29sZWx5IG1hbmFnaW5nIHRoZSBVUkIgY29tcGxldGlvbiBwcm9jZXNzIGR1cmluZyBhIGZhaWx1cmUgdG8gcHJldmVudCB1bmludGVuZGVkIGNvZGUgZXhlY3V0aW9uIGluIGEgZmFpbHVyZSBjb25kaXRpb24uIFRoZXJlZm9yZSwgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeS4gU3RhbmRhcmQgS0FTQU4vc3l6a2FsbGVyIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHZlcmlmaWNhdGlvbi4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNS42MDIyMzA2ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMDI5MjE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5QVVRfWUVBTElOS1wiLFxuICAgIFwiSU5QVVRfTUlTQ1wiLFxuICAgIFwiSU5QVVRcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVyYl9pcnFfY2FsbGJhY2tcIixcbiAgICBcInVyYl9jdGxfY2FsbGJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBjb250cm9sIGZsb3cgb24gVVNCIGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgaW5maW5pdGUgVVJCIHJlc3VibWlzc2lvbnMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB1cG9uIGRldmljZSB0ZWFyZG93bi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MDUuNjAyMjM2MjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1MTYxODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU1MTUxZjNkODk1ZGZlY2U0YjBjN2M4NzI0NjY5NjQwYTJhMWU2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOToxNDowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xcbmluZGV4IDU2MGY4OTVhMDBjZGEuLmJmOTFmNDBjZDU4OWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcXG5AQCAtNDAwLDE0ICs0MDAsMzIgQEAgc3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpXFxuICAqIGVycm9yLHN0YXJ0XFxuICAqXFxuICAqL1xcbitzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAoc3RhdHVzKSB7XFxuK1xcdGNhc2UgLUVOT0VOVDpcXG4rXFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4rXFx0Y2FzZSAtRVNIVVRET1dOOlxcbitcXHRjYXNlIC1FUFJPVE86XFxuK1xcdGNhc2UgLUVQSVBFOlxcbitcXHRjYXNlIC1FSUxTRVE6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuIHtcXG4gXFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIFxcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG4tXFx0aWYgKHN0YXR1cylcXG4rXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuK1xcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4gXFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG4tXFx0aWYgKHN0YXR1cylcXG4rXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuK1xcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNy4xOTg0MTU1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY5MjI5NTMwMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOUFVUX1lFQUxJTktcIixcbiAgICBcIklOUFVUX01JU0NcIixcbiAgICBcIklOUFVUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cmJfaXJxX2NhbGxiYWNrXCIsXG4gICAgXCJ1cmJfY3RsX2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xuaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbkBAIC00MDAsMTQgKzQwMCwzMiBAQCBzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbiAgKiBlcnJvcixzdGFydFxuICAqXG4gICovXG4rc3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSAtRU5PRU5UOlxuK1x0Y2FzZSAtRUNPTk5SRVNFVDpcbitcdGNhc2UgLUVTSFVURE9XTjpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVQSVBFOlxuK1x0Y2FzZSAtRUlMU0VROlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG4tXHRpZiAoc3RhdHVzKVxuK1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCIlcyAtIHVyYiBzdGF0dXMgJWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbitcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0c3dpdGNoICh5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKSB7XG4gXHRjYXNlIENNRF9LRVlQUkVTUzpcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbitcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiJXMgLSB1cmIgc3RhdHVzICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4rXHRcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDowNy4xOTg0MTgxNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTEwMjU1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIFllYWxpbmsgVVNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwgdGhhdCBJIG5lZWQgdG8gZXZhbHVhdGUuIExvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AuIEZpcnN0IHRoaW5nIEknbGwgZG8gaXMgemVybyBpbiBvbiB0aGUgY2hhbmdlcy4gQWxyaWdodCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKWAsIHdhcyBhZGRlZCwgYW5kIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRvIGB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilgIGFuZCBgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpYC4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5ICppbiogYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBJJ2xsIHB1bGwgdGhhdCB1cCB3aXRoIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgY29kZS5cblxuQWxyaWdodCwgSSByZW1lbWJlciB0aGlzIG9uZS4uLiBpdCdzIHRoZSBZZWFsaW5rIFZvSVAgVVNCIHBob25lIGRyaXZlci4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGVhc2lseSBjYW4gSSB0ZXN0IHRoaXM/IENhbiBJIGV2ZW4gZW11bGF0ZSB0aGlzIGluIGEgc3RhbmRhcmQgc2V0dXAgbGlrZSBRRU1VIG9yIFN5emthbGxlcj8gSG1tLCBTeXprYWxsZXIsIHllcywgaXQgZGVmaW5pdGVseSBoYXMgVVNCIGVtdWxhdGlvbi4gSSBjYW4gcHJvYmFibHkgZ2V0IHRoaXMgZG9uZSB1c2luZyBSYXcgR2FkZ2V0IG9yIHRoZSBEdW1teSBIQ0QsIG9yIHBlcmhhcHMgVVNCIGZ1enppbmcgdGhyb3VnaCBzeXpfdXNiX2Nvbm5lY3QuLi4gQnV0IGNhbiB0aGUgYHllYWxpbmtgIFVTQiBkcml2ZXIgZXZlbiBiZSBwcm9iZWQgdmlhIHRoZSBVU0IgZW11bGF0aW9uIGluIFN5emthbGxlcj9cblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhlIHRlc3RpbmcgcmFiYml0IGhvbGUsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgLiBUaGF0IHdpbGwgYXQgbGVhc3QgdGVsbCBtZSB3aGF0IGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBldmVuIGNvbXBpbGUgYW5kIHJ1bi4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoxMS4zMDg2NzYzOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5Njk3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieWVhbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc9NDcyPWNvbmZpZyBJTlBVVF9ZRUFMSU5LXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZy00ODEtXFx0ICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgc2VlXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDgyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9kZXZpY2VzL3llYWxpbmsucnN0XFx1MDAzZS5cXG5kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZy00ODMtXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWc6NDg1OlxcdCAgY2FsbGVkIHllYWxpbmsuXFxuZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWctNDg2LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlPTk1PW9iai0kKENPTkZJR19JTlBVVF9YRU5fS0JEREVWX0ZST05URU5EKVxcdCs9IHhlbi1rYmRmcm9udC5vXFxuZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlOjk2Om9iai0kKENPTkZJR19JTlBVVF9ZRUFMSU5LKVxcdFxcdCs9IHllYWxpbmsub1xcbmRyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZS05Ny1vYmotJChDT05GSUdfSU5QVVRfSURFQVBBRF9TTElERUJBUilcXHQrPSBpZGVhcGFkX3NsaWRlYmFyLm9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jLTE0LSAqXFxuZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmM6MTU6ICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIHllYWxpbmsuYyBkcml2ZXJcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xNi0gKlxcbmRyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jLTE3LSAqIFRoYW5rcyB0bzpcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYzoxODogKiAgIC0gQXV0aG9ycyBvZiB5ZWFsaW5rLmNcXG5kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYy0xOS0gKiAgIC0gVGhvbWFzIFJlaXRtYXlyXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTItLypcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00LSAqXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMzLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MzQ6I2luY2x1ZGUgXFxcInllYWxpbmsuaFxcXCJcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTM1LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz02MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9zZWdtZW50X21hcCB7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTcyLX0gbGNkTWFwW10gPSB7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3MzojaW5jbHVkZSBcXFwieWVhbGluay5oXFxcIlxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNzQtfTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc1LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzY6c3RydWN0IHllYWxpbmtfZGV2IHtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc3LVxcdHN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7XFx0XFx0LyogaW5wdXQgZGV2aWNlICovXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTExNj1zdGF0aWMgU0VHN19ERUZBVUxUX01BUChtYXBfc2VnNyk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTEyMS0gICovXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoxMjI6c3RhdGljIGludCBzZXRDaGFyKHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkLCBpbnQgZWwsIGludCBjaHIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0xODM9c3RhdGljIGludCBtYXBfcDFrX3RvX2tleShpbnQgc2NhbmNvZGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTIxNC0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjIxNTpzdGF0aWMgdm9pZCByZXBvcnRfa2V5KHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkLCBpbnQga2V5KVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjE2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtMjM5LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6MjQwOnN0YXRpYyBpbnQgeWVhbGlua19jbWQoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIHN0cnVjdCB5bGRfY3RsX3BhY2tldCAqcClcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI0MS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTI1OD1zdGF0aWMgdTggZGVmYXVsdF9yaW5ndG9uZVtdID0ge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yNzEtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyNzI6c3RhdGljIGludCB5ZWFsaW5rX3NldF9yaW5ndG9uZShzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODQtXFx0eWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlZGF0YVswXVxcdD0gYnVmWzBdO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Mjg1OlxcdHllYWxpbmtfY21kKHlsZCwgcCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy0yODYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTI5OC1cXHRcXHRtZW1jcHkocC1cXHUwMDNlZGF0YSwgXFx1MDAyNmJ1ZltpeF0sIGxlbik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzoyOTk6XFx0XFx0eWVhbGlua19jbWQoeWxkLCBwKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwMC1cXHRcXHRpeCArPSBsZW47XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwNi0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjMwNzpzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTMwOC17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQxOD1zdGF0aWMgdm9pZCB1cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQxOS17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MjA6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjEtXFx0aW50IHJldCwgc3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0Ny1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ0ODpcXHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ0OS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NDU5PXN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDYwLXtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ2MTpcXHRzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Mi1cXHRpbnQgcmV0ID0gMCwgc3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ3OS1cXHRcXHQvKiBzZW5kIG5ldyBjb21tYW5kICovXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0ODA6XFx0XFx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00ODEtXFx0XFx0aWYgKCF5bGQtXFx1MDAzZXNodXRkb3duKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01MTU9c3RhdGljIGludCBpbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUxNi17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1MTc6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTE4LVxcdGludCBpLCByZXQ7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUyNi1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjUyNzogICAgICAgIHllYWxpbmtfc2V0X3Jpbmd0b25lKHlsZCwgZGVmYXVsdF9yaW5ndG9uZSwgc2l6ZW9mKGRlZmF1bHRfcmluZ3RvbmUpKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTUyOC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NTQzPXN0YXRpYyB2b2lkIGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTU0NC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo1NDU6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNTQ2LVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz01OTM9c3RhdGljIHNzaXplX3Qgc2hvd19saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgYSwgaW50IGIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01OTQte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NTk1OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy01OTYtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTYzNj1zdGF0aWMgc3NpemVfdCBzdG9yZV9saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTYzOC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo2Mzk6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTY0MC1cXHRpbnQgaTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9Njc1PXN0YXRpYyBzc2l6ZV90IGdldF9pY29ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02Nzcte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njc4OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02NzktXFx0aW50IGksIHJldCA9IDE7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTY5NT1zdGF0aWMgc3NpemVfdCBzZXRfaWNvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02OTcte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6Njk4OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy02OTktXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTczMT1zdGF0aWMgc3NpemVfdCBzdG9yZV9yaW5ndG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzMte1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6NzM0OlxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03MzUtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTczOC1cXHQvKiBUT0RPIGxvY2tpbmcgd2l0aCBhc3luYyB1c2IgY29udHJvbCBpbnRlcmZhY2U/Pz8gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjczOTpcXHR5ZWFsaW5rX3NldF9yaW5ndG9uZSh5bGQsIChjaGFyICopYnVmLCBjb3VudCk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03NDAtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTc4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RhYmxlIFtdID0ge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy03OTUtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo3OTY6c3RhdGljIGludCB1c2JfY2xlYW51cChzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZCwgaW50IGVycilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTc5Ny17XFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTgxOT1zdGF0aWMgdm9pZCB1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTgyMC17XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MjE6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODIyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODMyLVxcdHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo4MzM6XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQ7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04MzQtXFx0c3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2O1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTYtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NTc6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHllYWxpbmtfZHJpdmVyID0ge1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTU4OlxcdC5uYW1lXFx0XFx0PSBcXFwieWVhbGlua1xcXCIsXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NTktXFx0LnByb2JlXFx0XFx0PSB1c2JfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk2NC1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjk2NTptb2R1bGVfdXNiX2RyaXZlcih5ZWFsaW5rX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NjYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oLTItLypcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oOjM6ICogZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5oXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaC00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjExLjM3NjY1Mjk0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MDgwODMzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgZm9yIGlucHV0IGRyaXZlcnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWdgIOKAkyBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSA0NzIuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhcmlvdXMgbWlzY2VsbGFuZW91cyBpbnB1dCBkZXZpY2VzIGFyZSBkZWZpbmVkLCBhbmQgSSdtIGdvaW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0gYXQgaGFuZC4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBzcG90IHRoZSBvcHRpb24gSSdtIGxvb2tpbmcgZm9yIG9yIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHJpdmVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ20gaG9waW5nIGl0J2xsIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaG9pY2VzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgaW5wdXQgZGV2aWNlIGZ1bmN0aW9uYWxpdHkgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjEzLjg4NDczOTA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFxuIDQ2NjpcXHRcXHQgIFlvdSBjYW4gZG93bmxvYWQgdXNlcnNwYWNlIHRvb2xzIGZyb21cXG4gNDY3OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zb3dlcmJ1dHRzLmNvbS9wb3dlcm1hdGUvXFx1MDAzZS5cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNDcwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2VybWF0ZS5cXG4gNDcxOlxcdFxcbiA0NzI6XFx0Y29uZmlnIElOUFVUX1lFQUxJTktcXG4gNDczOlxcdFxcdHRyaXN0YXRlIFxcXCJZZWFsaW5rIHVzYi1wMWsgdm9pcCBwaG9uZVxcXCJcXG4gNDc0OlxcdFxcdGRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRFxcbiA0NzU6XFx0XFx0c2VsZWN0IFVTQlxcbiA0NzY6XFx0XFx0aGVscFxcbiA0Nzc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBrZXlib2FyZCBhbmQgTENEIGZ1bmN0aW9ucyBvZiB0aGVcXG4gNDc4OlxcdFxcdCAgWWVhbGluayB1c2ItcDFrIHVzYiBwaG9uZXMuIFRoZSBhdWRpbyBwYXJ0IGlzIGVuYWJsZWQgYnkgdGhlIGdlbmVyaWNcXG4gNDc5OlxcdFxcdCAgdXNiIHNvdW5kIGRyaXZlciwgc28geW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlIHRoYXQgYXMgd2VsbC5cXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgc2VlXFxuIDQ4MjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZGV2aWNlcy95ZWFsaW5rLnJzdFxcdTAwM2UuXFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuIDQ4NTpcXHRcXHQgIGNhbGxlZCB5ZWFsaW5rLlxcbiA0ODY6XFx0XFxuIDQ4NzpcXHRjb25maWcgSU5QVVRfQ00xMDlcXG4gNDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJDLU1lZGlhIENNMTA5IFVTQiBJL08gQ29udHJvbGxlclxcXCJcXG4gNDg5OlxcdFxcdGRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRFxcbiA0OTA6XFx0XFx0c2VsZWN0IFVTQlxcbiA0OTE6XFx0XFx0aGVscFxcbiA0OTI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBrZXlib2FyZCBhbmQgYnV6emVyIGZ1bmN0aW9ucyBvZiB0aGVcXG4gNDkzOlxcdFxcdCAgQy1NZWRpYSBDTTEwOSB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljXFxuIDQ5NDpcXHRcXHQgIHVzYiBzb3VuZCBkcml2ZXIsIHNvIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGF0IGFzIHdlbGwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjEzLjg4NDg2NDYzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MzUzNTAwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gWWVhbGluaydzIElucHV0IERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDAwIHRvIDUwMC4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGV5J3JlIGhhbmRsaW5n4oCmIHNvbWV0aGluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbnB1dCBwcm9jZXNzaW5nLCBldmVudCBoYW5kbGluZywgb3IgcG9zc2libHkgc29tZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBZZWFsaW5rIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGlucHV0IHN1YnN5c3RlbSBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGxvZ2ljLiBMZXQncyBzZWUgaWYgdGhpcyBzZWN0aW9uIHJldmVhbHMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0gSSdtIGludmVzdGlnYXRpbmcuIEkgYW0gcHJlcGFyaW5nIHRvIHJlYWQgdGhlIGNvZGUsIGFuYWx5emUgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIGRpc2Nlcm4gdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBkcml2ZXIuIEkgd2lsbCBsb29rIGZvciBhbnkgYW5vbWFsaWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjE2LjUyMDIxODUxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHQgKiBlcnJvcixzdGFydFxcbiA0MDE6XFx0ICpcXG4gNDAyOlxcdCAqL1xcbiA0MDM6XFx0c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN3aXRjaCAoc3RhdHVzKSB7XFxuIDQwNjpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDQwNzpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiA0MDg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiA0MDk6XFx0XFx0Y2FzZSAtRVBST1RPOlxcbiA0MTA6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDQxMTpcXHRcXHRjYXNlIC1FSUxTRVE6XFxuIDQxMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDEzOlxcdFxcdGRlZmF1bHQ6XFxuIDQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxNTpcXHRcXHR9XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDQyMTpcXHRcXHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKHN0YXR1cykge1xcbiA0MjQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVyYiBzdGF0dXMgJWRcXFxcblxcXCIsXFxuIDQyNTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG4gNDI2OlxcdFxcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbiA0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0Mjg6XFx0XFx0fVxcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRzd2l0Y2ggKHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCkge1xcbiA0MzE6XFx0XFx0Y2FzZSBDTURfS0VZUFJFU1M6XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdHlsZC1cXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXTtcXG4gNDM0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRjYXNlIENNRF9TQ0FOQ09ERTpcXG4gNDM3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiZ2V0IHNjYW5jb2RlICV4XFxcXG5cXFwiLFxcbiA0Mzg6XFx0XFx0XFx0XFx0eWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXSk7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdFxcdHJlcG9ydF9rZXkoeWxkLCBtYXBfcDFrX3RvX2tleSh5bGQtXFx1MDAzZWlycV9kYXRhLVxcdTAwM2VkYXRhWzBdKSk7XFxuIDQ0MTpcXHRcXHRcXHRicmVhaztcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0ZGVmYXVsdDpcXG4gNDQ0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCByZXNwb25zZSAleFxcXFxuXFxcIixcXG4gNDQ1OlxcdFxcdFxcdFxcdHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pIHtcXG4gNDUxOlxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBFUk0pXFxuIDQ1MzpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gNDU0OlxcdFxcdFxcdFxcdFxcdFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG4gNDYwOlxcdHtcXG4gNDYxOlxcdFxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiA0NjI6XFx0XFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIDQ2NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gNDY2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbiA0Njc6XFx0XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIDQ3MjpcXHRcXHRjYXNlIENNRF9LRVlQUkVTUzpcXG4gNDczOlxcdFxcdGNhc2UgQ01EX1NDQU5DT0RFOlxcbiA0NzQ6XFx0XFx0XFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXFxuIDQ3NTpcXHRcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pXFxuIDQ3NjpcXHRcXHRcXHRcXHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXFx1MDAzZXVyYl9pcnEsIEdGUF9BVE9NSUMpO1xcbiA0Nzc6XFx0XFx0XFx0YnJlYWs7XFxuIDQ3ODpcXHRcXHRkZWZhdWx0OlxcbiA0Nzk6XFx0XFx0XFx0Lyogc2VuZCBuZXcgY29tbWFuZCAqL1xcbiA0ODA6XFx0XFx0XFx0eWVhbGlua19kb19pZGxlX3Rhc2tzKHlsZCk7XFxuIDQ4MTpcXHRcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pXFxuIDQ4MjpcXHRcXHRcXHRcXHRyZXQgPSB1c2Jfc3VibWl0X3VyYih5bGQtXFx1MDAzZXVyYl9jdGwsIEdGUF9BVE9NSUMpO1xcbiA0ODM6XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NDpcXHRcXHR9XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUEVSTSlcXG4gNDg3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcXFxcblxcXCIsXFxuIDQ4ODpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgcmV0KTtcXG4gNDg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MTYuNTIwMzc1MjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA5MTkwOTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBJbnRlcnJ1cHQgSGFuZGxpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIFVTQiBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlIGRlYWwgd2l0aCBub24temVybyBVUkIgc3RhdHVzIGNvZGVzIGluIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgLiBJdCBzZWVtcyB0aGVyZSdzIGJlZW4gYSByZWNlbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiB0aGUgYHN0YXR1c2Agd2Fzbid0IHplcm8sIHdlJ2QgbG9nIGFuIGVycm9yIGFuZCB0aGVuIHByb2NlZWQgd2l0aCBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQuIE5vdywgdGhlcmUncyBhbiBhZGRlZCBjaGVjazogYGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKSByZXR1cm47YC5cblxuRXNzZW50aWFsbHksIGlmIHRoZSBzdGF0dXMgaW5kaWNhdGVzIGEgXCJmYXRhbCBlcnJvcixcIiB0aGUgZnVuY3Rpb24gcmV0dXJucyAqaW1tZWRpYXRlbHkqLiBUaGF0IG1lYW5zIG5vIG5ldyBVUkIgaXMgc3VibWl0dGVkLCBubyB0YXNrcyBhcmUgZXhlY3V0ZWQsIGFuZCBubyBkYXRhIGlzIHRvdWNoZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGVhcmx5IHJldHVybiB3YXMgaW50cm9kdWNlZC4gV2FzIGl0IGEgZml4IGZvciBhIHNwZWNpZmljIGlzc3VlLCBvciBhIGdlbmVyYWwgb3B0aW1pemF0aW9uP1xuXG5UaW1lIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byBnZXQgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gSSdtIGhvcGluZyB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkganVkZ21lbnQgYWJvdXQgd2hldGhlciB0aGlzIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLCBvciBpZiBpdCBtaWdodCBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBoYW5kbGluZyBwb3RlbnRpYWxseSBlcnJvbmVvdXMgaW50ZXJydXB0cyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MTkuNjEyMjg3NTE0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5ZWFsaW5rX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTU2LVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6OTU3OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB5ZWFsaW5rX2RyaXZlciA9IHtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTk1OC1cXHQubmFtZVxcdFxcdD0gXFxcInllYWxpbmtcXFwiLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy05NjQtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo5NjU6bW9kdWxlX3VzYl9kcml2ZXIoeWVhbGlua19kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoxOS42NzkxODkyNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc4NjMwODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFllYWxpbmsgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgYHllYWxpbmtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWdpc3RlcnMgaXRzZWxmIGFzIGEgc3RhbmRhcmQgVVNCIGRyaXZlciB1c2luZyBgbW9kdWxlX3VzYl9kcml2ZXIoeWVhbGlua19kcml2ZXIpYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcyB0byBwcm9iZSB0aGlzIGRyaXZlci4gSWYgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBSYXcgR2FkZ2V0IG9yIFVTQiBmdXp6aW5nLCB0aGF0IHdvdWxkIGJlIGEgZmFudGFzdGljIGF2ZW51ZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBiZWF1dHkgb2Ygc3l6a2FsbGVyIGlzIGl0cyBhYmlsaXR5IHRvIGNyZWF0ZSB0aGVzZSB2aXJ0dWFsIFVTQiBkZXZpY2VzIHdpdGhpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0ZXN0aW5nIFVTQiBkcml2ZXJzIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgVVNCIGRldmljZSBJRCB0YWJsZSBhbmQgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MjIuNDY1NTAxMTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHR9O1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RhYmxlIFtdID0ge1xcbiA3ODM6XFx0XFx0e1xcbiA3ODQ6XFx0XFx0XFx0Lm1hdGNoX2ZsYWdzXFx0XFx0PSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8XFxuIDc4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLFxcbiA3ODY6XFx0XFx0XFx0LmlkVmVuZG9yXFx0XFx0PSAweDY5OTMsXFxuIDc4NzpcXHRcXHRcXHQuaWRQcm9kdWN0XFx0XFx0PSAweGIwMDEsXFxuIDc4ODpcXHRcXHRcXHQuYkludGVyZmFjZUNsYXNzXFx0PSBVU0JfQ0xBU1NfSElELFxcbiA3ODk6XFx0XFx0XFx0LmJJbnRlcmZhY2VTdWJDbGFzc1xcdD0gMCxcXG4gNzkwOlxcdFxcdFxcdC5iSW50ZXJmYWNlUHJvdG9jb2xcXHQ9IDAsXFxuIDc5MTpcXHRcXHRcXHQuZHJpdmVyX2luZm9cXHRcXHQ9IChrZXJuZWxfdWxvbmdfdClcXHUwMDI2aW5mb19QMUtcXG4gNzkyOlxcdFxcdH0sXFxuIDc5MzpcXHRcXHR7IH1cXG4gNzk0OlxcdH07XFxuIDc5NTpcXHRcXG4gNzk2OlxcdHN0YXRpYyBpbnQgdXNiX2NsZWFudXAoc3RydWN0IHllYWxpbmtfZGV2ICp5bGQsIGludCBlcnIpXFxuIDc5NzpcXHR7XFxuIDc5ODpcXHRcXHRpZiAoeWxkID09IE5VTEwpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoyMi40NjU2NDIyMTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY3MDUxMDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNyaXRlcmlhIHByZWNpc2VseS4gXCJSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSxcIiByaWdodD8gVGhlIGNvZGUgaGFzIHRvIGJlICpleGVjdXRhYmxlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBObyBibGluZCB0cnVzdCBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zLCBhbmQgYW55IG5ldyBvciBtb2RpZmllZCBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBjb2RlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgd2hlbiBkbyBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYD8gT25seSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJpY3RseSBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSAoZG9jcywgdXNlci1zcGFjZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBldGMuKSwgaW52b2x2ZXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIChsaWtlIHBoeXNpY2FsIEFTSUNzIG5vdCBlbXVsYXRlZCksIG9yIGhhcyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgYC5yZW1vdmVgIGZ1bmN0aW9ucyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnKS5cblxuT24gdGhlIGZsaXAgc2lkZSwgYFdvcnRoRnV6emluZz10cnVlYCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCB0aGlzIHNwZWNpZmljIHBhdGNoLCBJIHNlZSBpdCBpbnZvbHZlcyBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AsIGEgVVNCIGRyaXZlci4gRXhjZWxsZW50ISBJIGtub3cgdGhhdCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGFjdGl2ZWx5IGludGVyYWN0IHdpdGggVVNCIGRyaXZlcnMgdGhyb3VnaCByYXcgZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZW11bGF0aW9uLiBUaGUgY29kZSBzaG93cyBtZSB0aGlzIGlzIGZvciBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlLCBhIFllYWxpbmsgZGV2aWNlLCB3aXRoIGEgc3BlY2lmaWMgVklEL1BJRC5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgaW5zaWRlIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGJhc2VkIG9uIHRoZSBzdGF0dXMgb2YgVVJCIGNvbXBsZXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKWAgYmVmb3JlIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHJlc3VibWl0dGluZyBVUkJzLiBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNydWNpYWwgYmVjYXVzZSBzeXprYWxsZXIncyBVU0IgZnV6emluZyBhY3RpdmVseSB0cmllcyB0byB0cmlnZ2VyIHRob3NlIGNvbXBsZXRpb24gZXJyb3JzIGJ5IHNlbmRpbmcgaW52YWxpZCBVU0IgcGFja2V0cywgZGlzY29ubmVjdHMsIGV0Yy4gU28gdGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVzdWJtaXNzaW9uIGxvZ2ljISBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gdGhpcywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5LiBUaGUgY29kZSBkZXBlbmRzIG9uIGBjb25maWcgSU5QVVRfWUVBTElOS2AsIGBVU0JfQVJDSF9IQVNfSENEYCwgYW5kIHNlbGVjdHMgYFVTQmAuIEknbGwgY29uZmlybSB0aGF0IHRoZSBlbmNsb3NpbmcgYG1lbnVjb25maWcgSU5QVVRfTUlTQ2Agb3IgYGlmIElOUFVUX01JU0NgIGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZW4gSSBjYW4gY29uZmlybSB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDoyOC4xMzYxNTUyMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElucHV0IG1pc2MgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRtZW51Y29uZmlnIElOUFVUX01JU0NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1pc2NlbGxhbmVvdXMgZGV2aWNlc1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgU2F5IFkgaGVyZSwgYW5kIGEgbGlzdCBvZiBtaXNjZWxsYW5lb3VzIGlucHV0IGRyaXZlcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXFxuICAgOTpcXHRcXHQgIEV2ZXJ5dGhpbmcgdGhhdCBkaWRuJ3QgZml0IGludG8gdGhlIG90aGVyIGNhdGVnb3JpZXMgaXMgaGVyZS4gVGhpcyBvcHRpb25cXG4gIDEwOlxcdFxcdCAgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBJTlBVVF9NSVNDXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTlBVVF84OFBNODYwWF9PTktFWVxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIjg4UE04NjB4IE9OS0VZIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1GRF84OFBNODYwWFxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBTdXBwb3J0IHRoZSBPTktFWSBvZiBNYXJ2ZWxsIDg4UE04NjB4IFBNSUNzIGFzIGFuIGlucHV0IGRldmljZVxcbiAgMjE6XFx0XFx0ICByZXBvcnRpbmcgcG93ZXIgYnV0dG9uIHN0YXR1cy5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAyNDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04NjB4X29ua2V5LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgSU5QVVRfODhQTTgwWF9PTktFWVxcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIjg4UE04MHggT05LRVkgc3VwcG9ydFxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gTUZEXzg4UE04MDBcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgU3VwcG9ydCB0aGUgT05LRVkgb2YgTWFydmVsbCA4OFBNODB4IFBNSUNzIGFzIGFuIGlucHV0IGRldmljZVxcbiAgMzE6XFx0XFx0ICByZXBvcnRpbmcgcG93ZXIgYnV0dG9uIHN0YXR1cy5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzNDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIDg4cG04MHhfb25rZXkuXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBJTlBVVF84OFBNODg2X09OS0VZXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCA4OFBNODg2IG9ua2V5IHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE1GRF84OFBNODg2X1BNSUNcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCB0aGUgb25rZXkgb2YgTWFydmVsbCA4OFBNODg2IFBNSUMgYXMgYW4gaW5wdXQgZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjI4LjEzNjI3MzQ4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzQ2MjAwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIElucHV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgaW5wdXQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgcmlnaHQ/IEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCBmaWxlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGF0KiBnZXRzIHB1bGxlZCBpbnRvIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9pbnB1dC9LY29uZmlnYC4gVGhpcyBzaG91bGQgc2hvdyBtZSB0aGUgaW5jbHVzaW9uIHBhdGgsIGhlbHBpbmcgbWUgc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaG93IHRoaXMgc3BlY2lmaWMgbWlzYyBkcml2ZXIgS2NvbmZpZyBmaWxlIGZpdHMgd2l0aGluIHRoZSB3aG9sZSBpbnB1dCBkcml2ZXIgY29uZmlndXJhdGlvbiBzY2hlbWUuIEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozMS44ODI0NzYzMjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjcxMDI3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlzYy9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9LY29uZmlnPTE4Nz1zb3VyY2UgXFxcImRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2lucHV0L0tjb25maWctMTg4LVxcbmRyaXZlcnMvaW5wdXQvS2NvbmZpZzoxODk6c291cmNlIFxcXCJkcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2lucHV0L0tjb25maWctMTkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozMy4zNDk1ODQxNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTUxODIyMDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBkcml2ZXJzL2lucHV0L0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBpbnB1dCBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBjaGVjayBhcm91bmQgbGluZSAxODkgd2l0aGluIHRoYXQgZmlsZSwgYXMgdGhhdCdzIG9mdGVuIGEga2V5IGFyZWEgZm9yIGlucHV0IGRldmljZSBzZXR0aW5ncy4gSG93ZXZlciwgSSB3YW50IHRoZSBmdWxsIGNvbnRleHQuIFNvLCBiZWZvcmUgSSBkaWcgaW50byB0aGF0IHNwZWNpZmljIGxpbmUsIEknbGwgc3RhcnQgYXQgdGhlIHZlcnkgdG9wIG9mIGBkcml2ZXJzL2lucHV0L0tjb25maWdgIHRvIHJlLWVzdGFibGlzaCB0aGUgb3ZlcmFsbCBsYXlvdXQgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBvcmdhbml6ZWQgZ2VuZXJhbGx5LiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIHBpY3R1cmUgYmVmb3JlIEkgem9vbSBpbiBvbiBhbnl0aGluZyBzcGVjaWZpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBsaW5lIGFuZCB0aGUgZ3JlYXRlciB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNDozOC44Njc4MDcyMDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJbnB1dCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIElOUFVUXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBpbnB1dCBsYXllciAobmVlZGVkIGZvciBrZXlib2FyZCwgbW91c2UsIC4uLilcXFwiIGlmIEVYUEVSVFxcbiAgMTA6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW55IGlucHV0IGRldmljZSAobW91c2UsIGtleWJvYXJkLCB0YWJsZXQsXFxuICAxMzpcXHRcXHQgIGpveXN0aWNrLCBzdGVlcmluZyB3aGVlbCAuLi4pIGNvbm5lY3RlZCB0byB5b3VyIHN5c3RlbSBhbmQgd2FudFxcbiAgMTQ6XFx0XFx0ICBpdCB0byBiZSBhdmFpbGFibGUgdG8gYXBwbGljYXRpb25zLiBUaGlzIGluY2x1ZGVzIHN0YW5kYXJkIFBTLzJcXG4gIDE1OlxcdFxcdCAga2V5Ym9hcmQgYW5kIG1vdXNlLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFNheSBOIGhlcmUgaWYgeW91IGhhdmUgYSBoZWFkbGVzcyAobm8gbW9uaXRvciwgbm8ga2V5Ym9hcmQpIHN5c3RlbS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTogXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC5yc3RcXHUwMDNlXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlucHV0LlxcbiAgMjU6XFx0XFxuICAyNjpcXHRpZiBJTlBVVFxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgSU5QVVRfTEVEU1xcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIkV4cG9ydCBpbnB1dCBkZXZpY2UgTEVEcyBpbiBzeXNmc1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xcbiAgMzE6XFx0XFx0ZGVmYXVsdCBJTlBVVFxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGV4cG9ydCBMRURzIG9uIGlucHV0IGRldmljZXNcXG4gIDM0OlxcdFxcdCAgYXMgc3RhbmRhcmQgTEVEIGNsYXNzIGRldmljZXMgaW4gc3lzZnMuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6MzguODY3OTMzODAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTgwMDc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWWVhbGluayBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIFN5emthbGxlciBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBlbmFibGUgdGhlIFllYWxpbmsgVVNCIGRyaXZlciBhbmQgdGhlbiB0aGluayBhYm91dCB3aGF0IHRoYXQgbWVhbnMgZm9yIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgZHJpdmVyLCBgSU5QVVRfWUVBTElOS2AsIGRlcGVuZHMgb24gYFVTQl9BUkNIX0hBU19IQ0RgIGFuZCBzZWxlY3RzIGBVU0JgLiBBbmQgKlVTQiogcmVxdWlyZXMgKkNPTkZJR19VU0IqLiAgRm9yIGVtdWxhdGlvbiwgSSBtaWdodCBuZWVkIGVpdGhlciBgVVNCX1JBV19HQURHRVRgIG9yIGBVU0JfRFVNTVlfSENEYCwgYnV0IHRoYXQncyBzZXBhcmF0ZS4gVGhlICpjcml0aWNhbCogdGhpbmcgaXMgdGhhdCB0byBidWlsZCB0aGUgZHJpdmVyIGl0c2VsZiwgSSBuZWVkIGBDT05GSUdfSU5QVVRfWUVBTElOS2AsIHdoaWNoIGluIHR1cm4gcHVsbHMgaW4gYENPTkZJR19JTlBVVGAsIGBDT05GSUdfSU5QVVRfTUlTQ2AsIGFuZCBgQ09ORklHX1VTQmAuXG5cbkkgY29uZmlybWVkIHRoZXNlIGRlcGVuZGVuY2llcyBieSBjaGVja2luZyB0aGUgYGRyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIGBJTlBVVF9ZRUFMSU5LYCBzaXRzIHVuZGVyIHRoZSBgaWYgSU5QVVRfTUlTQ2AgYmxvY2ssIHdoaWNoIGl0c2VsZiBpcyBuZXN0ZWQgdW5kZXIgdGhlIGBpZiBJTlBVVGAgY29uZGl0aW9uLiBUaGF0IGdpdmVzIG1lIGEgY2xlYXIgZGVwZW5kZW5jeSBjaGFpbjogYElOUFVUX1lFQUxJTktgIGRlcGVuZHMgb24gYElOUFVUX01JU0NgIGFuZCBgSU5QVVRgLCBhbmQgdWx0aW1hdGVseSBVU0IuXG5cbkZvciBzeXprYWxsZXIsIHRoZSAqRW5hYmxlQ29uZmlncyogZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBkZXBlbmRlbmNpZXMgSSd2ZSBpZGVudGlmaWVkLCBJJ2QgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGU6XG5cbi0gICBgSU5QVVRfWUVBTElOS2Bcbi0gICBgSU5QVVRfTUlTQ2Bcbi0gICBgSU5QVVRgXG4tICAgYFVTQmBcblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUgKkZvY3VzU3ltYm9scyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgdXJiX2lycV9jYWxsYmFja2AsIGB1cmJfY3RsX2NhbGxiYWNrYCwgYW5kIGBpc19mYXRhbF9lcnJvcmAuICBgaXNfZmF0YWxfZXJyb3JgIGlzIGxpa2VseSBpbmxpbmVkLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBhcyBjcml0aWNhbC4gQnV0IGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGFyZSBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MuIFRoZXkncmUgZnVuY3Rpb24gcG9pbnRlcnMgcGFzc2VkIHRvIGB1c2JfZmlsbF9pbnRfdXJiYCBhbmQgYHVzYl9maWxsX2NvbnRyb2xfdXJiYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGlzIGltcG9ydGFudDogdGhlc2UgY2FsbGJhY2tzIGFyZSAqaG93KiB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGVzZSBjYWxsYmFja3MgYXJlIHVzZWQgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyJ3MgbG9naWMgbGllcywgYW5kIGl0J3Mgd2hlcmUgYW55IHBvdGVudGlhbCBzeXprYWxsZXIgZnV6emluZyB0YXJnZXRzIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTQ6NDMuNzg1OTQ0MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTUwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVyYl8oaXJxfGN0bClfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jPTQwMz1zdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MTctXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MTg6c3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MTkte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NTgtXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0NTk6c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00NjAte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz04Mjc9c3RhdGljIGludCB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtODkxLVxcdFxcdFxcdFVTQl9QS1RfTEVOLFxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM6ODkyOlxcdFxcdFxcdHVyYl9pcnFfY2FsbGJhY2ssXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy04OTMtXFx0XFx0XFx0eWxkLCBlbmRwb2ludC1cXHUwMDNlYkludGVydmFsKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA3LVxcdFxcdFxcdCh2b2lkICopeWxkLVxcdTAwM2VjdGxfcmVxLCB5bGQtXFx1MDAzZWN0bF9kYXRhLCBVU0JfUEtUX0xFTixcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjkwODpcXHRcXHRcXHR1cmJfY3RsX2NhbGxiYWNrLCB5bGQpO1xcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtOTA5LVxcdHlsZC1cXHUwMDNldXJiX2N0bC1cXHUwMDNldHJhbnNmZXJfZG1hXFx0PSB5bGQtXFx1MDAzZWN0bF9kbWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE0OjQzLjg1NDQ5OTA0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjQxNTYyNTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBZZWFsaW5rIFVTQiBQaG9uZSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZpY2F0aW9ucyB0byBpdHMgVVJCIGNvbXBsZXRpb24gY2FsbGJhY2tzLiBJJ20gZm9jdXNpbmcgb24gZW5zdXJpbmcgdGhlc2UgY2FsbGJhY2tzLCBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCwgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgZGlzY29ubmVjdHMgYW5kIGVycm9yIGluamVjdGlvbiwgd2hpY2ggY2FuIGJlIGVhc2lseSBzaW11bGF0ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMuICBgdXJiX2lycV9jYWxsYmFja2AgYW5kIGB1cmJfY3RsX2NhbGxiYWNrYCBhcmUgZGVmaW5pdGVseSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBUaGV5IGNhbid0IGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIGV4cGxpY2l0bHkgdXNlZCBmb3IgdGhlIFVSQiBjYWxsYmFja3MuICBgaXNfZmF0YWxfZXJyb3JgLCB3aGlsZSBzdGF0aWMgYW5kIGxpa2VseSBpbmxpbmVkLCBpcyBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzIGluIGNhc2Ugb2YgY29tcGlsZXIgb3B0aW1pemF0aW9uIGlzc3VlcyAob3IgYWJzZW50IG9wdGltaXphdGlvbiBmbGFncy4pXG5cbkkgY29uc2lkZXJlZCBgdXNiX3Byb2JlYCBhbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBidXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgd2FybiBhZ2FpbnN0IHViaXF1aXRvdXMgb3IgZ2VuZXJpYyBuYW1lcy4gYHVzYl9wcm9iZWAgaXMgc3RhdGljIHRvIGB5ZWFsaW5rLmNgLCBidXQgaXQncyB1c2VkIGVsc2V3aGVyZSB0b28sIHNvIHRoYXQgaXMgbm90IHRoZSByaWdodCBjaG9pY2UsIHBsdXMgdGhlIGZ1bmN0aW9ucyBvZiBmb2N1cyBhcmUgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrcy5cblxuVGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyLCBzdWNoIGFzIGB5ZWFsaW5rX2RvX2lkbGVfdGFza3NgIG9yIGB5ZWFsaW5rX2NtZGAsIGFyZSB1bnRvdWNoZWQsIHNvIHRoZXkgYXJlIG5vdCB3aGF0J3MgYmVpbmcgZnV6emVkIGhlcmUuIFRoZSBtb2RpZmljYXRpb24gaXMgY29udGFpbmVkIGluIGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgLCBhbmQgdGhlIGFkZGVkIGBpc19mYXRhbF9lcnJvcmAuXG5cbkJhc2VkIG9uIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgZGlmZiwgdGhlIGZ1enppbmcgdGFyZ2V0IGlzIGNsZWFyOiBjaGVja2luZyBob3cgdGhlIGRyaXZlciByZWFjdHMgdG8gZmF0YWwgVVJCIHN0YXR1c2VzIGluIHRob3NlIGNhbGxiYWNrcyBpcyB3aGF0IG5lZWRzIHRoZSBhdHRlbnRpb24uICBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBjb25maXJtZWQgYXMgYHRydWVgLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBzb3VuZDsgdGhlIHRlc3RhYmlsaXR5IGlzIGdvb2QgYmVjYXVzZSBvZiBzeXprYWxsZXIgYW5kIFVTQiBlbXVsYXRpb24gc3VwcG9ydCwgc28gZnV6emluZyBpcyBhbiBlZmZpY2llbnQgdXNlIG9mIHJlc291cmNlcyBoZXJlLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBgSU5QVVRfWUVBTElOS2AsIGBJTlBVVF9NSVNDYCwgYElOUFVUYCwgYW5kIGBVU0JgLlxuXG5TbywgdGhlIGZ1enppbmcgc2V0dXAgd2lsbCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGB1cmJfaXJxX2NhbGxiYWNrYCwgYHVyYl9jdGxfY2FsbGJhY2tgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgSU5QVVRfWUVBTElOS2AsIGBJTlBVVF9NSVNDYCwgYElOUFVUYCwgYFVTQmBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyAoYHVyYl9pcnFfY2FsbGJhY2tgIGFuZCBgdXJiX2N0bF9jYWxsYmFja2ApIGluIHRoZSBZZWFsaW5rIFVTQiBwaG9uZSBkcml2ZXIgKGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCkgdG8gY2hlY2sgZm9yIGZhdGFsIFVSQiBzdGF0dXNlcyAoLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgLUVJTFNFUSkgYW5kIGFib3J0IGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmRzIG9yIHJlc3VibWl0dGluZyBVUkJzLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbiAoZS5nLiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBjYW4gdmVyaWZ5IHRoYXQgVVJCIHRlcm1pbmF0aW9uIGFuZCBzdGF0ZSBoYW5kbGluZyBiZWhhdmUgY29ycmVjdGx5IHVuZGVyIHZhcmlvdXMgZXJyb3IgaW5qZWN0aW9uIGFuZCBkZXZpY2UgZGlzY29ubmVjdCBzY2VuYXJpb3MuXG5cbkV2ZXJ5dGhpbmcgaXMgZ29vZCwgYW5kIGl0IGlzIHJlYWR5IHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjE2LjI3MDEyODg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgxMjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5QVVRfWUVBTElOS1wiLFxuICAgIFwiSU5QVVRfTUlTQ1wiLFxuICAgIFwiSU5QVVRcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVyYl9pcnFfY2FsbGJhY2tcIixcbiAgICBcInVyYl9jdGxfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgWWVhbGluayBVU0IgcGhvbmUgZHJpdmVyIChkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jKSwgc3BlY2lmaWNhbGx5IGluIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrcyB1cmJfaXJxX2NhbGxiYWNrIGFuZCB1cmJfY3RsX2NhbGxiYWNrLCBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGZvciBmYXRhbCBVUkIgc3RhdHVzZXMgdG8gYXZvaWQgcHJvY2Vzc2luZyBjb21tYW5kcyBvciByZXN1Ym1pdHRpbmcgVVJCcy4gVGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3l6a2FsbGVyJ3MgVVNCIGRldmljZSBlbXVsYXRpb24gKFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IFVSQiBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nIGFuZCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMgdW5kZXIgc2ltdWxhdGVkIFVTQiBjb21tdW5pY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklOUFVUX1lFQUxJTktcIixcbiAgICBcIklOUFVUX01JU0NcIixcbiAgICBcIklOUFVUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cmJfaXJxX2NhbGxiYWNrXCIsXG4gICAgXCJ1cmJfY3RsX2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFllYWxpbmsgVVNCIHBob25lIGRyaXZlciAoZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyksIHNwZWNpZmljYWxseSBpbiBVUkIgY29tcGxldGlvbiBjYWxsYmFja3MgdXJiX2lycV9jYWxsYmFjayBhbmQgdXJiX2N0bF9jYWxsYmFjaywgYWRkaW5nIGFuIGVhcmx5IHJldHVybiBmb3IgZmF0YWwgVVJCIHN0YXR1c2VzIHRvIGF2b2lkIHByb2Nlc3NpbmcgY29tbWFuZHMgb3IgcmVzdWJtaXR0aW5nIFVSQnMuIFRoaXMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN5emthbGxlcidzIFVTQiBkZXZpY2UgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBVUkIgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZyBhbmQgZGV2aWNlIHN0YXRlIHRyYW5zaXRpb25zIHVuZGVyIHNpbXVsYXRlZCBVU0IgY29tbXVuaWNhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTU6MTYuNDI3OTUwMzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc3MTQ3MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTU6MTYuNDI4NDYxNjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NjE3NjYyOTY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBgaXNfZmF0YWxfZXJyb3IoKWAgY2hlY2sgaW4gYHVyYl9pcnFfY2FsbGJhY2soKWAgYW5kIGB1cmJfY3RsX2NhbGxiYWNrKClgIHdpdGhpbiB0aGUgWWVhbGluayBVU0IgVm9JUCBkcml2ZXIgKGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCkuIFdoZW4gYW4gVVJCIGNvbXBsZXRlcyB3aXRoIGEgZmF0YWwgZXJyb3Igc3RhdHVzIChzdWNoIGFzIC1FTk9FTlQsIC1FQ09OTlJFU0VULCAtRVNIVVRET1dOLCAtRVBST1RPLCAtRVBJUEUsIG9yIC1FSUxTRVEsIHR5cGljYWxseSBvY2N1cnJpbmcgb24gZGV2aWNlIGRpc2Nvbm5lY3Qgb3IgVVJCIHVubGlua2luZyksIHRoZSBjYWxsYmFjayBub3cgcmV0dXJucyBlYXJseSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgdG8gcHJvY2VzcyB0cmFuc2ZlciBkYXRhIGFuZCByZXN1Ym1pdCB0aGUgVVJCLlxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyBvbiBVU0IgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCBpbmZpbml0ZSBVUkIgcmVzdWJtaXNzaW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHVwb24gZGV2aWNlIHRlYXJkb3duLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgZnVsbHkgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTUxNTFmM2Q4OTVkZmVjZTRiMGM3Yzg3MjQ2Njk2NDBhMmExZTY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDk6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1xuaW5kZXggNTYwZjg5NWEwMGNkYS4uYmY5MWY0MGNkNTg5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcbkBAIC00MDAsMTQgKzQwMCwzMiBAQCBzdGF0aWMgaW50IHllYWxpbmtfZG9faWRsZV90YXNrcyhzdHJ1Y3QgeWVhbGlua19kZXYgKnlsZClcbiAgKiBlcnJvcixzdGFydFxuICAqXG4gICovXG4rc3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSAtRU5PRU5UOlxuK1x0Y2FzZSAtRUNPTk5SRVNFVDpcbitcdGNhc2UgLUVTSFVURE9XTjpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVQSVBFOlxuK1x0Y2FzZSAtRUlMU0VROlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdXJiX2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQsIHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG4tXHRpZiAoc3RhdHVzKVxuK1x0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnlsZC1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCIlcyAtIHVyYiBzdGF0dXMgJWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgc3RhdHVzKTtcbitcdFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0c3dpdGNoICh5bGQtXHUwMDNlaXJxX2RhdGEtXHUwMDNlY21kKSB7XG4gXHRjYXNlIENNRF9LRVlQUkVTUzpcbkBAIC00NDMsOSArNDYxLDEyIEBAIHN0YXRpYyB2b2lkIHVyYl9jdGxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxuIFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXHUwMDNlY29udGV4dDtcbiBcdGludCByZXQgPSAwLCBzdGF0dXMgPSB1cmItXHUwMDNlc3RhdHVzO1xuIFxuLVx0aWYgKHN0YXR1cylcbitcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZ5bGQtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiJXMgLSB1cmIgc3RhdHVzICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4rXHRcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxuK1x0XHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHN3aXRjaCAoeWxkLVx1MDAzZWN0bF9kYXRhLVx1MDAzZWNtZCkge1xuIFx0Y2FzZSBDTURfS0VZUFJFU1M6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNToxNi40Mjg0NjMyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODk0MzE2NTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFllYWxpbmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCBmb3IgdGhlIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYCBmaWxlLiBSaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0aGVtc2VsdmVzIGFuZCBzZWUgd2hhdCdzIGJlaW5nIGFsdGVyZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGNoYW5nZS4gXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29kZSBhcm91bmQgbGluZSA0MDAgd2l0aGluIGBkcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jYC4gVGhhdCdzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhpcyBwYXRjaCwgb3IgYXQgbGVhc3QgYSByZWdpb24gc2lnbmlmaWNhbnRseSBpbXBhY3RlZCBieSBpdC4gQnkgdW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGRyaXZlciBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjU1LjM3MTYzMjA2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0ICpcXG4gMzkxOlxcdCAqIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGRpYWdyYW0gaXMgc29tZXRoaGluZyBsaWtlOlxcbiAzOTI6XFx0ICpcXG4gMzkzOlxcdCAqICAgICAgICAgIHN5bmNTdGF0ZVxcdTAwM2MtLStcXG4gMzk0OlxcdCAqICAgICAgICAgICAgICAgfCAgICAgIHxcXG4gMzk1OlxcdCAqICAgICAgICAgICAgICAgfCAgICBpZGxlXFxuIDM5NjpcXHQgKiAgICAgICAgICAgICAgXFxcXHwvICAgICB8XFxuIDM5NzpcXHQgKiBpbml0IC0tb2stLVxcdTAwM2Ugd2FpdEZvcktleSAtLW9rLS1cXHUwMDNlIGdldEtleVxcbiAzOTg6XFx0ICogIF4gICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIHxcXG4gMzk5OlxcdCAqICB8ICAgICAgICAgICAgICAgKy0tLS0tLS1vay0tLS0tLS0rXFxuIDQwMDpcXHQgKiBlcnJvcixzdGFydFxcbiA0MDE6XFx0ICpcXG4gNDAyOlxcdCAqL1xcbiA0MDM6XFx0c3RhdGljIGJvb2wgaXNfZmF0YWxfZXJyb3IoaW50IHN0YXR1cylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN3aXRjaCAoc3RhdHVzKSB7XFxuIDQwNjpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDQwNzpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiA0MDg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiA0MDk6XFx0XFx0Y2FzZSAtRVBST1RPOlxcbiA0MTA6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDQxMTpcXHRcXHRjYXNlIC1FSUxTRVE6XFxuIDQxMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDEzOlxcdFxcdGRlZmF1bHQ6XFxuIDQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxNTpcXHRcXHR9XFxuIDQxNjpcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdHN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHllYWxpbmtfZGV2ICp5bGQgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDQyMTpcXHRcXHRpbnQgcmV0LCBzdGF0dXMgPSB1cmItXFx1MDAzZXN0YXR1cztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKHN0YXR1cykge1xcbiA0MjQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVyYiBzdGF0dXMgJWRcXFxcblxcXCIsXFxuIDQyNTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG4gNDI2OlxcdFxcdFxcdGlmIChpc19mYXRhbF9lcnJvcihzdGF0dXMpKVxcbiA0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0Mjg6XFx0XFx0fVxcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRzd2l0Y2ggKHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCkge1xcbiA0MzE6XFx0XFx0Y2FzZSBDTURfS0VZUFJFU1M6XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdFxcdHlsZC1cXHUwMDNlbWFzdGVyLnMua2V5bnVtID0geWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXTtcXG4gNDM0OlxcdFxcdFxcdGJyZWFrO1xcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRjYXNlIENNRF9TQ0FOQ09ERTpcXG4gNDM3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiZ2V0IHNjYW5jb2RlICV4XFxcXG5cXFwiLFxcbiA0Mzg6XFx0XFx0XFx0XFx0eWxkLVxcdTAwM2VpcnFfZGF0YS1cXHUwMDNlZGF0YVswXSk7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdFxcdHJlcG9ydF9rZXkoeWxkLCBtYXBfcDFrX3RvX2tleSh5bGQtXFx1MDAzZWlycV9kYXRhLVxcdTAwM2VkYXRhWzBdKSk7XFxuIDQ0MTpcXHRcXHRcXHRicmVhaztcXG4gNDQyOlxcdFxcbiA0NDM6XFx0XFx0ZGVmYXVsdDpcXG4gNDQ0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnlsZC1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwidW5leHBlY3RlZCByZXNwb25zZSAleFxcXFxuXFxcIixcXG4gNDQ1OlxcdFxcdFxcdFxcdHlsZC1cXHUwMDNlaXJxX2RhdGEtXFx1MDAzZWNtZCk7XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHllYWxpbmtfZG9faWRsZV90YXNrcyh5bGQpO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRpZiAoIXlsZC1cXHUwMDNlc2h1dGRvd24pIHtcXG4gNDUxOlxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBFUk0pXFxuIDQ1MzpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gNDU0OlxcdFxcdFxcdFxcdFxcdFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRzdGF0aWMgdm9pZCB1cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYilcXG4gNDYwOlxcdHtcXG4gNDYxOlxcdFxcdHN0cnVjdCB5ZWFsaW5rX2RldiAqeWxkID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbiA0NjI6XFx0XFx0aW50IHJldCA9IDAsIHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIDQ2NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ5bGQtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIiVzIC0gdXJiIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4gNDY2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbiA0Njc6XFx0XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuIDQ2ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdFxcdHN3aXRjaCAoeWxkLVxcdTAwM2VjdGxfZGF0YS1cXHUwMDNlY21kKSB7XFxuIDQ3MjpcXHRcXHRjYXNlIENNRF9LRVlQUkVTUzpcXG4gNDczOlxcdFxcdGNhc2UgQ01EX1NDQU5DT0RFOlxcbiA0NzQ6XFx0XFx0XFx0LyogYXNrIGZvciBhIHJlc3BvbnNlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE1OjU1LjM3MTc5OTcyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI5OTM1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB1cmJfY3RsX2NhbGxiYWNrYCBDb250ZXh0KipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkaWcgaW50byB0aGUgYHVyYl9jdGxfY2FsbGJhY2tgIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2AgY29udGV4dC4gV2UncmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBhIFVTQiBDb250cm9sIFRyYW5zZmVyLCBvciBsaWtlbHkgYSBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjYWxsYmFjayBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gV2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZW5kcG9pbnQsIGEgcGFydGljdWxhciBVU0IgY29tbWFuZCwgb3Igc29tZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gS25vd2luZyB0aGUgZGV2aWNlIChZZWFsaW5rKSBhbmQgdGhlIFwibWlzY1wiIGNhdGVnb3JpemF0aW9uIHN1Z2dlc3RzIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgbm9uLXN0YW5kYXJkLCBwZXJoYXBzIHZlbmRvci1zcGVjaWZpYywgY29udHJvbCBtZXNzYWdlcyBmb3IgYSBkZXZpY2UgbGlrZSBhIHBob25lLCBvciBwb3RlbnRpYWxseSBzcGVjaWFsaXplZCBwZXJpcGhlcmFsIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZSBjYWxsYmFjayBpbnRlcmFjdHMgd2l0aC4gV2hhdCdzIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjaywgYW5kIGhvdyBpcyBpdCB1c2VkPyBJJ20gbG9va2luZyBmb3IgcG9pbnRlcnMgdG8gZGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZXMsIHBlcmhhcHMgc29tZSBraW5kIG9mIHN0YXRlIG1hY2hpbmUgdmFyaWFibGVzLCBvciBwb3NzaWJseSBldmVudCBxdWV1ZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGJlY2F1c2UgYSBmYWlsZWQgVVJCIGNhbGxiYWNrIGNhbiBoYXZlIHNldmVyZSBpbXBsaWNhdGlvbnMgZm9yIGRldmljZSBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsbHkgbG9jay11cCB0aGUgZGV2aWNlLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBkYXRhIGludGVycHJldGF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgY2xvc2VseSwgYXMgdGhlc2UgYXJlIG9mdGVuIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBhbmQgbG9naWMgZXJyb3JzIGFyZSBpbnRyb2R1Y2VkLlxuXG5NeSBnb2FsIGlzIHRvIHRob3JvdWdobHkgY29tcHJlaGVuZCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciwgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGJ1ZyBmaXhlcywgb3IgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgYHVyYl9jdGxfY2FsbGJhY2tgIGlzIGludGVncmF0ZWQgaW50byB0aGUgWWVhbGluayBkZXZpY2UncyBmdW5jdGlvbmFsaXR5LCBzbyBJIGNhbiBwcm92aWRlIG15IGluc2lnaHRzIHRvIHRoZSBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNTo1OC4yMDE3MzkzMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcbiA0NzE6XFx0XFx0c3dpdGNoICh5bGQtXFx1MDAzZWN0bF9kYXRhLVxcdTAwM2VjbWQpIHtcXG4gNDcyOlxcdFxcdGNhc2UgQ01EX0tFWVBSRVNTOlxcbiA0NzM6XFx0XFx0Y2FzZSBDTURfU0NBTkNPREU6XFxuIDQ3NDpcXHRcXHRcXHQvKiBhc2sgZm9yIGEgcmVzcG9uc2UgKi9cXG4gNDc1OlxcdFxcdFxcdGlmICgheWxkLVxcdTAwM2VzaHV0ZG93bilcXG4gNDc2OlxcdFxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2lycSwgR0ZQX0FUT01JQyk7XFxuIDQ3NzpcXHRcXHRcXHRicmVhaztcXG4gNDc4OlxcdFxcdGRlZmF1bHQ6XFxuIDQ3OTpcXHRcXHRcXHQvKiBzZW5kIG5ldyBjb21tYW5kICovXFxuIDQ4MDpcXHRcXHRcXHR5ZWFsaW5rX2RvX2lkbGVfdGFza3MoeWxkKTtcXG4gNDgxOlxcdFxcdFxcdGlmICgheWxkLVxcdTAwM2VzaHV0ZG93bilcXG4gNDgyOlxcdFxcdFxcdFxcdHJldCA9IHVzYl9zdWJtaXRfdXJiKHlsZC1cXHUwMDNldXJiX2N0bCwgR0ZQX0FUT01JQyk7XFxuIDQ4MzpcXHRcXHRcXHRicmVhaztcXG4gNDg0OlxcdFxcdH1cXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVQRVJNKVxcbiA0ODc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2eWxkLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxcXFxuXFxcIixcXG4gNDg4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCByZXQpO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA0OTI6XFx0ICogaW5wdXQgZXZlbnQgaW50ZXJmYWNlXFxuIDQ5MzpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiA0OTQ6XFx0XFxuIDQ5NTpcXHQvKiBUT0RPIHNob3VsZCB3ZSBpc3N1ZSBhIHJpbmd0b25lIG9uIGEgU05EX0JFTEwgZXZlbnQ/XFxuIDQ5NjpcXHRzdGF0aWMgaW50IGlucHV0X2V2KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsXFxuIDQ5NzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKVxcbiA0OTg6XFx0e1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHRpZiAodHlwZSAhPSBFVl9TTkQpXFxuIDUwMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0c3dpdGNoIChjb2RlKSB7XFxuIDUwNDpcXHRcXHRjYXNlIFNORF9CRUxMOlxcbiA1MDU6XFx0XFx0Y2FzZSBTTkRfVE9ORTpcXG4gNTA2OlxcdFxcdFxcdGJyZWFrO1xcbiA1MDc6XFx0XFx0ZGVmYXVsdDpcXG4gNTA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNTo1OC4yMDE4NzI5MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODIwNjkzNjc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVU0IgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgWWVhbGluayBVU0IgZHJpdmVyIHJlbGF0ZWQgdG8gVVJCIChVU0IgUmVxdWVzdCBCbG9jaykgaGFuZGxpbmcuIFByZXZpb3VzbHksIGV2ZW4gaWYgYSBVUkIgcmV0dXJuZWQgYSBub24temVybyBzdGF0dXMgY29kZSwgaW5kaWNhdGluZyBhbiBlcnJvciBsaWtlIGEgZGlzY29ubmVjdCBvciBmYXRhbCBlcnJvciwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGtlcHQgY2h1Z2dpbmcgYWxvbmcuIFRoZSBjb2RlIHdvdWxkIGJsaXRoZWx5IGNvbnRpbnVlIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBgdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcmAgKGxpa2UgYGlycV9kYXRhYCksIHBvdGVudGlhbGx5IHJlLXN1Ym1pdHRpbmcgdGhlIFVSQiB3aXRoIHN0YWxlIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgY29kZSB3YXMgY2hlY2tpbmcgYHlsZC1cdTAwM2VpcnFfZGF0YS1cdTAwM2VjbWRgIG9yIGB5bGQtXHUwMDNlY3RsX2RhdGEtXHUwMDNlY21kYCBhbmQgY2FsbGluZyBgeWVhbGlua19kb19pZGxlX3Rhc2tzYCByZWdhcmRsZXNzIG9mIHRoZSBlcnJvci4gVGhpcyBpcyBhIHJlZCBmbGFnLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBpc19mYXRhbF9lcnJvcihzdGF0dXMpYC4gTm93LCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLCB0aGUgY2FsbGJhY2sgKmltbWVkaWF0ZWx5KiByZXR1cm5zLiBObyBmdXJ0aGVyIHByb2Nlc3NpbmcsIG5vIHJlc3VibWlzc2lvbiwgcGVyaW9kLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBwcmV2ZW50IHRoZSBpc3N1ZXMgSSd2ZSBvZnRlbiBzZWVuIGluIG90aGVyIHNpbWlsYXIgZHJpdmVycy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyBTbyBJJ20gcnVubmluZyBkb3duIHRoZSBsaXN0LlxuXG4qICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIHRoYXQncyBnb29kLlxuKiAgIFRoZSBsb2dpYyBpdHNlbGYgcmVsaWVzIG9uIGB1cmItXHUwMDNlc3RhdHVzYCwgd2hpY2ggaXMgc2V0IGJ5IHRoZSBVU0IgY29yZS4gVGhlbiBpdCB1c2VzIHRoZSByZXN1bHQgaW4gYGlzX2ZhdGFsX2Vycm9yKClgLiBTZWVtcyBzYWZlLCBhcyBJIHJlY2FsbCBob3cgdGhlIFVTQiBjb3JlIHdvcmtzLlxuKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHBhdGNoIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuXG4qICAgVGhpcyBhbHNvIHByZXZlbnRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFjdHVhbGx5LCBieSByZXR1cm5pbmcgZWFybHksIHRoZSBwYXRjaCAqcHJldmVudHMqIHJlYWRpbmcgZnJvbSB0aGUgYnVmZmVyIHdoZW4gaXQgbWlnaHQgY29udGFpbiBzdGFsZSwgaW52YWxpZCwgb3IgZXZlbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyBhIGdvb2QgdGhpbmchXG5cblVsdGltYXRlbHksIHRoaXMgYXBwZWFycyB0byBiZSBhIGRlZmVuc2l2ZSBwYXRjaCwgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZS4gSXQgaXMgbGlrZWx5IGRlc2lnbmVkIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIGdldHRpbmcgaW50byBhbiBpbmZpbml0ZSBsb29wIG9mIFVSQiByZXN1Ym1pc3Npb24gb3IgcmVhZGluZyBmcm9tIGludmFsaWQgbWVtb3J5IGFmdGVyIGEgZGV2aWNlIGRpc2Nvbm5lY3Qgb3Igc2VyaW91cyBVU0IgZXJyb3IuIEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBhIGNsYXNzaWMgcHJvYmxlbSBJJ3ZlIHNlZW4gaW4gdGhlIHBhc3QgLSBpbmZpbml0ZSBsb29wIG9mIHVyYiBzdWJtaXNzaW9uIG9uIGRpc2Nvbm5lY3QsIG9yIHVzZS1hZnRlci1mcmVlLCBvciBgV0FSTl9PTmAgaW4gdGhlIFVTQiBjb3JlIHdoZW4gcmVzdWJtaXR0aW5nIGEgZGVhZCBVUkIuIFNvIEknbGwgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5LCBhbmQgdGhlIHN1cnJvdW5kaW5nIFVTQiBkcml2ZXIgY29kZSBmb3IgdGhlc2UgZXJyb3IgcGF0dGVybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjowNi40MDg4MTI5NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY4NjQ3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfZmF0YWxfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz0zMDc9c3RhdGljIGludCB5ZWFsaW5rX2RvX2lkbGVfdGFza3Moc3RydWN0IHllYWxpbmtfZGV2ICp5bGQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQwMi0gKi9cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQwMzpzdGF0aWMgYm9vbCBpc19mYXRhbF9lcnJvcihpbnQgc3RhdHVzKVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMtNDA0LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmM9NDE4PXN0YXRpYyB2b2lkIHVyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjUtXFx0XFx0XFx0X19mdW5jX18sIHN0YXR1cyk7XFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYzo0MjY6XFx0XFx0aWYgKGlzX2ZhdGFsX2Vycm9yKHN0YXR1cykpXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYy00MjctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYz00NTk9c3RhdGljIHZvaWQgdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2Ni1cXHRcXHRcXHRfX2Z1bmNfXywgc3RhdHVzKTtcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jOjQ2NzpcXHRcXHRpZiAoaXNfZmF0YWxfZXJyb3Ioc3RhdHVzKSlcXG5kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jLTQ2OC1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjE2OjA3Ljk1NTY4MjExN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTI0NDk1NzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgWWVhbGluayBEcml2ZXIgQ29kZSAtIERpdmluZyBpbnRvIEdpdCBMb2cqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBZZWFsaW5rIGRyaXZlcidzIHN0cnVjdHVyZSBhbmQgYW55IGNvbW1vbiBjb2RpbmcgcGF0dGVybnMgd2l0aGluIHRoaXMgZHJpdmVyIGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgbGlrZSBpdC4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGluaXRpYWxseSBpcyB0byBjaGVjayB0aGUgYGdpdCBsb2dgIG9mIGB5ZWFsaW5rLmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBsb2cgd2lsbCBpbGx1bWluYXRlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvZGUsIGtleSBjb21taXRzLCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjZXJ0YWluIGRlc2lnbiBjaG9pY2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcmVjdXJyaW5nIGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBhZGRyZXNzZWQgb3ZlciB0aW1lLiBFeGFtaW5pbmcgdGhlIGNvbW1pdHMgcmVsYXRlZCB0byBvdGhlciBkcml2ZXJzIGluIHRoaXMgYXJlYSwgdG9vLCB3b3VsZCBiZSBoZWxwZnVsLiBDb21wYXJpbmcgdGhlIGFwcHJvYWNoZXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBiZXN0IHByYWN0aWNlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgb3duIHdvcmsgb24gc2ltaWxhciBkcml2ZXJzLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaWRlYSBvZiBob3cgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjozMy4yMDA2NDI5NjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYzMzQ2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLUVOT0VOVC4qLUVDT05OUkVTRVQuKi1FU0hVVERPV05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYz0yOTg9c3RhdGljIHZvaWQgdWFzX3N0YXRfY21wbHQoc3RydWN0IHVyYiAqdXJiKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYy0zMTItXFx0aWYgKHN0YXR1cykge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmM6MzEzOlxcdFxcdGlmIChzdGF0dXMgIT0gLUVOT0VOVCBcXHUwMDI2XFx1MDAyNiBzdGF0dXMgIT0gLUVDT05OUkVTRVQgXFx1MDAyNlxcdTAwMjYgc3RhdHVzICE9IC1FU0hVVERPV04pXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYy0zMTQtXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2dXJiLVxcdTAwM2VkZXYtXFx1MDAzZWRldiwgXFxcInN0YXQgdXJiOiBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jPTM5OD1zdGF0aWMgdm9pZCB1YXNfZGF0YV9jbXBsdChzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jLTQyNi1cXHRpZiAoc3RhdHVzKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYzo0Mjc6XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PRU5UIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSAtRUNPTk5SRVNFVCBcXHUwMDI2XFx1MDAyNiBzdGF0dXMgIT0gLUVTSFVURE9XTilcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jLTQyOC1cXHRcXHRcXHR1YXNfbG9nX2NtZF9zdGF0ZShjbW5kLCBcXFwiZGF0YSBjbXBsdCBlcnJcXFwiLCBzdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOToxNjozNC4zNTY5ODMwNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODI0ODA4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVUkIgQ29tcGxldGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVhbGluZyB3aXRoIHRoZSBzdGFuZGFyZCBVU0IgZHJpdmVyIGJlaGF2aW9yIGFyb3VuZCBVUkIgY29tcGxldGlvbiBzdGF0dXNlcyBsaWtlIGAtRU5PRU5UYCwgYC1FQ09OTlJFU0VUYCwgYW5kIGAtRVNIVVRET1dOYCB3aGVuIGFuIFVSQiBpcyB1bmxpbmtlZCBvciB0aGUgZGV2aWNlIGdldHMgZGlzY29ubmVjdGVkLiBXZSBhbGwga25vdyB0aGF0IHJlc3VibWl0dGluZyBpbiB0aGVzZSBzY2VuYXJpb3MgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIOKAkyByZXN1Ym1pc3Npb24gbG9vcHMgb3IgVUFGcy4gU28sIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGlmIEknbSB1bmRlcnN0YW5kaW5nIGNvcnJlY3RseSwgaXMgYSBjaGVjayB3aXRoaW4gdGhlIGB1cmJfaXJxX2NhbGxiYWNrYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2tgIGZ1bmN0aW9uczogYGlzX2ZhdGFsX2Vycm9yKHN0YXR1cylgLiBUaGlzIGlzIG1lYW50IHRvIHByZXZlbnQgZnVydGhlciBhY3Rpb24gb24gYW4gVVJCLCBvciBhdHRlbXB0aW5nIHRvIHJlc3VibWl0IGl0LCBpZiBhIGNyaXRpY2FsIFVTQiBlcnJvciwgbGlrZSBhIGRldmljZSBkaXNjb25uZWN0LCBoYXMgaGFwcGVuZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHNwZWNpZmljYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgRG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIGJ1ZmZlcnMgdW5pbml0aWFsaXplZD8gTm8uIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG4qICAgRG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2U/IE5vcGUuXG4qICAgSXMgaXQgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vIGFnYWluLlxuKiAgIERvZXMgaXQgYWZmZWN0IGJvdW5kcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBTdGlsbCBuby5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgb3VyIHdvcmsgYW5kIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZy4gS0FTQU4gaGFuZGxlcyBtZW1vcnkgY29ycnVwdGlvbiwgVUFGcywgYW5kIG91dC1vZi1ib3VuZHMsIHdoaWxlIEtNU0FOIHdvdWxkIGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBqdXN0IGFkZHJlc3NlcyBjb250cm9sIGZsb3cgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLCBwcmV2ZW50aW5nIHByb2JsZW1zIGxpa2UgaW5maW5pdGUgcmVzdWJtaXNzaW9ucyBvciBVQUYgd2FybmluZ3MuIFRoZXJlIGlzIHplcm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiwgcmVhZCBvciBsZWFrIHRvIHVzZXJzcGFjZSBhbmQgd2UgYXJlIHNvbGVseSBtYW5hZ2luZyB0aGUgVVJCIGNvbXBsZXRpb24gcHJvY2VzcyBkdXJpbmcgYSBmYWlsdXJlIHRvIHByZXZlbnQgdW5pbnRlbmRlZCBjb2RlIGV4ZWN1dGlvbiBpbiBhIGZhaWx1cmUgY29uZGl0aW9uLiBUaGVyZWZvcmUsIEtNU0FOIGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkuIFN0YW5kYXJkIEtBU0FOL3N5emthbGxlciB0ZXN0aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB2ZXJpZmljYXRpb24uXG5cbk9rYXksIEknbSBjb25maWRlbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyMiwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MTY6NDIuNjA1MDY4MDkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIGBpc19mYXRhbF9lcnJvcigpYCBjaGVjayBpbiBgdXJiX2lycV9jYWxsYmFjaygpYCBhbmQgYHVyYl9jdGxfY2FsbGJhY2soKWAgd2l0aGluIHRoZSBZZWFsaW5rIFVTQiBWb0lQIGRyaXZlciAoYGRyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmNgKS4gV2hlbiBhbiBVUkIgY29tcGxldGVzIHdpdGggYSBmYXRhbCBlcnJvciBzdGF0dXMgKHN1Y2ggYXMgLUVOT0VOVCwgLUVDT05OUkVTRVQsIC1FU0hVVERPV04sIC1FUFJPVE8sIC1FUElQRSwgb3IgLUVJTFNFUSwgdHlwaWNhbGx5IG9jY3VycmluZyBvbiBkZXZpY2UgZGlzY29ubmVjdCBvciBVUkIgdW5saW5raW5nKSwgdGhlIGNhbGxiYWNrIG5vdyByZXR1cm5zIGVhcmx5IGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBwcm9jZXNzIHRyYW5zZmVyIGRhdGEgYW5kIHJlc3VibWl0IHRoZSBVUkIuXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29udHJvbCBmbG93IG9uIFVTQiBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IGluZmluaXRlIFVSQiByZXN1Ym1pc3Npb25zIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdXBvbiBkZXZpY2UgdGVhcmRvd24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBmdWxseSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYGlzX2ZhdGFsX2Vycm9yKClgIGNoZWNrIGluIGB1cmJfaXJxX2NhbGxiYWNrKClgIGFuZCBgdXJiX2N0bF9jYWxsYmFjaygpYCB3aXRoaW4gdGhlIFllYWxpbmsgVVNCIFZvSVAgZHJpdmVyIChgZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuY2ApLiBXaGVuIGFuIFVSQiBjb21wbGV0ZXMgd2l0aCBhIGZhdGFsIGVycm9yIHN0YXR1cyAoc3VjaCBhcyAtRU5PRU5ULCAtRUNPTk5SRVNFVCwgLUVTSFVURE9XTiwgLUVQUk9UTywgLUVQSVBFLCBvciAtRUlMU0VRLCB0eXBpY2FsbHkgb2NjdXJyaW5nIG9uIGRldmljZSBkaXNjb25uZWN0IG9yIFVSQiB1bmxpbmtpbmcpLCB0aGUgY2FsbGJhY2sgbm93IHJldHVybnMgZWFybHkgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIHRvIHByb2Nlc3MgdHJhbnNmZXIgZGF0YSBhbmQgcmVzdWJtaXQgdGhlIFVSQi5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBjb250cm9sIGZsb3cgb24gVVNCIGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgaW5maW5pdGUgVVJCIHJlc3VibWlzc2lvbnMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB1cG9uIGRldmljZSB0ZWFyZG93bi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkpgtf[1] Phase: Succeeded StartedAt: 2026-09-14 09:16:54 +0000 UTC FinishedAt: 2026-09-14 09:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 09:16:54 +0000 UTC FinishedAt: 2026-09-14 09:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2] Phase: Running StartedAt: 2026-09-14 09:16:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-14 09:16:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 09:16:55 +0000 UTC FinishedAt: 2026-09-14 09:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 09:16:55 +0000 UTC FinishedAt: 2026-09-14 09:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkpgtf/series-workflowkpgtf-convert-artifact-1665016327/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 09:17:07 +0000 UTC FinishedAt: 2026-09-14 09:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 09:17:07 +0000 UTC FinishedAt: 2026-09-14 09:36:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7e5e4f6e-6abf-47a4-b970-5d7d4e8d29a9,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-workflowkpgtf/series-workflowkpgtf-convert-artifact-1665016327/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": "459f8e7e-f96e-437a-aa39-7c9e4a9c211d", "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-workflowkpgtf/series-workflowkpgtf-build-action-724529309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:17:07 +0000 UTC FinishedAt: 2026-09-14 09:36:17 +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:*7e5e4f6e-6abf-47a4-b970-5d7d4e8d29a9,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-workflowkpgtf/series-workflowkpgtf-convert-artifact-1665016327/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": "459f8e7e-f96e-437a-aa39-7c9e4a9c211d", "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-workflowkpgtf/series-workflowkpgtf-build-action-724529309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 09:36:27 +0000 UTC FinishedAt: 2026-09-14 09:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 09:36:27 +0000 UTC FinishedAt: 2026-09-14 09:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 09:36:27 +0000 UTC FinishedAt: 2026-09-14 09:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 09:36:27 +0000 UTC FinishedAt: 2026-09-14 09:36:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkpgtf/series-workflowkpgtf-convert-artifact-3676490806/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 09:36:39 +0000 UTC FinishedAt: 2026-09-14 09:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 09:36:39 +0000 UTC FinishedAt: 2026-09-14 09:38:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*459f8e7e-f96e-437a-aa39-7c9e4a9c211d,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-workflowkpgtf/series-workflowkpgtf-build-action-724529309/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-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 09:38:45 +0000 UTC FinishedAt: 2026-09-14 09:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:38:45 +0000 UTC FinishedAt: 2026-09-14 09:38:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 09:38:45 +0000 UTC FinishedAt: 2026-09-14 09:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 09:38:45 +0000 UTC FinishedAt: 2026-09-14 09:57:24 +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:*7e5e4f6e-6abf-47a4-b970-5d7d4e8d29a9,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-workflowkpgtf/series-workflowkpgtf-convert-artifact-3676490806/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": "55c55450-ec69-492c-9f2d-531c72bc7b84", "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-workflowkpgtf/series-workflowkpgtf-build-action-1025184058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:38:45 +0000 UTC FinishedAt: 2026-09-14 09:57:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7e5e4f6e-6abf-47a4-b970-5d7d4e8d29a9,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-workflowkpgtf/series-workflowkpgtf-convert-artifact-3676490806/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": "55c55450-ec69-492c-9f2d-531c72bc7b84", "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-workflowkpgtf/series-workflowkpgtf-build-action-1025184058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 09:57:24 +0000 UTC FinishedAt: 2026-09-14 09:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 09:57:24 +0000 UTC FinishedAt: 2026-09-14 09:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 09:57:24 +0000 UTC FinishedAt: 2026-09-14 09:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 09:57:24 +0000 UTC FinishedAt: 2026-09-14 09:59:18 +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:*55c55450-ec69-492c-9f2d-531c72bc7b84,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-workflowkpgtf/series-workflowkpgtf-build-action-1025184058/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-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"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:*459f8e7e-f96e-437a-aa39-7c9e4a9c211d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55c55450-ec69-492c-9f2d-531c72bc7b84,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-workflowkpgtf/series-workflowkpgtf-build-action-724529309/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-workflowkpgtf/series-workflowkpgtf-build-action-1025184058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 2026-09-14 09:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 2026-09-14 09:59:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"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-workflowkpgtf/series-workflowkpgtf-convert-artifact-2506064987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 2026-09-14 09:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 2026-09-14 09:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:59:28 +0000 UTC FinishedAt: 2026-09-14 09:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-09-14 09:59:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpgtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"1590cf0329716306e948a8fc29f1d3ee87d3989f","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["urb_irq_callback","urb_ctl_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INPUT_YEALINK","INPUT_MISC","INPUT","USB"],"series_id":"1385bfd3-01fc-4610-9501-d44b5b27e43d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-09-14 09:59:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*459f8e7e-f96e-437a-aa39-7c9e4a9c211d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55c55450-ec69-492c-9f2d-531c72bc7b84,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-workflowkpgtf/series-workflowkpgtf-build-action-724529309/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-workflowkpgtf/series-workflowkpgtf-build-action-1025184058/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-workflowkpgtf/series-workflowkpgtf-convert-artifact-2506064987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil