Name: series-workflow6k4np Phase: Succeeded StartedAt: 2026-08-17 14:24:29 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[0] Phase: Succeeded StartedAt: 2026-08-17 14:24:29 +0000 UTC FinishedAt: 2026-08-17 14:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 14:24:29 +0000 UTC FinishedAt: 2026-08-17 14:36:52 +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": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIDEO_USBTV", "MEDIA_SUPPORT", "MEDIA_USB_SUPPORT", "MEDIA_CAMERA_SUPPORT", "VIDEO_DEV", "SND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIDEO_USBTV", "MEDIA_SUPPORT", "MEDIA_USB_SUPPORT", "MEDIA_CAMERA_SUPPORT", "VIDEO_DEV", "SND" ], "series_id": "de91101a-9734-4d85-86a2-250af45c3f52" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usbtv_disconnect", "usbtv_probe", "usbtv_s_std", "usbtv_s_input", "usbtv_s_ctrl", "usbtv_querycap", "usbtv_start_streaming", "usbtv_stop_streaming", "usbtv_buf_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgYnkgbW92aW5nIHRoZSBgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBVU0JUViBkcml2ZXIgYnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG5pbmRleCA2YzRmYWNmNGY0MWE3Li5iMzNiNTRmZGJkNjIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbkBAIC0xMzYsOCAmIzQzOzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbiBcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xuIFxuLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4tXG4gXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcbiBcdCAgIGRvbmUgdXNpbmcgaXQgKi9cbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcbmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5AQCAtOTY4LDUgJiM0Mzs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbiBcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZ1c2J0di1cdTAwM2V2ZGV2KTtcbiBcdHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbiYjNDM7XHR1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbiYjNDM7XG4gXHR2NGwyX2RldmljZV9wdXQoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJREVPX1VTQlRWJiMzNDssCiAgICAmIzM0O01FRElBX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7TUVESUFfVVNCX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7TUVESUFfQ0FNRVJBX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7VklERU9fREVWJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYnR2X2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dXNidHZfcHJvYmUmIzM0OywKICAgICYjMzQ7dXNidHZfc19zdGQmIzM0OywKICAgICYjMzQ7dXNidHZfc19pbnB1dCYjMzQ7LAogICAgJiMzNDt1c2J0dl9zX2N0cmwmIzM0OywKICAgICYjMzQ7dXNidHZfcXVlcnljYXAmIzM0OywKICAgICYjMzQ7dXNidHZfc3RhcnRfc3RyZWFtaW5nJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0b3Bfc3RyZWFtaW5nJiMzNDssCiAgICAmIzM0O3VzYnR2X2J1Zl9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBVU0JUViBkcml2ZXIgYnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMKaW5kZXggNmM0ZmFjZjRmNDFhNy4uYjMzYjU0ZmRiZDYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYwpAQCAtMTM2LDggJiM0MzsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCXVzYnR2X2F1ZGlvX2ZyZWUodXNidHYpOwogCXVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpOwogCi0JdXNidHYtJmd0O3VkZXYgPSBOVUxMOwotCiAJLyogdGhlIHVzYnR2IHN0cnVjdHVyZSB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdjRsMiB3aWxsIGJlCiAJICAgZG9uZSB1c2luZyBpdCAqLwogCXY0bDJfZGV2aWNlX3B1dCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYwppbmRleCBkZTAzMjgxMDBhNjBkLi5lZjA2NmRmNzEyNDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMKQEAgLTk2OCw1ICYjNDM7OTY4LDkgQEAgdm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpCiAJdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7dXNidHYtJmd0O3ZkZXYpOwogCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmFtcDt1c2J0di0mZ3Q7djRsMl9kZXYpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTsKJiM0MzsJdXNidHYtJmd0O3VkZXYgPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTsKJiM0MzsKIAl2NGwyX2RldmljZV9wdXQoJmFtcDt1c2J0di0mZ3Q7djRsMl9kZXYpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBEcml2ZXIgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYHVzYnR2LWNvcmUuY2AgYW5kIGB1c2J0di12aWRlby5jYCwgc3BlY2lmaWNhbGx5IG1vdmluZyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMO2AgZnJvbSBgdXNidHZfZGlzY29ubmVjdGAgdG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCB3cmFwcGluZyBpdCBpbiBhIG11dGV4LiBUaGF0IHNjcmVhbXMgJiMzNDt1c2UtYWZ0ZXItZnJlZSYjMzQ7IG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggdG8gbWUg4oCTIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyIGNvZGUuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgJiMzNDt0ZWFyZG93biBjYWxsYmFja3MmIzM0OyBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4gSG9sZCBvbiwgYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGEgVVNCIGRyaXZlciBkaXNjb25uZWN0IGNhbGxiYWNrLi4uIHRoYXQmIzM5O3Mgc2ltaWxhciEgSXTigJlzIHRyaWdnZXJlZCB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIHVucGx1Z2dlZCBvciB0aGUgZHJpdmVyIGlzIHVuYm91bmQsIGxpa2UgYSBgLnJlbW92ZWAgZnVuY3Rpb24gZm9yIFBDSS4KClRoZSB0cmljayBub3cgaXMgdGhhdCBgdXNidHZfdmlkZW9fZnJlZWAgaXMgY2FsbGVkICpmcm9tKiBgdXNidHZfZGlzY29ubmVjdGAuIFNvLCBsZXQmIzM5O3MgZGlnIGludG8gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCBgdXNidHZfdmlkZW9fZnJlZWAgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNidHZfZGlzY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTI2LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjEyNzpzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyOC17XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTE1Nj1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidHZfdXNiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTU5LVx0LnByb2JlID0gdXNidHZfcHJvYmUsXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTYwOlx0LmRpc2Nvbm5lY3QgPSB1c2J0dl9kaXNjb25uZWN0LFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTE2MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGlzc2VjdGluZyB0aGUgVVNCIFRWIERyaXZlciBEaXNjb25uZWN0KioKClJpZ2h0LCBzbyBgdXNidHZfZGlzY29ubmVjdGAgaXMgZGVmaW5pdGVseSB0aGUgYC5kaXNjb25uZWN0YCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIGB1c2JfZHJpdmVyYCBzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBmb2N1c2VkIHNvbGVseSBvbiB0aGUgdGVhcmRvd24gcHJvY2VzcyDigJMgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB0d2Vha2luZyB0aGUgbG9naWMgd2l0aGluIGB1c2J0dl9kaXNjb25uZWN0YCBpdHNlbGYgYW5kLCBpbXBvcnRhbnRseSwgdGhlIGZ1bmN0aW9uIGB1c2J0dl92aWRlb19mcmVlYCB3aGljaCBgdXNidHZfZGlzY29ubmVjdGAgY2FsbHMuCgpOb3cgSSBuZWVkIHRvIHBhdXNlIGFuZCBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJ4oCZbSBzdGFydGluZyB0byBnZXQgdGhhdCBuaWdnbGluZyBmZWVsaW5nLiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBgdXNidHZfdmlkZW9fZnJlZWAgYWN0dWFsbHkgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGA/IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQuIElmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgdGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyB0aGFuIHRoZSBwYXRjaCBpbml0aWFsbHkgc3VnZ2VzdHMsIGFuZCB0aGF04oCZcyBnb2luZyB0byBpbXBhY3QgbXkgcmV2aWV3IG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNidHZfdmlkZW9fZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE3LVx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTE4Olx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE5LVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz0xMjc9c3RhdGljIHZvaWQgdXNidHZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM2LVx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTM3Olx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM4LVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9ODg0PWludCB1c2J0dl92aWRlb19pbml0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NjUtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk2Njp2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTY3LXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oPTEzMj1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg6MTMzOnZvaWQgdXNidHZfdmlkZW9fZnJlZShzdHJ1Y3QgdXNidHYgKnVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgdXNidHYgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGZyb20gYHVzYnR2X3Byb2JlYCAoc3BlY2lmaWNhbGx5IG9uIHRoZSBlcnJvciBwYXRoKSBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0PyYjMzQ7IFRoZSBwcm9tcHQgSSYjMzk7bSBmb2xsb3dpbmcgZGlyZWN0cyBtZSB0byBza2lwIHBhdGNoZXMgaWYgdGhleSBwcmltYXJpbHkgaW52b2x2ZSB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAgdGhhdCBhcmUgKm9ubHkqIGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kcy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIHRoaXMgaXMgYSAqVVNCKiBkcml2ZXIsIG5vdCBQQ0khIFRoZSBiZWF1dHkgb2YgVVNCIGlzIHRoZSBob3QtdW5wbHVnIGNhcGFiaWxpdGllcyBhcmUgZWFzaWx5IGV4cGxvaXRlZCB1c2luZyBzeXprYWxsZXIgYW5kIGl0cyBgZHVtbXlfaGNkYCwgYW5kIHRoZSBgc3l6X3VzYl9jb25uZWN0YC9gc3l6X3VzYl9kaXNjb25uZWN0YCBzeXN0ZW0gY2FsbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0RvZXMgdGhlIHByb21wdCYjMzk7cyByZWZlcmVuY2UgdG8gJiMzOTtQQ0kgaG90LXVucGx1ZyYjMzk7ICppbXBsaWNpdGx5KiBleGNsdWRlIFVTQiBob3QtdW5wbHVnPyYjMzQ7IAoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgd29yZGluZzogJiMzNDtEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsgIEFoYSEgVGhlIHByb21wdCBpcyBzcGVjaWZpYyBhYm91dCAmIzM0O1BDSSBob3QtdW5wbHVnJiMzNDsuIEdpdmVuIHRoZSBleHRlbnNpdmUgVVNCIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXIsIGFuZCBnaXZlbiB0aGF0IFVTQiBob3QtdW5wbHVnIGlzIGV4cGxpY2l0bHkgZXhwbG9pdGVkIGJ5IHN5emthbGxlciB2aWEgbWVjaGFuaXNtcyBsaWtlIHZoY2kvZHVtbXlfaGNkLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkICpkZWZpbml0ZWx5KiBmdXp6aW5nIHRoaXMuCgpUaGVyZSYjMzk7cyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGU6IGB1c2J0dl92aWRlb19mcmVlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZSBgdXNidHZfcHJvYmVgIGVycm9yIHBhdGguIFNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29tcGxldGUgYHVzYnR2X3Byb2JlYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2J0dl92aWRlb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz02Nz1zdGF0aWMgaW50IHVzYnR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTctXHQvKiB0aGlzIHdpbGwgdW5kbyB0aGUgdjRsMl9kZXZpY2VfZ2V0KCkgKi9cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMTg6XHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTktXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTEyNz1zdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzYtXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMzc6XHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdXNidHZfcHJvYmVgJiMzOTtzIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHVzYnR2X3Byb2JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIFVTQiBUViBkZXZpY2UuIEkmIzM5O20gZ29pbmcgdG8gbWFwIG91dCBlYWNoIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLCB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQsIGFuZCBob3cgdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWNvdmVyIG9yLCB1bHRpbWF0ZWx5LCBjbGVhbiB1cC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IHRvbywgaG93IGl0IHJlbGVhc2VzIGFsbG9jYXRlZCBtZW1vcnksIGhhbmRsZXMgZGV2aWNlIGRlcmVnaXN0cmF0aW9uLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNsZWFudXAgdGhhdCBhcmUgbGlrZWx5IG9yIGxlc3Mgc28uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkaWZmZXJlbnQgZXhpdCBwb2ludHMgYW5kIGVuc3VyZSB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIG9yIGhhbmRsZWQgYXMgdGhleSBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHJldCA9IHVzYnR2X3ZpZGVvX2luaXQodXNidHYpO1xuIDEwMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxMDI6XHRcdFx0Z290byB1c2J0dl92aWRlb19mYWlsO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0ID0gdXNidHZfYXVkaW9faW5pdCh1c2J0dik7XG4gMTA1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEwNjpcdFx0XHRnb3RvIHVzYnR2X2F1ZGlvX2ZhaWw7XG4gMTA3Olx0XG4gMTA4Olx0XHQvKiBmb3Igc2ltcGxpY2l0eSB3ZSBleHBsb2l0IHRoZSB2NGwyX2RldmljZSByZWZlcmVuY2UgY291bnRpbmcgKi9cbiAxMDk6XHRcdHY0bDJfZGV2aWNlX2dldChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gMTEwOlx0XG4gMTExOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0Z1c2hpY2FpIFVTQlRWMDA3IEF1ZGlvLVZpZGVvIEdyYWJiZXJcXG5cJiMzNDspO1xuIDExMjpcdFx0cmV0dXJuIDA7XG4gMTEzOlx0XG4gMTE0Olx0dXNidHZfYXVkaW9fZmFpbDpcbiAxMTU6XHRcdC8qIHdlIG11c3Qgbm90IGZyZWUgYXQgdGhpcyBwb2ludCAqL1xuIDExNjpcdFx0djRsMl9kZXZpY2VfZ2V0KFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfZGV2KTtcbiAxMTc6XHRcdC8qIHRoaXMgd2lsbCB1bmRvIHRoZSB2NGwyX2RldmljZV9nZXQoKSAqL1xuIDExODpcdFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG4gMTE5Olx0XG4gMTIwOlx0dXNidHZfdmlkZW9fZmFpbDpcbiAxMjE6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7XG4gMTIyOlx0XHRrZnJlZSh1c2J0dik7XG4gMTIzOlx0XG4gMTI0Olx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdH1cbiAxMjY6XHRcbiAxMjc6XHRzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDEyODpcdHtcbiAxMjk6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQlRWIERyaXZlciBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdXNidHZgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSB0d28gZGlzdGluY3QgcGxhY2VzOiBhbiBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgICh3aGljaCBpcyBhbHJlYWR5IGEgcmVkIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMpIGFuZCB0aGUgbW9yZSBwcmVkaWN0YWJsZSBgdXNidHZfZGlzY29ubmVjdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGB1c2J0di0mZ3Q7dWRldiA9IE5VTEw7YCBmcm9tIGp1c3QgYHVzYnR2X2Rpc2Nvbm5lY3RgIHRvIGFsc28gYmVpbmcgZXhlY3V0ZWQgd2l0aGluIGB1c2J0dl92aWRlb19mcmVlYC4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm93IGd1YXJkZWQgYnkgYG11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKWAuCgpUaGUgb2xkIGJlaGF2aW9yLCB3aXRoIGB1c2J0di0mZ3Q7dWRldiA9IE5VTEw7YCAqb25seSogd2l0aGluIGB1c2J0dl9kaXNjb25uZWN0YCwgc2VlbXMgaW5oZXJlbnRseSBwcm9ibGVtYXRpYy4gTm93LCB3aXRoIGl0IGFsc28gaW4gYHVzYnR2X3ZpZGVvX2ZyZWVgLCBpdCBpcyBhbHNvIGV4ZWN1dGVkIG9uIHRoZSBwcm9iZSBlcnJvciBwYXRoLiBUaGlzIHNpZ25hbHMgYW4gYXR0ZW1wdCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgdWRldmAgcG9pbnRlci4KCk15IGludHVpdGlvbiBzYXlzIHRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGZpeCwgbGlrZWx5IGludm9sdmluZyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IHJlc29sdmluZyBhIHJhY2UgYmV0d2VlbiBhIGRpc2Nvbm5lY3QgZXZlbnQgYW5kIHNvbWUgb3RoZXIgVjRMMiBvcGVyYXRpb24uIFRoZSBgbXV0ZXhfbG9ja2AgaGludHMgYXQgYSBWNEwyIGlvY3RsIG9yIHNpbWlsYXIgYWNjZXNzLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBpbiBhIFVTQiBkcml2ZXIsIGFuZCBzeXprYWxsZXIgaXMgKnBlcmZlY3QqIGZvciB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8uIFN5emthbGxlciBjYW4gZWFzaWx5IGZ1enogVVNCIGRldmljZXMgYW5kIFY0TDIgaW9jdGxzIGNvbmN1cnJlbnRseSwgdHJpZ2dlcmluZyB0aGlzIHJhY2UgYW5kIHBvdGVudGlhbGx5IGV4cG9zaW5nIHRoZSB1bmRlcmx5aW5nIGJ1Zy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgVVNCVFYgY29uZmlnIGlzIGNvcnJlY3QgYW5kIGdldCB0aGlzIHRoaW5nIGZ1enplZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJREVPX1VTQlRWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWc6Mjpjb25maWcgVklERU9fVVNCVFZcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSBmb3IgVklERU9fVVNCVFYqKgoKT2theSwgdGltZSB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSURFT19VU0JUVmAuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgcmVsZWFzZSwgc28gYSBtZXRpY3Vsb3VzIGNoZWNrIGlzIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkbyB3ZSBzdGFydD8mIzM0OyBQcm9iYWJseSB3aXRoIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGxpYnJhcnkgdXBkYXRlcyB0aGF0IGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucz8gSGFzIHRoZXJlIGJlZW4gYW55IHJlY2VudCB3b3JrIGluIHJlbGF0ZWQgcHJvamVjdHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IG1pZ2h0IHRvdWNoIHRoZSBVU0Igc3RhY2sgb3IgdmlkZW8gcHJvY2Vzc2luZyBwaXBlbGluZXMsIHRoYXQgY291bGQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcz8KCkkmIzM5O20gdGhpbmtpbmc6ICpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdC4qIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gd29yayBvdXR3YXJkcyB0byB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgdGhvc2UgYXJlIG9mdGVuIHRoZSBzbmVha3kgY3VscHJpdHMuIEkmIzM5O2xsIG5lZWQgdG8gbWVudGFsbHkgbWFwIHRoZSBjYWxsIGdyYXBoIHRvIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciByZXNvdXJjZSBjb250ZW50aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYFZJREVPX1VTQlRWYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIGNhcHR1cmUsIGVuY29kaW5nLCBhbmQgVVNCIGRldmljZSBoYW5kbGluZy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdmVyc2lvbiBjb21wYXRpYmlsaXR5LiBBcmUgd2UgcGVnZ2VkIHRvIHNwZWNpZmljIHZlcnNpb25zPyBBcmUgd2UgdXNpbmcgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZXMsIG9yIGFyZSB3ZSBzdHVjayBvbiBvbGRlciB2ZXJzaW9ucyB0aGF0IG1pZ2h0IGhhdmUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIGtub3duIGJ1Z3M/IEkgbmVlZCB0byByZXZpZXcgY2hhbmdlIGxvZ3MsIGlzc3VlIHRyYWNrZXJzLCBhbmQgbWF5YmUgZXZlbiBwdWxsIGRvd24gdGhlIHNvdXJjZSBjb2RlIGZvciBrZXkgZGVwZW5kZW5jaWVzIHRvIGNoZWNrIHRoZSBhY3R1YWwgY29kZS4KCipGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQqLiBJcyB0aGlzIGEgY3Jvc3MtcGxhdGZvcm0gcHJvamVjdD8gSWYgc28sIEkgbmVlZCB0byB0aGluayBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgT1Mgb3IgaGFyZHdhcmUgY29tYmluYXRpb24/IFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IGBWSURFT19VU0JUVmAgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgZXNwZWNpYWxseSB0aGUga2VybmVsLCBkaXNwbGF5IGRyaXZlcnMgYW5kIG90aGVyIGhhcmR3YXJlIHBlcmlwaGVyYWxzLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGNyZWF0ZSBhIHJvYnVzdCBkZXBlbmRlbmN5IG1hcC4gSSYjMzk7bGwgcHJvYmFibHkgYnVpbGQgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24g4oCTIG1heWJlIGEgZ3JhcGggb3IgZGlhZ3JhbSDigJMgdG8gY2xlYXJseSBjb21tdW5pY2F0ZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHRoZSB0ZWFtLiBUaGUgZW5kIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgd2UmIzM5O3JlIHVzaW5nIHRoZSByaWdodCB2ZXJzaW9ucywgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByaXNrcywgYW5kIHRoYXQgd2UgaGF2ZSBhIHBsYW4gZm9yIGRlYWxpbmcgd2l0aCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MsIGFuZCBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSURFT19VU0JUVlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFZJREVPX0RFViBcdTAwMjZcdTAwMjYgU05EXG4gICA1Olx0XHRzZWxlY3QgU05EX1BDTVxuICAgNjpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gICA3Olx0XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbXBvbmVudCBEZXBlbmRlbmN5IFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gdGhlIG5lZWQgZm9yIHRoZXNlIGNvcmUgY29tcG9uZW50czogYFZJREVPX1VTQlRWYCwgYFZJREVPX0RFVmAsIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBUaGVuLCBhIGZsYWcgd2VudCB1cC4gSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgVklERU9fREVWYCBpcyBvZnRlbiBuZXN0ZWQgd2l0aGluIGBNRURJQV9TVVBQT1JUYC4gU28sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgYFZJREVPX0RFVmAsIGp1c3QgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBgTUVESUFfU1VQUE9SVGAgZWNvc3lzdGVtLiBHb3R0YSBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhhdCB0aGUgaW5jbHVzaW9uIG9mIGBNRURJQV9TVVBQT1JUYCBtaWdodCBpbnRyb2R1Y2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSURFT19ERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL0tjb25maWc9MTU3PW1lbnUgXCYjMzQ7TWVkaWEgY29yZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE1OS1cbmRyaXZlcnMvbWVkaWEvS2NvbmZpZzoxNjA6Y29uZmlnIFZJREVPX0RFVlxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE2MS1cdHRyaXN0YXRlIFwmIzM0O1ZpZGVvNExpbnV4IGNvcmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDaGVja2luZyBWSURFT19ERVYgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgVklERU9fREVWYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBpcyB0byBsb29rIGluIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYFZJREVPX0RFVmAgc291bmRzIGxpa2UgaXQgcGVydGFpbnMgdG8gdmlkZW8gZGV2aWNlcywgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgaXMgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZGVmaW5pdGlvbiByaWdodCwgYmVmb3JlIEkgc3RhcnQgd29ya2luZyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIGlzIGxpa2VseSB0aGUgcm9vdCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBzb21lIHZpcnR1YWwgdGVzdCBkcml2ZXIuXG4gMTUxOlx0XG4gMTUyOlx0XHQgIEluIGNhc2Ugb2YgZG91YnRzLCBzYXkgTi5cbiAxNTM6XHRcdCAgU2F5IFkgd2hlbiB5b3UgaGF2ZSBhIHNvZnR3YXJlIGRlZmluZWQgcmFkaW8gZGV2aWNlLlxuIDE1NDpcdGVuZG1lbnUgIyBtZWRpYSBkZXZpY2UgdHlwZXNcbiAxNTU6XHRcbiAxNTY6XHRcbiAxNTc6XHRtZW51IFwmIzM0O01lZGlhIGNvcmUgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0dmlzaWJsZSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcbiAxNTk6XHRcbiAxNjA6XHRjb25maWcgVklERU9fREVWXG4gMTYxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaWRlbzRMaW51eCBjb3JlXCYjMzQ7XG4gMTYyOlx0XHRkZWZhdWx0IE1FRElBX0NBTUVSQV9TVVBQT1JUIHx8IE1FRElBX0FOQUxPR19UVl9TVVBQT1JUIHx8IE1FRElBX1JBRElPX1NVUFBPUlQgfHwgTUVESUFfU0RSX1NVUFBPUlQgfHwgTUVESUFfUExBVEZPUk1fU1VQUE9SVCB8fCBNRURJQV9URVNUX1NVUFBPUlRcbiAxNjM6XHRcdGRlcGVuZHMgb24gKEkyQyB8fCBJMkM9bilcbiAxNjQ6XHRcdHNlbGVjdCBSQVRJT05BTFxuIDE2NTpcdFx0c2VsZWN0IFZJREVPQlVGMl9WNEwyIGlmIFZJREVPQlVGMl9DT1JFXG4gMTY2Olx0XHRoZWxwXG4gMTY3Olx0XHQgIEVuYWJsZXMgdGhlIFY0TDIgQVBJLCB1c2VkIGJ5IGNhbWVyYXMsIGFuYWxvZyBUViwgdmlkZW8gZ3JhYmJlcnMsXG4gMTY4Olx0XHQgIHJhZGlvIGRldmljZXMgYW5kIGJ5IHNvbWUgaW5wdXQgZGV2aWNlcy5cbiAxNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uczogVklERU9cX1VTQlRWIGFuZCBNRURJQVxfU1VQUE9SVCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IHJldm9sdmVzIGFyb3VuZCB0aGUgYFZJREVPX1VTQlRWYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHNldHRpbmcgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQsIGhvbGQgb24uLi4gaXQmIzM5O3MgYWxzbyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1FRElBX1NVUFBPUlRgIGZsYWcuIEV2ZW4gdGhvdWdoIGBWSURFT19VU0JUVmAgaXMgdGhlIG1haW4gY29uZmlnLCBJIGNhbiYjMzk7dCBkaXNtaXNzIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgYE1FRElBX1NVUFBPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hhdGV2ZXIgZGVjaXNpb25zIEkgbWFrZSByZWdhcmRpbmcgYFZJREVPX1VTQlRWYCwgdGhleSBkb24mIzM5O3QgaW5hZHZlcnRlbnRseSBjb25mbGljdCBvciBsaW1pdCB0aGUgZnVuY3Rpb25hbGl0eSBlbmFibGVkIGJ5IGBNRURJQV9TVVBQT1JUYC4gVGltZSB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3b+KApiBhIG1vcmUgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgbmVlZGVkIHRvIGVuc3VyZSBmdWxsIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRURJQV9TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS9LY29uZmlnPTEwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL2NlYy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL21lZGlhL0tjb25maWctMTEtXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MTI6bWVudWNvbmZpZyBNRURJQV9TVVBQT1JUXG5kcml2ZXJzL21lZGlhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aW1lZGlhIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21lZGlhL0tjb25maWc9MjM9aWYgTUVESUFfU1VQUE9SVFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI0LVxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjI1OmNvbmZpZyBNRURJQV9TVVBQT1JUX0ZJTFRFUlxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtGaWx0ZXIgbWVkaWEgZHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFzc2Vzc2luZyBNZWRpYSBTdXBwb3J0IENhcGFiaWxpdGllcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSBoaW5nZXMgb24gcHJvcGVyIG1lZGlhIHN1cHBvcnQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBNRURJQV9VU0JfU1VQUE9SVGAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZSBmb3IgVVNCLWJhc2VkIG1lZGlhIGludGVyYWN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGFuZCBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVESUFfVVNCX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZz0zPWlmIFVTQiBcdTAwMjZcdTAwMjYgTUVESUFfU1VQUE9SVFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy00LVxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZzo1Om1lbnVjb25maWcgTUVESUFfVVNCX1NVUFBPUlRcbmRyaXZlcnMvbWVkaWEvdXNiL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWVkaWEgVVNCIEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqVVNCIE1lZGlhIERyaXZlciBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBNRURJQV9VU0JfU1VQUE9SVGAgZW5hYmxlZCBhcyB3ZWxsLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBub3QganVzdCBhc3N1bWUgaXQmIzM5O3MgYWN0aXZhdGVkLCB0aG91Z2guIExldCYjMzk7cyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGluIHRoZSBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHN1cmUgYWxsIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCBkZXBlbmRlbmNpZXMgaW4gdGhlc2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0aWYgVVNCIFx1MDAyNlx1MDAyNiBNRURJQV9TVVBQT1JUXG4gICA0Olx0XG4gICA1Olx0bWVudWNvbmZpZyBNRURJQV9VU0JfU1VQUE9SVFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtNZWRpYSBVU0IgQWRhcHRlcnNcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgRW5hYmxlIG1lZGlhIGRyaXZlcnMgZm9yIFVTQiBidXMuXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIHN1Y2ggZGV2aWNlcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0aWYgTUVESUFfVVNCX1NVUFBPUlRcbiAgMTI6XHRcbiAgMTM6XHRpZiBNRURJQV9DQU1FUkFfU1VQUE9SVFxuICAxNDpcdFx0Y29tbWVudCBcJiMzNDtXZWJjYW0gZGV2aWNlc1wmIzM0O1xuICAxNTpcdFxuICAxNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L0tjb25maWdcJiMzNDtcbiAgMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0JUViBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHVzYnR2YCByZWFsbHkgbmVzdGVkIHVuZGVyIGBNRURJQV9DQU1FUkFfU1VQUE9SVGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcy4gWWVwLCB0aGVyZSBpdCBpczogYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYHVzYnR2YCBpcyBjbGVhcmx5IGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgLiBUaW1lIHRvIGp1bXAgaW50byBgZHJpdmVycy9tZWRpYS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJyb2FkZXIgY29udGV4dC4gTmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS9LY29uZmlnPTYyPW1lbnUgXCYjMzQ7TWVkaWEgZGV2aWNlIHR5cGVzXCYjMzQ7XG4tLVxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTY2LSNcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZzo2Nzpjb25maWcgTUVESUFfQ0FNRVJBX1NVUFBPUlRcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNoZWNraW5nIGZvciBDYW1lcmEgU3VwcG9ydCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbDogaXMgY2FtZXJhIHN1cHBvcnQgZXZlbiBlbmFibGVkIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbj8gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVkaWEgZGV2aWNlcyBhcmUgZGVmaW5lZC4gU28sIGxldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIGlmIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCBleGlzdHMgYW5kIHdoYXQgaXRzIHN0YXR1cyBpcy4gVGhpcyB3aWxsIGRpY3RhdGUgd2hldGhlciBJIG5lZWQgdG8gYm90aGVyIGxvb2tpbmcgZnVydGhlciBpbnRvIGNhbWVyYS1yZWxhdGVkIGNvZGUgYXQgYWxsLCBvciBpZiB0aGlzIHdob2xlIGFyZWEgaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQgZm9yIHRoaXMgYnVpbGQuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRoYXQgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdCAgSWYgdW5zdXJlIHNheSBZLlxuICA2MTpcdFxuICA2MjpcdG1lbnUgXCYjMzQ7TWVkaWEgZGV2aWNlIHR5cGVzXCYjMzQ7XG4gIDYzOlx0XG4gIDY0Olx0I1xuICA2NTpcdCMgTXVsdGltZWRpYSBzdXBwb3J0IC0gYXV0b21hdGljYWxseSBlbmFibGUgVjRMMiBhbmQgRFZCIGNvcmVcbiAgNjY6XHQjXG4gIDY3Olx0Y29uZmlnIE1FRElBX0NBTUVSQV9TVVBQT1JUXG4gIDY4Olx0XHRib29sXG4gIDY5Olx0XHRwcm9tcHQgXCYjMzQ7Q2FtZXJhcyBhbmQgdmlkZW8gZ3JhYmJlcnNcJiMzNDsgaWYgTUVESUFfU1VQUE9SVF9GSUxURVJcbiAgNzA6XHRcdGRlZmF1bHQgeSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHdlYmNhbXMgYW5kIHZpZGVvIGdyYWJiZXJzLlxuICA3MzpcdFxuICA3NDpcdFx0ICBTYXkgWSB3aGVuIHlvdSBoYXZlIGEgd2ViY2FtIG9yIGEgdmlkZW8gY2FwdHVyZSBncmFiYmVyIGJvYXJkLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVFxuICA3NzpcdFx0Ym9vbFxuICA3ODpcdFx0cHJvbXB0IFwmIzM0O0FuYWxvZyBUVlwmIzM0OyBpZiBNRURJQV9TVVBQT1JUX0ZJTFRFUlxuICA3OTpcdFx0ZGVmYXVsdCB5IGlmICFNRURJQV9TVVBQT1JUX0ZJTFRFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQlRWIFN1cHBvcnQgd2l0aGluIHRoZSBLZXJuZWwgTWVkaWEgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBhIHJlcXVpcmVtZW50LiBOb3csIGhvbGQgb24sIEkgc2VlIGBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVGAgbWVudGlvbmVkLCBhbmQgdGhhdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIFRoZSBgdXNidHZgIGRyaXZlciBpcyBkZXNjcmliZWQgYXMgJiMzNDtVU0JUVjAwNyB2aWRlbyBjYXB0dXJlIHN1cHBvcnQsJiMzNDsgYW5kIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgbG9naWNhbGx5IGZhbGxzIHVuZGVyIHRoZSBjYW1lcmEgc3VwcG9ydCB1bWJyZWxsYS4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBBaCwgaGVyZSB3ZSBnbywgbGluZSAxMyBhbmQgb253YXJkIHRlbGxzIHRoZSB0YWxlOgoKYGBgCmlmIE1FRElBX0NBTUVSQV9TVVBQT1JUCiAgICBjb21tZW50ICYjMzQ7V2ViY2FtIGRldmljZXMmIzM0OwoKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL0tjb25maWcmIzM0OwogICAgc291cmNlICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvcHdjL0tjb25maWcmIzM0OwogICAgc291cmNlICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnJiMzNDsKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy9LY29uZmlnJiMzNDsKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3pyMzY0eHgvS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9zdGt3ZWJjYW0vS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9jcGlhMi9LY29uZmlnJiMzNDsKZW5kaWYKYGBgCgpCaW5nbyEgYHVzYnR2YCBpcyBleHBsaWNpdGx5ICppbnNpZGUqIHRoYXQgYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYCBibG9jay4gU28sIHRoZXJlIGl0IGlzIOKAkyBVU0JUViBzdXBwb3J0IGlzIGluZGVlZCBjb250aW5nZW50IG9uIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBmcmFtZXdvcmsgaXMgc3RydWN0dXJlZC4gTm93IEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIG15IHRhc2ssIGtub3dpbmcgdGhhdCBkZXBlbmRlbmN5IGlzIGVzdGFibGlzaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XG4gIDExOlx0aWYgTUVESUFfVVNCX1NVUFBPUlRcbiAgMTI6XHRcbiAgMTM6XHRpZiBNRURJQV9DQU1FUkFfU1VQUE9SVFxuICAxNDpcdFx0Y29tbWVudCBcJiMzNDtXZWJjYW0gZGV2aWNlc1wmIzM0O1xuICAxNTpcdFxuICAxNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L0tjb25maWdcJiMzNDtcbiAgMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wmIzM0O1xuICAyMTpcdFxuICAyMjpcdGVuZGlmXG4gIDIzOlx0XG4gIDI0Olx0aWYgTUVESUFfQU5BTE9HX1RWX1NVUFBPUlRcbiAgMjU6XHRcdGNvbW1lbnQgXCYjMzQ7QW5hbG9nIFRWIFVTQiBkZXZpY2VzXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2dvNzAwNy9LY29uZmlnXCYjMzQ7XG4gIDI4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2hkcHZyL0tjb25maWdcJiMzNDtcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZgIGRyaXZlciBhbmQgY29uZmlybWluZyBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHdoZW4gYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkgc2VlIHRoYXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgbG9va3MgbGlrZTogYE1FRElBX1NVUFBPUlRgLCBgTUVESUFfVVNCX1NVUFBPUlRgLCBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgLCBhbmQgc3BlY2lmaWNhbGx5IGBWSURFT19VU0JUVmAuIEkgcmVjYWxsIHRoYXQgYFZJREVPX1VTQlRWYCBpdHNlbGYgZGVwZW5kcyBvbiBgVklERU9fREVWYCBhbmQgYFNORGAuIEZvcnR1bmF0ZWx5LCBgVklERU9fREVWYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgaXMsIHNvIHRoYXQmIzM5O3MgaGFuZGxlZC4gYFNORGAgaXMgdGhlIHNvdW5kIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSB2aWRlbyBkcml2ZXIuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHdoZXJlIHRoZSBwYXRjaCBpcyB0b3VjaGluZy4gSSBzZWUgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBgdXNidHZfZGlzY29ubmVjdGAuIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQgYHVzYnR2X3Byb2JlYC4gQSBrZXkgZGV0YWlsIGhlcmUgaXMgdGhhdCBgdXNidHZfdmlkZW9fZnJlZWAgaXMgbm90IGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIGRlc2lnbmVkIGZvciB0ZWFyaW5nIGRvd24gdGhlIGhhcmR3YXJlLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIGhpZ2gtcGVyZm9ybWFuY2UgcGF0aC4gSG93ZXZlciwgdGhlIHJhY2UgY29uZGl0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgYmV0d2VlbiBgdXNidHZfZGlzY29ubmVjdGAgYW5kIHNvbWV0aGluZyBlbHNlLCBtYXliZSBWNEwyIGlvY3RscyBvciByZWd1bGFyIGZpbGUgb3BlcmF0aW9ucy4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGB1c2J0di0mZ3Q7djRsMl9sb2NrYC4gVGhhdCYjMzk7cyBnb2luZyB0byBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djRsMl9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9ODg0PWludCB1c2J0dl92aWRlb19pbml0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTAtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2VidWZsb2NrKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6ODkxOlx0bXV0ZXhfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTItXHRtdXRleF9pbml0KFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jayk7XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NDQtXHR1c2J0di1cdTAwM2V2ZGV2LnF1ZXVlID0gXHUwMDI2dXNidHYtXHUwMDNldmIycTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTQ1Olx0dXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NDYtXHR1c2J0di1cdTAwM2V2ZGV2LmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURSB8XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz05NjY9dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NzAtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MTpcdG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTcyLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MzpcdG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NzQtXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTUtXHRzdHJ1Y3QgdmIyX3F1ZXVlIHZiMnE7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oOjk2Olx0c3RydWN0IG11dGV4IHY0bDJfbG9jaztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTctXHRzdHJ1Y3QgbXV0ZXggdmIycV9sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBgdXNidHYtJmd0O3ZkZXYubG9jayA9ICZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jaztgIHRlbGxzIG1lIHRoYXQgdGhlIGB2NGwyX2xvY2tgIGlzIHRoZSBwcmltYXJ5IGxvY2sgcHJvdGVjdGluZyB0aGUgVjRMMiBkZXZpY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIHRoZSBWNEwyIGNvcmUgd2lsbCBoYW5kbGUgYWNxdWlyaW5nIHRoaXMgbG9jayBmb3IgYW55IGlvY3RsIGNhbGxzLiBUaGlzIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCk15IHByaW1hcnkgY29uY2VybiBub3cgbGllcyBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCB0aGVzZSBWNEwyIGlvY3Rscy4gSSBuZWVkIHRvIGRlZXBseSBzY3J1dGluaXplIGB1c2J0dl9kaXNjb25uZWN0YCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBBbHNvLCBgdXNidHZfcHJvYmVgLCBzaW5jZSBpdCYjMzk7cyB0aGUgaW5pdGlhbGl6YXRpb24sIGlzIGFsc28gb2YgaW50ZXJlc3QuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIFY0TDIgaW9jdGxzIGluIGB1c2J0di12aWRlby5jYC4gSSBoYXZlIHRvIHNlZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgYXQgdGhlIHRpbWUgdGhlIGRldmljZSBpcyB1bnBsdWdnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhlc2UgaW9jdGxzIGFyZSBiZWluZyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGlzY29ubmVjdCByb3V0aW5lLiBUaGlzIHdpbGwgcmVxdWlyZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZXNlIGlvY3RsIGhhbmRsZXJzLiBMZXQgbWUgZGlnIGludG8gdGhhdCBgdXNidHYtdmlkZW8uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBpbiB0ZXJtcyBvZiBWNEwyIGlvY3RsIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2NGwyX2lvY3RsX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY4OD1zdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk0LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTY5Ni1cdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgYHVzYnR2X2lvY3RsX29wc2A6CgoqKkFuYWx5emluZyBgdXNidHZfaW9jdGxfb3BzYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdXNidHZfaW9jdGxfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgYW5kIHRoZSBVU0IgVFYgZHJpdmVyIGhhcHBlbnMsIHJpZ2h0PyBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZHJpdmVyIGRlZmluZXMgaXRzIHNwZWNpZmljIGNvbnRyb2wgb3BlcmF0aW9ucywgdGhlIGNvbW1hbmRzIHVzZXJzcGFjZSBjYW4gc2VuZCBpdC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHRvIHNlZSB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcy4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29tbWFuZHMgZm9yIHZpZGVvIGNhcHR1cmU6KiogQXJlIHRoZXJlIGBpb2N0bGAgY29tbWFuZHMgdG8gc3RhcnQsIHN0b3AsIGNvbmZpZ3VyZSB0aGUgdmlkZW8gc3RyZWFtPyBUaGluayBzZXR0aW5nIGZyYW1lIHJhdGVzLCByZXNvbHV0aW9ucywgY29kZWNzPyBUaGF0JiMzOTtzIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiBhIFVTQiBUViB0dW5lci4KKiAgICoqQXVkaW8gY29udHJvbD8qKiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIGEgY29ycmVzcG9uZGluZyBzZXQgZm9yIGF1ZGlvIHNldHRpbmdzIHRvby4gRXZlbiBpZiBpdCYjMzk7cyBqdXN0IHBhc3NpbmcgaXQgb2ZmIHRvIHRoZSBBTFNBIGxheWVyIGl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgd2hhdCBpcyBzdXBwb3J0ZWQuCiogICAqKlR1bmluZyBhbmQgQ2hhbm5lbCBjb250cm9sOioqIFRoaXMgaXMgY3J1Y2lhbC4gSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhlIGFjdHVhbCB0dW5pbmcgb2YgdGhlIGhhcmR3YXJlPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBmcmVxdWVuY3kgc2V0dGluZywgb3IgYXJlIHRoZXJlIG1vcmUgYWR2YW5jZWQgQVBJcyBmb3Igc2Nhbm5pbmcgYW5kIG1hbmFnaW5nIGNoYW5uZWxzPwoqICAgKipEZW11eGluZyBhbmQgRGF0YSBIYW5kbGluZzoqKiBJJiMzOTttIGN1cmlvdXMgaWYgdGhlIGBpb2N0bGAgb3BzIHJldmVhbCBhbnkgZGV0YWlscyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBNUEVHIHN0cmVhbXMgb3Igb3RoZXIgdHJhbnNwb3J0IHN0cmVhbXMuIElzIGl0IGRvaW5nIGFueSBkZW11eGluZyBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBzZW5kaW5nIHRoZSByYXcgZGF0YSB1cCB0byB1c2Vyc3BhY2U/IFRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHRoZSBkcml2ZXIgZGVzaWduLgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGVycm9ycyBhbmQgYW55IHJlbGV2YW50IGVycm9yIGNvZGVzLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgbWVjaGFuaXNtcyBmb3IgcmVzZXJ2aW5nLCByZWxlYXNpbmcsIGFuZCBtYW5hZ2luZyBoYXJkd2FyZSByZXNvdXJjZXMuCiogICAqKlZlcnNpb25pbmc6KiogQWx3YXlzIHdvcnRoIGEgcGVlay4gSWYgdGhlcmUmIzM5O3MgYSB2ZXJzaW9uaW5nIHNjaGVtZSwgaG93IGFyZSB0aGV5IGhhbmRsaW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5PwoKVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlc2UgYGlvY3RsYCBvcGVyYXRpb25zIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gZGlzc2VjdGluZyBob3cgdGhpcyBVU0IgVFYgZGV2aWNlIGNvbW11bmljYXRlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjkxOlx0XG4gNjkyOlx0XHRyZXR1cm4gdXNidHZfc2VsZWN0X2lucHV0KHVzYnR2LCBpKTtcbiA2OTM6XHR9XG4gNjk0Olx0XG4gNjk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG4gNjk2Olx0XHQudmlkaW9jX3F1ZXJ5Y2FwID0gdXNidHZfcXVlcnljYXAsXG4gNjk3Olx0XHQudmlkaW9jX2VudW1faW5wdXQgPSB1c2J0dl9lbnVtX2lucHV0LFxuIDY5ODpcdFx0LnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdXNidHZfZW51bV9mbXRfdmlkX2NhcCxcbiA2OTk6XHRcdC52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMDpcdFx0LnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiA3MDE6XHRcdC52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMjpcdFx0LnZpZGlvY19nX3N0ZCA9IHVzYnR2X2dfc3RkLFxuIDcwMzpcdFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuIDcwNDpcdFx0LnZpZGlvY19nX2lucHV0ID0gdXNidHZfZ19pbnB1dCxcbiA3MDU6XHRcdC52aWRpb2Nfc19pbnB1dCA9IHVzYnR2X3NfaW5wdXQsXG4gNzA2Olx0XG4gNzA3Olx0XHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcbiA3MDg6XHRcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXG4gNzA5Olx0XHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxuIDcxMDpcdFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcbiA3MTE6XHRcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxuIDcxMjpcdFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcbiA3MTM6XHRcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXG4gNzE0Olx0XHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXG4gNzE1Olx0fTtcbiA3MTY6XHRcbiA3MTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHVzYnR2X2ZvcHMgPSB7XG4gNzE4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA3MTk6XHRcdC51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVVNCVFYgRGV2aWNlIENvbnRyb2wqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zLCBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfZW51bV9pbnB1dGAsIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X2dfc3RkYCwgYHVzYnR2X3Nfc3RkYCwgYHVzYnR2X2dfaW5wdXRgLCBhbmQgYHVzYnR2X3NfaW5wdXRgLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBzZWVtIHRvIGJlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgVVNCVFYgZGV2aWNlLiBJJiMzOTttIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBrZXkuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkmIzM5O20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zX2lucHV0YC4gVGhleSBzZWVtIGxpa2UgdGhleSAqbWlnaHQqIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGB1c2J0di0mZ3Q7dWRldmAgb2JqZWN0LCB3aGljaCB3b3VsZCBiZSByZWFsbHkgaW1wb3J0YW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBgdXNidHZfc19zdGRgIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIGluY2x1ZGluZyBhbGwgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjYzPXN0YXRpYyBpbnQgdXNidHZfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpub3JtKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjY5LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2NzA6c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjcxLXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHVzYnR2X2lvY3RsX29wcyA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTcwMi1cdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NzAzOlx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03MDQtXHQudmlkaW9jX2dfaW5wdXQgPSB1c2J0dl9nX2lucHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGB1c2J0dl9zX3N0ZGAgU291cmNlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIFRoZSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgdXNidHZfc19zdGRgLiBJJiMzOTttIGFscmVhZHkgZW52aXNpb25pbmcgdGhlIGtleSBhcmVhcyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBhc3BlY3RzLiBJcyBpdCBhIG1vZHVsYXIgZGVzaWduPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIHRvIGhhbmRsZSB0aGUgdmlkZW8gc3RyZWFtIGRhdGEgYW5kIGl0cyBwcm9jZXNzaW5nPyBBcmUgdGhleSB1c2luZyBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXJzPyBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBmb2xsb3dzIGEgbG9naWNhbCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjYW4gYnJpbmcgc29tZSBpbnNpZ2h0IGludG8gdGhlIHN0YW5kYXJkIGFzcGVjdHMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG90ZW50aWFsIGRhdGEgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRzdGF0aWMgaW50IHVzYnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCBub3JtKVxuIDY3MTpcdHtcbiA2NzI6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuIDY3MzpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjc0Olx0XG4gNjc1Olx0XHRpZiAobm9ybSBcdTAwMjYgVVNCVFZfVFZfU1REKVxuIDY3NjpcdFx0XHRyZXQgPSB1c2J0dl9zZWxlY3Rfbm9ybSh1c2J0diwgbm9ybSk7XG4gNjc3Olx0XG4gNjc4Olx0XHRyZXR1cm4gcmV0O1xuIDY3OTpcdH1cbiA2ODA6XHRcbiA2ODE6XHRzdGF0aWMgaW50IHVzYnR2X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSlcbiA2ODI6XHR7XG4gNjgzOlx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2ODQ6XHRcdCppID0gdXNidHYtXHUwMDNlaW5wdXQ7XG4gNjg1Olx0XHRyZXR1cm4gMDtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcbiA2ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGB1c2J0dl9zZWxlY3Rfbm9ybWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1c2J0dl9zZWxlY3Rfbm9ybWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBVU0IgdmlkZW8gcGlwZWxpbmUuIElzIGl0IHJlbGF0ZWQgdG8gc3RhbmRhcmQgc2VsZWN0aW9uIOKAkyBOVFNDLCBQQUwsIFNFQ0FNLCBvciBzb21lIHNwZWNpZmljIHJlZ2lvbmFsIHZhcmlhbnQ/IE9yIGlzIGl0IG1vcmUgZ3JhbnVsYXIsIGRlYWxpbmcgd2l0aCBsaW5lIHJhdGVzLCBmcmFtZSByYXRlcywgYW5kIHBpeGVsIGNsb2NrIHNldHRpbmdzPyBLbm93aW5nIHRoZSBvdmVyYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgZ29pbmcgYW55IGRlZXBlci4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBpbmRpY2F0b3JzIOKAkyB2YXJpYWJsZSBuYW1lcyB0aGF0IGhpbnQgYXQgdGhlIHRhcmdldGVkIHN0YW5kYXJkLCBiaXRmaWVsZHMgdGhhdCBtaWdodCBlbmNvZGUgdGhlIHNlbGVjdGlvbiwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgb3IgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGF0IGEgaGlnaGVyIGxldmVsLCBwb3RlbnRpYWxseSB1c2luZyBzb21lIGFic3RyYWN0aW9uIGxheWVyIGxpa2UgYSBWaWRlbzRMaW51eCAoVjRMKSBkcml2ZXIuCgpJZiBpdCAqaXMqIGRlYWxpbmcgd2l0aCByZWdpc3RlciBtYW5pcHVsYXRpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcG93ZXIgY29uc3VtcHRpb24sIHRpbWluZyBjb25zdHJhaW50cywgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEFyZSB0aGVyZSBhbnkga25vd24gZXJyYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBzZXR0aW5ncyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlPyBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIHRoaXMgc2VsZWN0aW9uIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGZhbGxiYWNrIG1lY2hhbmlzbXMgaWYgYSBwYXJ0aWN1bGFyIHN0YW5kYXJkIGlzIG5vdCBzdXBwb3J0ZWQ/IFdoYXQgaGFwcGVucyBpZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8KCkVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHksIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbCBwaXRmYWxscy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGFzc2VzcyBob3cgd2VsbCBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3NlbGVjdF9ub3JtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9MTI4PXN0YXRpYyB1aW50MTZfdCB1c2J0dl9ub3JtX3RvXzE2Zl9yZWcodjRsMl9zdGRfaWQgbm9ybSlcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTE0OC1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MTQ5OnN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTUwLXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0My1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQ0Olx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIHVzYnR2LVx1MDAzZW5vcm0pO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0zNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjcwPXN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzUtXHRpZiAobm9ybSBcdTAwMjYgVVNCVFZfVFZfU1REKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2NzY6XHRcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCBub3JtKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA2MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgdGhpcyBVU0IgdmlkZW8gcHJvamVjdDoKCioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1c2J0dl9zZWxlY3Rfbm9ybWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgbmFtZS4gSXQmIzM5O3Mgb2J2aW91c2x5IHRpZWQgdG8gc2VsZWN0aW5nIHRoZSB2aWRlbyBzdGFuZGFyZCBvciAmIzM5O25vcm0mIzM5OyBmb3IgYSBVU0IgVFYgZGV2aWNlIOKAkyBOVFNDLCBQQUwsIFNFQ0FNLCB0aGF0IGtpbmQgb2YgdGhpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2VsZWN0aW9uPyBJcyBpdCBqdXN0IGEgaGFyZHdhcmUgc2V0dGluZywgb3IgZG9lcyBpdCB0cmlnZ2VyIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGl4ZWwgY2xvY2ssIGNvbG9yIHNwYWNlLCBvciBldmVuIERNQSBzZXR0aW5ncz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhZnRlciB0aGlzIHBvaW50LCBhbmQgaG93IGl0IGVmZmVjdHMgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBwb3NzaWJsZSBkZXBlbmRlbmNpZXMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgY29uZGl0aW9ucyB0byBiZSBhd2FyZSBvZi4uLiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcy4uLiBvciBldmVuLCB3b3JzZSwgYSBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgdGhpbmdzIGluIG1pbmQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdHN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0LyogVGhlc2UgYXJlIHRoZSBzZXJpZXMgb2YgcmVnaXN0ZXIgdmFsdWVzIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuIDE1MzpcdFx0ICogZGVjb2RlciBmb3IgYSBzcGVjaWZpYyBzdGFuZGFyZC5cbiAxNTQ6XHRcdCAqIFRoZSBmaXJzdCAyMSByZWdpc3RlciB3cml0ZXMgYXJlIGNvcGllZCBmcm9tIHRoZVxuIDE1NTpcdFx0ICogU2V0dGluZ3NcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXG4gMTU2Olx0XHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXG4gMTU3Olx0XHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXG4gMTU4Olx0XHQgKi9cbiAxNTk6XHRcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XG4gMTYwOlx0XHRcdC8qIFwmIzM0O0FWUEFMXCYjMzQ7IHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xuIDE2MTpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMDAzLCAweDAwMDQgfSxcbiAxNjI6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDAxYSwgMHgwMDY4IH0sXG4gMTYzOlx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMDAsIDB4MDBkMyB9LFxuIDE2NDpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTBlLCAweDAwNzIgfSxcbiAxNjU6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDEwZiwgMHgwMGEyIH0sXG4gMTY2Olx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMTIsIDB4MDBiMCB9LFxuIDE2NzpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTE1LCAweDAwMTUgfSxcbiAxNjg6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDExNywgMHgwMDAxIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHVzYnR2X3NlbGVjdF9ub3JtYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWUsIHByZXN1bWFibHkgc2VsZWN0cyBhIHZpZGVvIHN0YW5kYXJkLiBCdXQgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGlzICpob3cqIGl0JiMzOTtzIGRvaW5nIHRoaXMgc2VsZWN0aW9uLiBUaGUgdGV4dCBleHBsaWNpdGx5IHBvaW50cyBvdXQgdGhhdCBpdCYjMzk7cyB3cml0aW5nIHRvIHJlZ2lzdGVycywgYW5kIGl0JiMzOTtzIGRvaW5nIHNvICp2aWEgVVNCKi4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbiBJIG5lZWQgdG8gbWFrZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpbXBsaWVzIGEgbG93LWxldmVsIGludGVyYWN0aW9uOyBpdCBpc24mIzM5O3QgdXNpbmcgYSBoaWdoLWxldmVsIEFQSSBhYnN0cmFjdGlvbiBmb3IgdGhlIHRhc2suIEl0JiMzOTtzIHNlbmRpbmcgY29tbWFuZHMgZGlyZWN0bHkgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZSB0byBjb25maWd1cmUgdGhlIGRldmljZSYjMzk7cyBpbnRlcm5hbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgZm9yIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbi9kZWJ1Z2dpbmcgY29uc2lkZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3NldF9yZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM9MTcyPXN0YXRpYyBpbnQgdXNidHZfYXVkaW9fc3RhcnQoc3RydWN0IHVzYnR2ICpjaGlwKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjE1LVx0Lyogc3RhcnRpbmcgdGhlIHN0cmVhbSAqL1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYzoyMTY6XHR1c2J0dl9zZXRfcmVncyhjaGlwLCBzZXR1cCwgQVJSQVlfU0laRShzZXR1cCkpO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYy0yMTctXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYz0yMzE9c3RhdGljIGludCB1c2J0dl9hdWRpb19zdG9wKHN0cnVjdCB1c2J0diAqY2hpcClcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTI1MC1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM6MjUxOlx0dXNidHZfc2V0X3JlZ3MoY2hpcCwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjUyLVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy00Ni1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzo0NzppbnQgdXNidHZfc2V0X3JlZ3Moc3RydWN0IHVzYnR2ICp1c2J0diwgY29uc3QgdTE2IHJlZ3NbXVsyXSwgaW50IHNpemUpXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtNDgte1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9OTE9c3RhdGljIGludCB1c2J0dl9zZWxlY3RfaW5wdXQoc3RydWN0IHVzYnR2ICp1c2J0diwgaW50IGlucHV0KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTEyLVx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExMzpcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIGNvbXBvc2l0ZSwgQVJSQVlfU0laRShjb21wb3NpdGUpKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE0LVx0XHRicmVhaztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE1LVx0Y2FzZSBVU0JUVl9TVklERU9fSU5QVVQ6XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExNjpcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHN2aWRlbywgQVJSQVlfU0laRShzdmlkZW8pKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE3LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTE0OT1zdGF0aWMgaW50IHVzYnR2X3NlbGVjdF9ub3JtKHN0cnVjdCB1c2J0diAqdXNidHYsIHY0bDJfc3RkX2lkIG5vcm0pXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTMtXHRcdGlmIChub3JtIFx1MDAyNiBudHNjX21hc2spXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NDpcdFx0XHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgbnRzYywgQVJSQVlfU0laRShudHNjKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1NS1cdFx0ZWxzZSBpZiAobm9ybSBcdTAwMjYgcGFsX21hc2spXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NjpcdFx0XHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgcGFsLCBBUlJBWV9TSVpFKHBhbCkpO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTctXHRcdGVsc2UgaWYgKG5vcm0gXHUwMDI2IFY0TDJfU1REX1NFQ0FNKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNTg6XHRcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHNlY2FtLCBBUlJBWV9TSVpFKHNlY2FtKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1OS1cdFx0ZWxzZVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjY3LVx0XHR9O1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNjg6XHRcdHJldCA9IHVzYnR2X3NldF9yZWdzKHVzYnR2LCBjZmcsIEFSUkFZX1NJWkUoY2ZnKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI2OS1cdH1cbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTMzOS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQwOlx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHNldHVwLCBBUlJBWV9TSVpFKHNldHVwKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTI5LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzA6aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHVzYnR2X3NldF9yZWdzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB1c2J0dl9zZXRfcmVnc2AuJiMzNDsgWWVwLCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UsIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgYmVpbmcgc2V0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXR1cC4gVGhpcyBmdW5jdGlvbiBpcyBib3VuZCB0byBiZSB0aGUga2V5IHRvIGFsbCB0aGUgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBNeSBleHBlcmllbmNlIHNheXMgdGhhdCB0aGlzIGlzIGEgZ3JlYXQgcG9pbnQgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NzpcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcbiAgNDg6XHR7XG4gIDQ5Olx0XHRpbnQgcmV0O1xuICA1MDpcdFx0aW50IHBpcGUgPSB1c2Jfc25kY3RybHBpcGUodXNidHYtXHUwMDNldWRldiwgMCk7XG4gIDUxOlx0XHRpbnQgaTtcbiAgNTI6XHRcbiAgNTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KSB7XG4gIDU0Olx0XHRcdHUxNiBpbmRleCA9IHJlZ3NbaV1bMF07XG4gIDU1Olx0XHRcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XG4gIDU2Olx0XG4gIDU3Olx0XHRcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cdTAwM2V1ZGV2LCBwaXBlLCBVU0JUVl9SRVFVRVNUX1JFRyxcbiAgNTg6XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4gIDU5Olx0XHRcdFx0dmFsdWUsIGluZGV4LCBOVUxMLCAwLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7XG4gIDYwOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDYxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNjI6XHRcdH1cbiAgNjM6XHRcbiAgNjQ6XHRcdHJldHVybiAwO1xuICA2NTpcdH1cbiAgNjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBVU0JUViBEcml2ZXIqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgdXNpbmcgYHVzYnR2LSZndDt1ZGV2YC4gUmlnaHQgYXdheSwgdGhlIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYgYmVjYXVzZSBpZiBgdXNidHYtJmd0O3VkZXZgIGlzIGV2ZXIgYE5VTExgLCB0aGVuIGNhbGxzIGxpa2UgYHVzYl9zbmRjdHJscGlwZWAgYXJlIGdvaW5nIHRvIHRyaWdnZXIgYSBjcmFzaC4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIGB1c2Jfc25kY3RybHBpcGVgIGlzIGp1c3QgYSBtYWNybywgcmlnaHQ/IEl0IGV4cGFuZHMgdG8gYSBjYWxjdWxhdGlvbiBpbnZvbHZpbmcgYF9fY3JlYXRlX3BpcGVgIHdoaWNoIGluIHR1cm4gdHJpZXMgdG8gYWNjZXNzIGAoZGV2KS0mZ3Q7ZGV2bnVtYC4gSWYgdGhhdCBgZGV2YCBpcyBudWxsLCBpdCYjMzk7cyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgcGxhaW4gYW5kIHNpbXBsZS4KClNvLCAqZGVmaW5pdGVseSogYSBwcm9ibGVtIGlmIGB1c2J0di0mZ3Q7dWRldmAgaXMgTlVMTCB3aGVuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBJIHNlZSB0aGUgY29kZSBkZWxpYmVyYXRlbHkgc2V0dGluZyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMO2AgaW5zaWRlIGEgYG11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTtgLiBBbHJpZ2h0LCBnb3QgaXQuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkIGZyb20gYHVzYnR2X3NlbGVjdF9ub3JtYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgdXNidHZfc19zdGRgLiBBbmQgYHVzYnR2X3Nfc3RkYCBpcyBjYWxsZWQgYXMgYSBWNEwyIGlvY3RsLiBUaGUgVjRMMiBjb3JlLCBiZWluZyB3aGF0IGl0IGlzLCBhdXRvbWF0aWNhbGx5IGdyYWJzIHRoZSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AgYmVmb3JlIGNhbGxpbmcgYHVzYnR2X3Nfc3RkYCBiZWNhdXNlIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AuIFRoaXMgc2V0dXAgaXMgZXhwbGljaXRseSBwcmV2ZW50aW5nIGB1c2J0dl9zX3N0ZGAgZnJvbSBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBkaXNjb25uZWN0LgoKQnV0LCBhbmQgdGhpcyBpcyBhIGJpZyBidXQuLi5kb2VzIGB1c2J0dl9zX3N0ZGAgaXRzZWxmICpjaGVjayogaWYgYHVzYnR2LSZndDt1ZGV2YCBpcyBOVUxMIGJlZm9yZSBpdCB0cmllcyB0byBkbyBhbnl0aGluZyB3aXRoIGl0PyBUaGlzIGlzIGNydWNpYWwuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IGxvY2sgaXMgb25seSBwYXJ0aWFsbHkgZWZmZWN0aXZlISBJJiMzOTt2ZSBnb3R0YSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgdXNidHZfc19zdGRgIGFuZCBgdXNidHZfc2VsZWN0X25vcm1gLiBHb3R0YSBzZWUgaWYgdGhlcmUmIzM5O3MgYSBudWxsIGNoZWNrLCBvciBpZiB0aGV5IGp1c3QgYmxpdGhlbHkgYXNzdW1lIHRoYXQgYHVzYnR2LSZndDt1ZGV2YCB3aWxsIGFsd2F5cyBiZSB2YWxpZCwgd2hpY2ggZ2l2ZW4gdGhlIHByaW9yIGFzc2lnbm1lbnQsIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdHN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0LyogVGhlc2UgYXJlIHRoZSBzZXJpZXMgb2YgcmVnaXN0ZXIgdmFsdWVzIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuIDE1MzpcdFx0ICogZGVjb2RlciBmb3IgYSBzcGVjaWZpYyBzdGFuZGFyZC5cbiAxNTQ6XHRcdCAqIFRoZSBmaXJzdCAyMSByZWdpc3RlciB3cml0ZXMgYXJlIGNvcGllZCBmcm9tIHRoZVxuIDE1NTpcdFx0ICogU2V0dGluZ3NcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXG4gMTU2Olx0XHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXG4gMTU3Olx0XHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXG4gMTU4Olx0XHQgKi9cbiAxNTk6XHRcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XG4gMTYwOlx0XHRcdC8qIFwmIzM0O0FWUEFMXCYjMzQ7IHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xuIDE2MTpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMDAzLCAweDAwMDQgfSxcbiAxNjI6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDAxYSwgMHgwMDY4IH0sXG4gMTYzOlx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMDAsIDB4MDBkMyB9LFxuIDE2NDpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTBlLCAweDAwNzIgfSxcbiAxNjU6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDEwZiwgMHgwMGEyIH0sXG4gMTY2Olx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMTIsIDB4MDBiMCB9LFxuIDE2NzpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTE1LCAweDAwMTUgfSxcbiAxNjg6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDExNywgMHgwMDAxIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjc1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIE51bGwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBgdXNidHZfc2V0X3JlZ3NgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20ganVzdCBxdWlja2x5IHRoaW5raW5nLCBpZiB0aGF0IGB1c2J0di0mZ3Q7dWRldmAgcG9pbnRlciBpcyBOVUxMLCBkb2VzIHRoZSBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uIGFjdHVhbGx5IGRvIGEgY2hlY2sgb24gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGhlcmUuIFRoaXMgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIGlzc3VlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHJvYnVzdC4gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGB1c2J0dl9zZXRfcmVnc2AgZnVuY3Rpb24sIGp1c3QgdG8gYmUgc2FmZS4gTGV0JiMzOTtzIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHJldmlldyBpdHMgbG9naWMgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ3Olx0aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKVxuICA0ODpcdHtcbiAgNDk6XHRcdGludCByZXQ7XG4gIDUwOlx0XHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cdTAwM2V1ZGV2LCAwKTtcbiAgNTE6XHRcdGludCBpO1xuICA1MjpcdFxuICA1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiAgNTQ6XHRcdFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcbiAgNTU6XHRcdFx0dTE2IHZhbHVlID0gcmVnc1tpXVsxXTtcbiAgNTY6XHRcbiAgNTc6XHRcdFx0cmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnR2LVx1MDAzZXVkZXYsIHBpcGUsIFVTQlRWX1JFUVVFU1RfUkVHLFxuICA1ODpcdFx0XHRcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbiAgNTk6XHRcdFx0XHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcbiAgNjA6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAgNjE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuICA2MjpcdFx0fVxuICA2MzpcdFxuICA2NDpcdFx0cmV0dXJuIDA7XG4gIDY1Olx0fVxuICA2NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBTeW5jaHJvbml6YXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZpeC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXYWl0LCBgdXNidHZfc2V0X3JlZ3NgIGRvZXNuJiMzOTt0IGNoZWNrIGZvciBhIE5VTEwgYHVzYnR2LSZndDt1ZGV2YD8hIFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgdXNiX3NuZGN0cmxwaXBlYCEmIzM0Oy4gQnV0IHRoZW4gSSByZWFsaXplZCwgaWYgYHVzYnR2LSZndDt1ZGV2YCAqaXMqIE5VTEwsIGhvdyBkb2VzIHRoZSBwYXRjaCBhZGRyZXNzIHRoZSByYWNlIGNvbmRpdGlvbj8KClRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGB2NGwyX2xvY2tgLiBJZiBgdXNidHYtJmd0O3VkZXZgIGlzIHNldCB0byBOVUxMICp1bmRlciogdGhlIHByb3RlY3Rpb24gb2YgYHY0bDJfbG9ja2AsIHRoZW4gYW55IElPQ1RMIHRoYXQgcnVucyBhZnRlciBgdjRsMl9sb2NrYCBpcyByZWxlYXNlZCBzaG91bGQgc2VlIGB1c2J0di0mZ3Q7dWRldiA9PSBOVUxMYCwgYnV0IGV2ZW4gdGhlbiwgaXQgc2VlbXMgcHJvYmxlbWF0aWMuLi4KCkFoYSEgVGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIHRoZSBWNEwyIGNvcmUgdGhhdCByZWplY3RzIElPQ1RMcy4gSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGNoZWNrIGZvciBgdmlkZW9faXNfcmVnaXN0ZXJlZGAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB3aXRoaW4gdGhlIFY0TDIgY29yZS4gWWVzLCB0aGUgVjRMMiBjb3JlIGNoZWNrcyBgdmlkZW9faXNfcmVnaXN0ZXJlZCgpYCBiZWZvcmUgY2FsbGluZyBJT0NUTHMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuCgpgdXNidHZfdmlkZW9fZnJlZWAgY2FsbHMgYHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3VzYnR2LSZndDt2ZGV2KWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYC4gVGhpcyBjbGVhcnMgdGhlIGBWNEwyX0ZMX1JFR0lTVEVSRURgIGZsYWcuIEFueSBuZXcgSU9DVEwgaXMgcmVqZWN0ZWQgYnkgYHZpZGVvX2lvY3RsMmAgb3IgYHY0bDJfaW9jdGxgIGJlY2F1c2UgdGhlIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuCgpCdXQgd2hhdCBhYm91dCBhbiBJT0NUTCB0aGF0IGlzIEFMUkVBRFkgcnVubmluZz8gSWYgYW4gSU9DVEwgaXMgYWxyZWFkeSBydW5uaW5nLCBpdCBob2xkcyBgdjRsMl9sb2NrYC4gIGB1c2J0dl92aWRlb19mcmVlYCB3aWxsIGJsb2NrIG9uIGBtdXRleF9sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7YCB1bnRpbCB0aGUgSU9DVEwgZmluaXNoZXMuIFRoZW4gaXQgd2lsbCBzZXQgYHVzYnR2LSZndDt1ZGV2ID0gTlVMTDtgLiBTbyB0aGUgSU9DVEwgd2lsbCBmaW5pc2ggd2l0aCBgdXNidHYtJmd0O3VkZXZgIHN0aWxsIHZhbGlkLiBBZnRlciB0aGUgSU9DVEwgZmluaXNoZXMsIGB1c2J0dl92aWRlb19mcmVlYCBhY3F1aXJlcyB0aGUgbG9jaywgc2V0cyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMYCwgYW5kIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQsIHNvIG5vIG5ldyBJT0NUTHMgY2FuIHN0YXJ0LiBUaGVyZWZvcmUgYHVzYnR2LSZndDt1ZGV2YCB3aWxsICpuZXZlciogYmUgTlVMTCB3aGlsZSBhbiBJT0NUTCBpcyBydW5uaW5nIQoKVGhhdCYjMzk7cyBpdCEgVGhpcyBwZXJmZWN0bHkgZml4ZXMgdGhlIHVzZS1hZnRlci1mcmVlIGlzc3VlIGZvciBgdXNidHYtJmd0O3VkZXZgLiBUaGUgVVNCIGNvcmUgZnJlZXMgYHVzYnR2LSZndDt1ZGV2YCBhZnRlciBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucy4gSWYgYHVzYnR2X2Rpc2Nvbm5lY3RgICpkaWRuJiMzOTt0KiB3YWl0IGZvciBJT0NUTHMgdG8gZmluaXNoLCBhbiBJT0NUTCBjb3VsZCBiZSBydW5uaW5nLCBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucywgdGhlIFVTQiBjb3JlIGZyZWVzIGB1ZGV2YCwgYW5kIEJPT00sIFVBRiEgQnkgYWNxdWlyaW5nIGB2NGwyX2xvY2tgIGluIGB1c2J0dl92aWRlb19mcmVlYCAod2hpY2ggaXMgY2FsbGVkIGZyb20gYHVzYnR2X2Rpc2Nvbm5lY3RgKSwgaXQgd2FpdHMgZm9yIGFsbCBjdXJyZW50bHkgcnVubmluZyBJT0NUTHMgdG8gZmluaXNoLiBBbmQgc2luY2UgYHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZWAgd2FzIGFscmVhZHkgY2FsbGVkLCBubyBuZXcgSU9DVExzIGNhbiBzdGFydC4gVGhpcyBpcyBhIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIGZpeC4gSXQgcGVyZmVjdGx5IHByb3RlY3RzIHRoZSBVU0IgZGV2aWNlLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgotIGB1c2J0dl9kaXNjb25uZWN0YAotIGB1c2J0dl9wcm9iZWAKLSBgdXNidHZfc19zdGRgCi0gYHVzYnR2X3NfaW5wdXRgCi0gYHVzYnR2X3F1ZXJ5Y2FwYAotIGB1c2J0dl9lbnVtX2lucHV0YAotIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYAotIGB1c2J0dl9mbXRfdmlkX2NhcGAKLSBgdXNidHZfZ19zdGRgCi0gYHVzYnR2X2dfaW5wdXRgCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYHVzYnR2X2lvY3RsX29wc2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG4gNjk2Olx0XHQudmlkaW9jX3F1ZXJ5Y2FwID0gdXNidHZfcXVlcnljYXAsXG4gNjk3Olx0XHQudmlkaW9jX2VudW1faW5wdXQgPSB1c2J0dl9lbnVtX2lucHV0LFxuIDY5ODpcdFx0LnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdXNidHZfZW51bV9mbXRfdmlkX2NhcCxcbiA2OTk6XHRcdC52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMDpcdFx0LnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiA3MDE6XHRcdC52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMjpcdFx0LnZpZGlvY19nX3N0ZCA9IHVzYnR2X2dfc3RkLFxuIDcwMzpcdFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuIDcwNDpcdFx0LnZpZGlvY19nX2lucHV0ID0gdXNidHZfZ19pbnB1dCxcbiA3MDU6XHRcdC52aWRpb2Nfc19pbnB1dCA9IHVzYnR2X3NfaW5wdXQsXG4gNzA2Olx0XG4gNzA3Olx0XHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcbiA3MDg6XHRcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXG4gNzA5Olx0XHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxuIDcxMDpcdFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcbiA3MTE6XHRcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxuIDcxMjpcdFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcbiA3MTM6XHRcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXG4gNzE0Olx0XHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQlRWIE1vZHVsZSBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2Ugc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIFVTQlRWIG1vZHVsZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGFuZCBgdXNidHZfZ19pbnB1dGAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBlc3NlbnRpYWwgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLgoKTm93LCBhIHF1aWNrIG5vdGUgdG8gc2VsZjogYHVzYnR2X3Byb2JlYCBpcyBjbGVhcmx5IGRlZmluZWQgd2l0aGluIGB1c2J0di1jb3JlLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2guIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW9jdGwgb3IgZmlsZSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdH07XG4gNzE2Olx0XG4gNzE3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1c2J0dl9mb3BzID0ge1xuIDcxODpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gNzE5Olx0XHQudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsXG4gNzIwOlx0XHQubW1hcCA9IHZiMl9mb3BfbW1hcCxcbiA3MjE6XHRcdC5vcGVuID0gdjRsMl9maF9vcGVuLFxuIDcyMjpcdFx0LnJlbGVhc2UgPSB2YjJfZm9wX3JlbGVhc2UsXG4gNzIzOlx0XHQucmVhZCA9IHZiMl9mb3BfcmVhZCxcbiA3MjQ6XHRcdC5wb2xsID0gdmIyX2ZvcF9wb2xsLFxuIDcyNTpcdH07XG4gNzI2Olx0XG4gNzI3Olx0c3RhdGljIGludCB1c2J0dl9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSxcbiA3Mjg6XHRcdHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsXG4gNzI5Olx0XHR1bnNpZ25lZCBpbnQgKm5wbGFuZXMsIHVuc2lnbmVkIGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDczMjpcdFx0dW5zaWduZWQgc2l6ZSA9IFVTQlRWX0NIVU5LICogdXNidHYtXHUwMDNlbl9jaHVua3MgKiAyICogc2l6ZW9mKHUzMik7XG4gNzMzOlx0XHR1bnNpZ25lZCBpbnQgcV9udW1fYnVmcyA9IHZiMl9nZXRfbnVtX2J1ZmZlcnModnEpO1xuIDczNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIFY0TDIgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zIGFyZSwgYXMgZXhwZWN0ZWQsIHVzaW5nIHRoZSBnZW5lcmljIFZpZGVvNExpbnV4MiBhbmQgVmlkZW8gQnVmZmVyIDIgaW50ZXJmYWNlcy4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgbWVhdCwgdGhlIHRoaW5ncyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBgdXNidHZgIGRldmljZSwgYXJlIGxpa2VseSBnb2luZyB0byBiZSBpbiB0aGUgcXVldWluZyBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgY29udHJvbHMgdGhlIGRhdGEgZmxvdywgYW5kIGhhbmRsZXMgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBxdWV1aW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBjcml0aWNhbCBwYXJ0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmIyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTc3ND1zdGF0aWMgdm9pZCB1c2J0dl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTc4MS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NzgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyB1c2J0dl92YjJfb3BzID0ge1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODMtXHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtODk5LVx0dXNidHYtXHUwMDNldmIycS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHVzYnR2X2J1Zik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjkwMDpcdHVzYnR2LVx1MDAzZXZiMnEub3BzID0gXHUwMDI2dXNidHZfdmIyX29wcztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTAxLVx0dXNidHYtXHUwMDNldmIycS5tZW1fb3BzID0gXHUwMDI2dmIyX3ZtYWxsb2NfbWVtb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB1c2J0dl92YjJfb3BzYCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgdXNidHZfdmIyX29wc2Agc3RydWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBWaWRlbzRMaW51eDIgKFY0TDIpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSBidWZmZXIgbWFuYWdlbWVudCBhc3BlY3QuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZyb20gdGhlIFVTQiBUViBkZXZpY2UsIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBmbG93cyBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUg4oCTIHRoZSBgcXVldWVfc2V0dXBgLCBgYnVmX2luaXRgLCBgYnVmX3ByZXBhcmVgLCBgYnVmX3F1ZXVlYCwgYGJ1Zl9yZWxlYXNlYCwgYW5kIHRoZSBvdGhlcnMuIEVhY2ggb25lJiMzOTtzIHB1cnBvc2UgaXMgY2xlYXI7IGBxdWV1ZV9zZXR1cGAgaXMgY3JpdGljYWwgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgY29uZmlndXJhdGlvbi4gVGhlbiB0aGVyZeKAmXMgaG93IGJ1ZmZlcnMgYXJlIHByZXBhcmVkLCBxdWV1ZWQsIGFuZCByZWxlYXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgYnVmZmVyIGFsbG9jYXRpb24sIG1lbW9yeSBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgRE1BIG9wZXJhdGlvbnMuIEkmIzM5O20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBVU0IgdHJhbnNmZXIsIGNvbnNpZGVyaW5nIGJhbmR3aWR0aCBsaW1pdGF0aW9ucywgYW5kIGlmIHRoZSBkcml2ZXIgZW1wbG95cyBhbnkgY2xldmVyIHRlY2huaXF1ZXMgbGlrZSBzY2F0dGVyL2dhdGhlciBsaXN0cyB0byBtYXhpbWl6ZSBlZmZpY2llbmN5LiBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHN0cnVjdHVyZSBjb2xsYWJvcmF0ZXMgd2l0aCBvdGhlciBlbGVtZW50cyBvZiB0aGUgVjRMMiBzdGFjaywgbG9va2luZyBmb3IgYW55IHN1YnRsZSBoaW50cyBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBhZGhlcmVzIHRvIGJlc3QgcHJhY3RpY2VzIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyB0byBhZG1pcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHR9XG4gNzgxOlx0XG4gNzgyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XG4gNzgzOlx0XHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcbiA3ODQ6XHRcdC5idWZfcXVldWUgPSB1c2J0dl9idWZfcXVldWUsXG4gNzg1Olx0XHQuc3RhcnRfc3RyZWFtaW5nID0gdXNidHZfc3RhcnRfc3RyZWFtaW5nLFxuIDc4NjpcdFx0LnN0b3Bfc3RyZWFtaW5nID0gdXNidHZfc3RvcF9zdHJlYW1pbmcsXG4gNzg3Olx0fTtcbiA3ODg6XHRcbiA3ODk6XHRzdGF0aWMgaW50IHVzYnR2X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKVxuIDc5MDpcdHtcbiA3OTE6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSBjb250YWluZXJfb2YoY3RybC1cdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXG4gNzkyOlx0XHRcdFx0XHRcdFx0XHRcdGN0cmwpO1xuIDc5MzpcdFx0dTggKmRhdGE7XG4gNzk0Olx0XHR1MTYgaW5kZXgsIHNpemU7XG4gNzk1Olx0XHRpbnQgcmV0O1xuIDc5NjpcdFxuIDc5NzpcdFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRpZiAoIWRhdGEpXG4gNzk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAzNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBDb2RlIEhvb2tzIGZvciBVU0IgVFYgRGV2aWNlIENvbnRyb2wqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBob29rIGludG8gdGhpcyBVU0IgVFYgZHJpdmVyLiBgdXNidHZfcXVldWVfc2V0dXBgLCBgdXNidHZfYnVmX3F1ZXVlYCwgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AsIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFsbCBsb29rIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbGxpbmcgdGhlIGRldmljZSYjMzk7cyBiZWhhdmlvci4gV2FpdCBhIHNlY29uZCwgYHVzYnR2X3NfY3RybGAuLi4gdGhhdCYjMzk7cyBhIFY0TDIgY29udHJvbCBoYW5kbGVyLCBpc24mIzM5O3QgaXQ/IElmIGl0JiMzOTtzIGEgVjRMMiBjb250cm9sIGhhbmRsZXIsIGl0JiMzOTtzIGxpa2VseSB1c2luZyBgdXNidHYtJmd0O3VkZXZgIHRvIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkZXZpY2UuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpZiBpdCYjMzk7cyBjb3JyZWN0LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdHtcbiA3OTE6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSBjb250YWluZXJfb2YoY3RybC1cdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXG4gNzkyOlx0XHRcdFx0XHRcdFx0XHRcdGN0cmwpO1xuIDc5MzpcdFx0dTggKmRhdGE7XG4gNzk0Olx0XHR1MTYgaW5kZXgsIHNpemU7XG4gNzk1Olx0XHRpbnQgcmV0O1xuIDc5NjpcdFxuIDc5NzpcdFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRpZiAoIWRhdGEpXG4gNzk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwMDpcdFxuIDgwMTpcdFx0LypcbiA4MDI6XHRcdCAqIFJlYWQgaW4gdGhlIGN1cnJlbnQgYnJpZ2h0bmVzcy9jb250cmFzdCByZWdpc3RlcnMuIFdlIG5lZWQgdGhlbVxuIDgwMzpcdFx0ICogYm90aCwgYmVjYXVzZSB0aGUgdmFsdWVzIGFyZSBmb3Igc29tZSByZWFzb24gaW50ZXJsZWF2ZWQuXG4gODA0Olx0XHQgKi9cbiA4MDU6XHRcdGlmIChjdHJsLVx1MDAzZWlkID09IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwgY3RybC1cdTAwM2VpZCA9PSBWNEwyX0NJRF9DT05UUkFTVCkge1xuIDgwNjpcdFx0XHRyZXQgPSB1c2JfY29udHJvbF9tc2codXNidHYtXHUwMDNldWRldixcbiA4MDc6XHRcdFx0XHR1c2JfcmN2Y3RybHBpcGUodXNidHYtXHUwMDNldWRldiwgMCksIFVTQlRWX0NPTlRST0xfUkVHLFxuIDgwODpcdFx0XHRcdFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuIDgwOTpcdFx0XHRcdDAsIFVTQlRWX0JBU0UgJiM0MzsgMHgwMjQ0LCAodm9pZCAqKWRhdGEsIDMsXG4gODEwOlx0XHRcdFx0VVNCX0NUUkxfR0VUX1RJTUVPVVQpO1xuIDgxMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxMjpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gODEzOlx0XHR9XG4gODE0Olx0XG4gODE1Olx0XHRzd2l0Y2ggKGN0cmwtXHUwMDNlaWQpIHtcbiA4MTY6XHRcdGNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzpcbiA4MTc6XHRcdFx0aW5kZXggPSBVU0JUVl9CQVNFICYjNDM7IDB4MDI0NDtcbiA4MTg6XHRcdFx0c2l6ZSA9IDM7XG4gODE5Olx0XHRcdGRhdGFbMF0gXHUwMDI2PSAweGYwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgQ29udHJvbCBQYXRoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgZGlyZWN0bHkgYWNjZXNzZXMgYHVzYnR2LSZndDt1ZGV2YC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgb2JzZXJ2YXRpb24uIE5vdywgbGV0JiMzOTtzIGJhY2sgdXAgYSBiaXQuIFJpZ2h0LCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIGJ5IHRoZSBWNEwyIGNvcmUsIHNwZWNpZmljYWxseSB3aGVuIGEgY29udHJvbCBzZXR0aW5nIGlzIHRyaWdnZXJlZC4gQSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW1tZWRpYXRlbHk6IGRvZXMgdGhlIFY0TDIgY29yZSBob2xkIHRoZSBgdjRsMl9sb2NrYCB3aGVuIGl0IGNhbGxzIGB1c2J0dl9zX2N0cmxgPyBXZSAqbmVlZCogdG8ga25vdyB0aGlzIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBgdXNidHZfdmlkZW9faW5pdGAsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbHMgYXJlIHJlZ2lzdGVyZWQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjbHVlIGFib3V0IHRoZSBsb2NraW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Y0bDJfY3RybF9oYW5kbGVyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz04ODQ9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTkxMC1cdC8qIGNvbnRyb2xzICovXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjkxMTpcdHY0bDJfY3RybF9oYW5kbGVyX2luaXQoXHUwMDI2dXNidHYtXHUwMDNlY3RybCwgNCk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTkxMi1cdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMwOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHVzYnR2X3ZpZGVvX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCBteSBwcmlvciBleHBlcmllbmNlIHdpdGggVVNCIHZpZGVvIGNhcHR1cmUgZHJpdmVycywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB1c2J0dl92aWRlb19pbml0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDkxMC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB2aWRlbyBjYXB0dXJlIHBpcGVsaW5lIGJlZ2lucy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBkZXZpY2UgZW51bWVyYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24gKGxpa2UgZnJhbWUgYnVmZmVycywgRE1BIGNoYW5uZWxzIGlmIGl0JiMzOTtzIHRoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUpLCBhbmQgcG9zc2libHkgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBVU0IgdHJhbnNmZXIgZGVzY3JpcHRvcnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZHJpdmVyIHNldHRpbmcgdXAgaXRzIGVuZHBvaW50cyBhbmQgbmVnb3RpYXRpbmcgdGhlIHZpZGVvIGZvcm1hdCBzZXR0aW5ncyB3aXRoIHRoZSBkZXZpY2UuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbjsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIGRyaXZlciB3aWxsIGJlY29tZSBhcHBhcmVudC4gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGFueSBWNEwyIHN1YnN5c3RlbXMgaXQgbWlnaHQgYmUgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHR1c2J0di1cdTAwM2V2YjJxLm9wcyA9IFx1MDAyNnVzYnR2X3ZiMl9vcHM7XG4gOTAxOlx0XHR1c2J0di1cdTAwM2V2YjJxLm1lbV9vcHMgPSBcdTAwMjZ2YjJfdm1hbGxvY19tZW1vcHM7XG4gOTAyOlx0XHR1c2J0di1cdTAwM2V2YjJxLnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQztcbiA5MDM6XHRcdHVzYnR2LVx1MDAzZXZiMnEubG9jayA9IFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jaztcbiA5MDQ6XHRcdHJldCA9IHZiMl9xdWV1ZV9pbml0KFx1MDAyNnVzYnR2LVx1MDAzZXZiMnEpO1xuIDkwNTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDkwNjpcdFx0XHRkZXZfd2Fybih1c2J0di1cdTAwM2VkZXYsIFwmIzM0O0NvdWxkIG5vdCBpbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZVxcblwmIzM0Oyk7XG4gOTA3Olx0XHRcdHJldHVybiByZXQ7XG4gOTA4Olx0XHR9XG4gOTA5Olx0XG4gOTEwOlx0XHQvKiBjb250cm9scyAqL1xuIDkxMTpcdFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2VjdHJsLCA0KTtcbiA5MTI6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkxMzpcdFx0XHRcdFY0TDJfQ0lEX0NPTlRSQVNULCAwLCAweDNmZiwgMSwgMHgxZDApO1xuIDkxNDpcdFx0djRsMl9jdHJsX25ld19zdGQoXHUwMDI2dXNidHYtXHUwMDNlY3RybCwgXHUwMDI2dXNidHZfY3RybF9vcHMsXG4gOTE1Olx0XHRcdFx0VjRMMl9DSURfQlJJR0hUTkVTUywgMCwgMHgzZmYsIDEsIDB4MWMwKTtcbiA5MTY6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkxNzpcdFx0XHRcdFY0TDJfQ0lEX1NBVFVSQVRJT04sIDAsIDB4M2ZmLCAxLCAweDIwMCk7XG4gOTE4Olx0XHR2NGwyX2N0cmxfbmV3X3N0ZChcdTAwMjZ1c2J0di1cdTAwM2VjdHJsLCBcdTAwMjZ1c2J0dl9jdHJsX29wcyxcbiA5MTk6XHRcdFx0XHRWNEwyX0NJRF9IVUUsIC0weGRmZiwgMHhkZmYsIDEsIDB4MDAwKTtcbiA5MjA6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkyMTpcdFx0XHRcdFY0TDJfQ0lEX1NIQVJQTkVTUywgMHgwLCAweGZmLCAxLCAweDYwKTtcbiA5MjI6XHRcdHJldCA9IHVzYnR2LVx1MDAzZWN0cmwuZXJyb3I7XG4gOTIzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gOTI0Olx0XHRcdGRldl93YXJuKHVzYnR2LVx1MDAzZWRldiwgXCYjMzQ7Q291bGQgbm90IGluaXRpYWxpemUgY29udHJvbHNcXG5cJiMzNDspO1xuIDkyNTpcdFx0XHRnb3RvIGN0cmxfZmFpbDtcbiA5MjY6XHRcdH1cbiA5Mjc6XHRcbiA5Mjg6XHRcdC8qIHY0bDIgc3RydWN0dXJlICovXG4gOTI5Olx0XHR1c2J0di1cdTAwM2V2NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSBcdTAwMjZ1c2J0di1cdTAwM2VjdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCVFYgTG9ja2luZyBhbmQgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXImIzM5O3MgbG9ja2luZyBtZWNoYW5pc20uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgYHVzYnR2LSZndDtjdHJsLmxvY2tgIG5vdCBiZWluZyBzZXQsIGltcGx5aW5nIHRoZSBkcml2ZXIgbWlnaHQgcmVseSBvbiBhbiBpbnRlcm5hbCBsb2NrLCByaWdodD8gQnV0IHRoZW4gSSBub3RpY2VkIGB1c2J0dl9zX2N0cmxgIGlzIGludm9rZWQgd2hlbiBgVklESU9DX1NfQ1RSTGAgb3IgYFZJRElPQ19TX0VYVF9DVFJMU2AgaXMgY2FsbGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYHY0bDJfaW9jdGxgIGhvbGQgYHVzYnR2LSZndDt2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGBWSURJT0NfU19DVFJMYD8gQWhhLCB5ZXMhIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AgY29uZmlybXMgdGhhdCBgdmlkZW9faW9jdGwyYCB3aWxsIGluZGVlZCBhY3F1aXJlIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCBiZWZvcmUgZGlzcGF0Y2hpbmcgKmFueSogaW9jdGwsIGluY2x1ZGluZyBgVklESU9DX1NfQ1RSTGAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2NrIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gUmlnaHQsIGB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHVzYnR2X3ZpZGVvX2luaXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9wcm9iZWAuIFNvIGB1c2J0dl9zX2N0cmxgIGlzIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2Agd2hlbiBjYWxsZWQgdmlhIGlvY3RsLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYHY0bDJfY3RybF9oYW5kbGVyX3NldHVwYCBkb2VzbiYjMzk7dCBob2xkIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgcHJvYmUsIHNvIHRoZXJlJiMzOTtzIG5vIHJhY2UuIExvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhpcy4KCk5vdywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIHJldmlldzogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFyZSBwcm90ZWN0ZWQgYnkgYHVzYnR2LSZndDt2YjJxX2xvY2tgLCBub3QgYHVzYnR2LSZndDt2NGwyX2xvY2tgLiBPa2F5LCBsZXQmIzM5O3MgcmV2aXNpdCBgdXNidHZfdmlkZW9faW5pdGAuICBZZXMsIGB1c2J0di0mZ3Q7dmIycS5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7dmIycV9sb2NrO2AuIFRoZXJlZm9yZSBgdmIyX2lvY3RsX3N0cmVhbW9uYCB3aWxsIGFjcXVpcmUgYHVzYnR2LSZndDt2YjJxX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgY29ycmVjdCBsb2NrIHVzYWdlIGluIHRoZSBzdHJlYW1pbmcgcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBpcyB1c2luZyBgdXNidHYtJmd0O3VkZXZgIGZvciBhbnkgcHVycG9zZSwgdGhpcyBtaWdodCBiZSBhIHBvaW50IG9mIGNvbmZsaWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0c2l6ZXNbMF0gPSBzaXplO1xuIDc0MTpcdFxuIDc0MjpcdFx0cmV0dXJuIDA7XG4gNzQzOlx0fVxuIDc0NDpcdFxuIDc0NTpcdHN0YXRpYyB2b2lkIHVzYnR2X2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpXG4gNzQ2Olx0e1xuIDc0NzpcdFx0c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7XG4gNzQ4Olx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi1cdTAwM2V2YjJfcXVldWUpO1xuIDc0OTpcdFx0c3RydWN0IHVzYnR2X2J1ZiAqYnVmID0gY29udGFpbmVyX29mKHZidWYsIHN0cnVjdCB1c2J0dl9idWYsIHZiKTtcbiA3NTA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gNzUxOlx0XG4gNzUyOlx0XHRpZiAodXNidHYtXHUwMDNldWRldiA9PSBOVUxMKSB7XG4gNzUzOlx0XHRcdHZiMl9idWZmZXJfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7XG4gNzU0Olx0XHRcdHJldHVybjtcbiA3NTU6XHRcdH1cbiA3NTY6XHRcbiA3NTc6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnVzYnR2LVx1MDAzZWJ1ZmxvY2ssIGZsYWdzKTtcbiA3NTg6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YnVmLVx1MDAzZWxpc3QsIFx1MDAyNnVzYnR2LVx1MDAzZWJ1ZnMpO1xuIDc1OTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ1c2J0di1cdTAwM2VidWZsb2NrLCBmbGFncyk7XG4gNzYwOlx0fVxuIDc2MTpcdFxuIDc2MjpcdHN0YXRpYyBpbnQgdXNidHZfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gNzYzOlx0e1xuIDc2NDpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKHVzYnR2LVx1MDAzZXVkZXYgPT0gTlVMTClcbiA3Njc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzY4Olx0XG4gNzY5Olx0XHR1c2J0di1cdTAwM2VsYXN0X29kZCA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDE2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIExvY2tpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhcm91bmQgdGhlIGB1c2J0di0mZ3Q7dWRldmAgcG9pbnRlci4gIFRoZSBmdW5jdGlvbnMgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9idWZfcXVldWVgIGFyZSBjaGVja2luZyBpZiBgdXNidHYtJmd0O3VkZXYgPT0gTlVMTGAuIE15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O1VoIG9oLCBpcyB0aGlzIHByb3Blcmx5IHN5bmNocm9uaXplZD8mIzM0OyBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoYXQgdGhlIGNoZWNrIHdhcyBvbmx5IHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3ZiMnFfbG9ja2AsIG5vdCBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBzZXRzIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AsIHdoaWNoIHJhaXNlZCB0aGUgcXVlc3Rpb24gaWYgdGhlcmUmIzM5O3MgYSByYWNlIHdpdGggYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AuIFRoZW4gSSB0aG91Z2h0IGl0IHRocm91Z2guLi4gTGV0JiMzOTtzIHNlZTogYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgZ2V0cyBjYWxsZWQgYnkgYHZiMl9pb2N0bF9zdHJlYW1vbmAuIE9rYXksIGB2YjJfaW9jdGxfc3RyZWFtb25gIGlzIGFuIGlvY3RsLiBBaCwgYW5kIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AuIFNvLCBgdmlkZW9faW9jdGwyYCBpcyBnb2luZyB0byBhY3F1aXJlIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCBiZWZvcmUgY2FsbGluZyBgdmIyX2lvY3RsX3N0cmVhbW9uYCwgYW5kIFRIRU4sIGB2YjJfaW9jdGxfc3RyZWFtb25gIHdvdWxkIGFjcXVpcmUgYHVzYnR2LSZndDt2YjJxX2xvY2tgLiBTbywgYWN0dWFsbHksIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIElTIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuCgpPa2F5LCBidXQgd2hhdCBhYm91dCBgdXNidHZfYnVmX3F1ZXVlYD8gSXQmIzM5O3MgY2FsbGVkIGJ5IGB2YjJfaW9jdGxfcWJ1ZmAuIFNpbmNlIGB2YjJfaW9jdGxfcWJ1ZmAgaXMgYWxzbyBhbiBpb2N0bCwgdGhhdCBtZWFucyBpdCYjMzk7cyBhbHNvIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AhIFRoYXQmIzM5O3MgZ29vZC4KClNvLCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY29ycmVjdGx5IHN5bmNocm9uaXplcyB0aGUgdXNhZ2Ugb2YgYHVzYnR2LSZndDt1ZGV2YCwgZW5zdXJpbmcgaXQmIzM5O3Mgbm90IGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGZyZWVkIGluIGlvY3RsIGNhbGxzLiBUaGF0JiMzOTtzIGEgcmVsaWVmLiBJdCYjMzk7cyBwcm9wZXJseSBsb2NrZWQuCgpOb3csIHdhaXQuLi4gV2hhdCBhYm91dCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggYWxsIG9mIHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0dXNidHYtXHUwMDNlc2VxdWVuY2UgPSAwO1xuIDc3MTpcdFx0cmV0dXJuIHVzYnR2X3N0YXJ0KHVzYnR2KTtcbiA3NzI6XHR9XG4gNzczOlx0XG4gNzc0Olx0c3RhdGljIHZvaWQgdXNidHZfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpXG4gNzc1Olx0e1xuIDc3NjpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDc3NzpcdFxuIDc3ODpcdFx0aWYgKHVzYnR2LVx1MDAzZXVkZXYpXG4gNzc5Olx0XHRcdHVzYnR2X3N0b3AodXNidHYpO1xuIDc4MDpcdH1cbiA3ODE6XHRcbiA3ODI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgdXNidHZfdmIyX29wcyA9IHtcbiA3ODM6XHRcdC5xdWV1ZV9zZXR1cCA9IHVzYnR2X3F1ZXVlX3NldHVwLFxuIDc4NDpcdFx0LmJ1Zl9xdWV1ZSA9IHVzYnR2X2J1Zl9xdWV1ZSxcbiA3ODU6XHRcdC5zdGFydF9zdHJlYW1pbmcgPSB1c2J0dl9zdGFydF9zdHJlYW1pbmcsXG4gNzg2Olx0XHQuc3RvcF9zdHJlYW1pbmcgPSB1c2J0dl9zdG9wX3N0cmVhbWluZyxcbiA3ODc6XHR9O1xuIDc4ODpcdFxuIDc4OTpcdHN0YXRpYyBpbnQgdXNidHZfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjUxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gdGhlIFVTQlRWIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBoYXZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuIEl0IHNlZW1zIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgY2hlY2tzIGB1c2J0di0mZ3Q7dWRldmAsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlZCBhIHJlZCBmbGFnLiBJIGtub3cgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCBpcyBjYWxsZWQgdmlhIGB2YjJfaW9jdGxfc3RyZWFtb2ZmYCwgd2hpY2ggaXMgYW4gaW9jdGwsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsc28gY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRocm91Z2ggYHZiMl9mb3BfcmVsZWFzZWAgd2hpY2ggZ29lcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGZ1bmN0aW9uIGNhbGxzOiBgdmIyX2ZvcF9yZWxlYXNlYCAtJmd0OyBgdmIyX2NvcmVfcXVldWVfcmVsZWFzZWAgLSZndDsgYF9fdmIyX3F1ZXVlX2NhbmNlbGAgLSZndDsgYHN0b3Bfc3RyZWFtaW5nYC4KCk15IGNvbmNlcm4gaXMgd2hldGhlciBgdmIyX2ZvcF9yZWxlYXNlYCBpdHNlbGYgaG9sZHMgYHVzYnR2LSZndDt2NGwyX2xvY2tgLiAgSXQgKmRvZXMqIGFjcXVpcmUgYHZxLSZndDtsb2NrYCB3aGljaCBpcyBgdXNidHYtJmd0O3ZiMnFfbG9ja2AsIGJ1dCBub3QgYHZkZXYtJmd0O2xvY2tgIHdoaWNoIGlzIGB1c2J0di0mZ3Q7djRsMl9sb2NrYC4gVGhpcyBpcyBhIHByb2JsZW0hICBUaGUgYHY0bDJfZmhfcmVsZWFzZWAgb3IgYHZiMl9mb3BfcmVsZWFzZWAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBob2xkIHRoZSBgdjRsMl9sb2NrYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGB2YjJfZm9wX3JlbGVhc2VgIGRvZXNuJiMzOTt0IGtub3cgYWJvdXQgYHZkZXYtJmd0O2xvY2tgIGluIGBkcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuY2AgYW5kIGZvdW5kIHRoYXQgaXQgY2FsbHMgYG11dGV4X2xvY2sodnEtJmd0O2xvY2spYCAoIGB1c2J0di0mZ3Q7dmIycV9sb2NrYCkuICBTaW5jZSBgdXNidHZfZm9wcy5yZWxlYXNlYCBpcyBzZXQgdG8gYHZiMl9mb3BfcmVsZWFzZWAsIHRoaXMgY29uZmlybXMgbXkgd29ycnkgdGhhdCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIG1pZ2h0IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBgdXNidHZfZGlzY29ubmVjdGAuCgpUaGUgcG90ZW50aWFsIHJhY2UgaXMgdGhhdCBgdXNidHZfZGlzY29ubmVjdGAgY291bGQgc2V0IGB1c2J0di0mZ3Q7dWRldmAgdG8gYE5VTExgIHVuZGVyIGB2NGwyX2xvY2tgLCB3aGlsZSBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIG9ubHkgaG9sZHMgYHZiMnFfbG9ja2AuICBJZiB0aGlzIGhhcHBlbnMsIHRoZSBjaGVjayBgaWYgKHVzYnR2LSZndDt1ZGV2KWAgaW4gYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCB3b3VsZCBiZSB2dWxuZXJhYmxlLCBiZWNhdXNlIGl0IGlzIG5vdCBwcm90ZWN0ZWQgYnkgYHY0bDJfbG9ja2AuCgpOb3csIGlmIGB1c2J0dl9kaXNjb25uZWN0YCBmcmVlcyByZXNvdXJjZXMsIGluY2x1ZGluZyBwb3RlbnRpYWxseSBzZXR0aW5nIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgLCBhbmQgYSBmaWxlIGRlc2NyaXB0b3IgaXMgc3RpbGwgb3BlbiwgY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgY2FsbCBgdmIyX2ZvcF9yZWxlYXNlYCBhbmQgdGhlbiBgdXNidHZfc3RvcF9zdHJlYW1pbmdgLiAgSWYgdGhlIGNsb3NlIGhhcHBlbnMgKmFmdGVyKiBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucywgdGhlbiBgdXNidHYtJmd0O3VkZXZgIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNoZWNrIGluIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agd2lsbCBiZSBoaXQgYW5kIGVmZmVjdGl2ZWx5IHByZXZlbnQgdGhlIGlzc3VlLiBIb3dldmVyLCBpZiB0aGUgY2xvc2UgaGFwcGVucyAqZHVyaW5nKiBgdXNidHZfZGlzY29ubmVjdGAgdGhlcmUgaXMgYW4gYWN0dWFsIHJhY2UhCgpJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB2aWRlb191bnJlZ2lzdGVyX2RldmljZWAuIElmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBvcGVuLCBpdCBpcyBwb3NzaWJsZSBmb3IgYHZiMl9mb3BfcmVsZWFzZWAgdG8gYmUgY2FsbGVkICphZnRlciogIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCBhbmQgYXQgdGhhdCBwb2ludCB0aGUgcmFjZSBpcyBhdmVydGVkIGJlY2F1c2UgYHVzYnR2LSZndDt1ZGV2YCB3aWxsIGFscmVhZHkgYmUgYE5VTExgLgoKSG93ZXZlciwgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFsc28gY2FsbHMgYHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3RgLiBJIG5lZWQgdG8gZW5zdXJlIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgaXMgc2FmZSBpbiBhbGwgdGhlc2Ugc2NlbmFyaW9zLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBhZGRzIGBtdXRleF9sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7IHVzYnR2LSZndDt1ZGV2ID0gTlVMTDsgbXV0ZXhfdW5sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7YCBpbnNpZGUgYHVzYnR2X3ZpZGVvX2ZyZWVgLiAgVGhpcyBzaG91bGQgZml4IHRoZSByYWNlIGNvbmRpdGlvbiEgIEkgaGF2ZSB0byBub3RlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIEkgbmVlZCB0byBsaXN0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQ6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIGBWSURFT19VU0JUVmAuICBUaGUgYFZJREVPX1VTQlRWYCBjb25maWcgZGVwZW5kcyBvbiBgVklERU9fREVWICZhbXA7JmFtcDsgU05EYCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBgVklERU9fREVWYCBhbmQgYFNORGAganVzdCB0byBiZSBzYWZlLiAgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCB0byBjb25maXJtLCBidXQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbi4gVGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSURFT19VU0JUVlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFZJREVPX0RFViBcdTAwMjZcdTAwMjYgU05EXG4gICA1Olx0XHRzZWxlY3QgU05EX1BDTVxuICAgNjpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gICA3Olx0XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0OTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIFVTQlRWIGRyaXZlciwgYW5kIGl0IGxvb2tzIGxpa2UgaXRzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIG9uIGBWSURFT19ERVZgIGFuZCBgU05EYCBiZWluZyBlbmFibGVkIOKAkyBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmFjdGluZy4gQWgsIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQsIGNyaXRpY2FsbHksIHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBsb2NrIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGxvY2tpbmcsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMuIERvZXMgYHVzYnR2X3ZpZGVvX2ZyZWVgIGhvbGQgdGhlIGB2NGwyX2xvY2tgPyBPa2F5LCBJIHNlZSBpdCBkb2VzIGFjcXVpcmUgdGhlIGB2NGwyX2xvY2tgIGl0c2VsZjsgc28gdGhlIG11dGV4IHByb3RlY3Rpb24gaXMgc291bmQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQuIEV4Y2VsbGVudCwgdGhhdCBwYXJ0IHNlZW1zIHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4uIExldCYjMzk7cyBjb25zaWRlciB0aGUgdjRsMiBtZXRob2RzLiBJIHNlZSBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfZW51bV9pbnB1dGAsIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X2dfc3RkYCwgYW5kIGB1c2J0dl9nX2lucHV0YC4gVGhleSBsb29rIGxpa2Ugc2ltcGxlIGdldHRlcnMsIHNvIEkgd291bGRuJiMzOTt0IGV4cGVjdCB0aGVtIHRvIGJlIHByb2JsZW1hdGljIHdpdGggcmVzcGVjdCB0byBgdXNidHYtJmd0O3VkZXZgLCBidXQgSSBiZXR0ZXIgY2hlY2suIFdhaXQuLi4gYHVzYnR2X3F1ZXJ5Y2FwYCAqZG9lcyogdXNlIGB1c2J0di0mZ3Q7dWRldmA/IEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcbiA1ODE6XHRcdHVzYnR2X2F1ZGlvX3Jlc3VtZSh1c2J0dik7XG4gNTgyOlx0XG4gNTgzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBVU0JUVl9JU09DX1RSQU5TRkVSUzsgaSYjNDM7JiM0MzspIHtcbiA1ODQ6XHRcdFx0c3RydWN0IHVyYiAqaXA7XG4gNTg1Olx0XG4gNTg2Olx0XHRcdGlwID0gdXNidHZfc2V0dXBfaXNvX3RyYW5zZmVyKHVzYnR2KTtcbiA1ODc6XHRcdFx0aWYgKGlwID09IE5VTEwpIHtcbiA1ODg6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDU4OTpcdFx0XHRcdGdvdG8gc3RhcnRfZmFpbDtcbiA1OTA6XHRcdFx0fVxuIDU5MTpcdFx0XHR1c2J0di1cdTAwM2Vpc29jX3VyYnNbaV0gPSBpcDtcbiA1OTI6XHRcbiA1OTM6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoaXAsIEdGUF9LRVJORUwpO1xuIDU5NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDU5NTpcdFx0XHRcdGdvdG8gc3RhcnRfZmFpbDtcbiA1OTY6XHRcdH1cbiA1OTc6XHRcbiA1OTg6XHRcdHJldHVybiAwO1xuIDU5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgdXNidHZfcXVlcnljYXBgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbXkgYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIHRvIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBxdWVyeWluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgVVNCIFRWIHR1bmVyIG9yIGNhcHR1cmUgZGV2aWNlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0OgoKKiAgICoqQ29udGV4dDoqKiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBzaXR1YXRpb24/IEFtIEkgZGVidWdnaW5nIGFuIGlzc3VlIHdpdGggdmlkZW8gY2FwdHVyZSwgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBhIHNwZWNpZmljIGRldmljZSwgb3IgcGVyaGFwcyBidWlsZGluZyBhIG5ldyBkcml2ZXIgb3IgYXBwbGljYXRpb24gdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGVzZSB0eXBlcyBvZiBkZXZpY2VzPyBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aGlzIHF1ZXJ5IHdvdWxkIHNoYXBlIG15IGFwcHJvYWNoLgoqICAgKipQdXJwb3NlOioqIFdoYXQgc3BlY2lmaWNhbGx5IGFtIEkgdHJ5aW5nIHRvICpnZXQqIGZyb20gYHVzYnR2X3F1ZXJ5Y2FwYD8gQW0gSSBhZnRlciBzdXBwb3J0ZWQgdmlkZW8gZm9ybWF0cywgcmVzb2x1dGlvbnMsIGZyYW1lIHJhdGVzLCBhdWRpbyBjb2RlY3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB3aWxsIGRyaXZlIHRoZSBzdWJzZXF1ZW50IHN0ZXBzLgoqICAgKipJbXBsZW1lbnRhdGlvbjoqKiBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBuYW1lLCB0aGlzIHByb2JhYmx5IGludm9sdmVzIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwgb3IgaW9jdGwgb3BlcmF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBvciBwb3RlbnRpYWxseSBhIGxpYnJhcnkgZnVuY3Rpb24gZm9yIFdpbmRvd3Mgb3IgbWFjT1MuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgQVBJIGlzIGNyaXRpY2FsIGhlcmUuCiogICAqKlRvb2xpbmc6KiogSSYjMzk7ZCBiZSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgSSYjMzk7ZCB1c2UuIFdvdWxkIEkgbmVlZCB0byB1c2UgYHN0cmFjZWAgb3IgYSBzaW1pbGFyIHRyYWNpbmcgdG9vbCB0byBzZWUgdGhlIHN5c3RlbSBjYWxscyBiZWluZyBtYWRlPyBQZXJoYXBzIEkmIzM5O2Qgc3RhcnQgd2l0aCBhIGJhc2ljIHRlc3QgcHJvZ3JhbSB0byBjYWxsIGB1c2J0dl9xdWVyeWNhcGAgZGlyZWN0bHksIG9yIGRlbHZlIGludG8gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbi4KKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiAoa2VybmVsIGhlYWRlcnMsIHVzZXItc3BhY2UgbGlicmFyeSBkb2N1bWVudGF0aW9uLCBldGMuKS4gSWYgSSYjMzk7bSBsdWNreSwgdGhlcmUmIzM5O3MgZ29vZCBkb2N1bWVudGF0aW9uIHRoYXQgZXhwbGFpbnMgdGhlIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCB0eXBpY2FsIHVzYWdlIG9mIGB1c2J0dl9xdWVyeWNhcGAuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0IGlzIGVzc2VudGlhbCB0byByZW1lbWJlciB0aGF0IGV2ZW4gdGhlIG1vc3Qgd2VsbC1iZWhhdmVkIHNvZnR3YXJlIHdpbGwgc29tZXRpbWVzIGZhaWwsIHNvIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBjb2Rlcz8KKiAgICoqVHJvdWJsZXNob290aW5nOioqIElmIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgc2l0dWF0aW9uLCBhbSBJIHJlY2VpdmluZyB1bmV4cGVjdGVkIHJlc3VsdHM/IFRoaXMgd291bGQgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXAsIGFzIHdlbGwgYXMgd2hlcmUgdG8gYmVnaW4gbXkgaW5zcGVjdGlvbiBvZiB0aGUgY29kZS4KCkluIGVzc2VuY2UsIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbmFtZSwgcGxhY2luZyBpdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB2aWRlbyBjYXB0dXJlL1VTQiBkZXZpY2VzLCBhbmQgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGEgcGxhbiBvZiBhdHRhY2sgZm9yIGludmVzdGlnYXRpbmcgaXQuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgYWxsb3dzIG1lIHRvIHJhcGlkbHkgY29ubmVjdCB0aGUgZG90cyBhbmQgYW50aWNpcGF0ZSB0aGUgbGlrZWx5IGF2ZW51ZXMgb2YgaW5xdWlyeS4gTm93IGxldCYjMzk7cyBnZXQgaW50byBpdCwgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2J0dl9xdWVyeWNhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTU2Mj1zdGF0aWMgaW50IHVzYnR2X3N0YXJ0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDQtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjYwNTpzdGF0aWMgaW50IHVzYnR2X3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDYtXHRcdFx0XHRzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjY5NjpcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk3LVx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0NDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHVzYnR2X3F1ZXJ5Y2FwYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdXNidHZfcXVlcnljYXBgKioKCkFscmlnaHQsIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBpc24mIzM5O3QgaXQ/IEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVVNCIHZpZGVvLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHdpdGggcXVlcnlpbmcgY2FwYWJpbGl0aWVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgdGVsbHMgbWUgd2hhdCBhIGNvbm5lY3RlZCBVU0IgVFYgdHVuZXIgKG9yIGNhcHR1cmUgZGV2aWNlLCBtb3JlIGJyb2FkbHkpICpjYW4qIGRvLiBUaGlzIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gZGlzY292ZXIgc3VwcG9ydGVkIHJlc29sdXRpb25zLCBmcmFtZSByYXRlcywgdmlkZW8gZm9ybWF0cywgYXVkaW8gb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gdGhpbmdzIGxpa2Ugc3VwcG9ydGVkIGNvbnRyb2xzIChicmlnaHRuZXNzLCBjb250cmFzdCwgZXRjLikuIAoKU28sIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgc3RydWN0dXJlZCBkYXRhIHJldHJpZXZhbC4gSXQmIzM5O3MgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBzZW5kaW5nIHNvbWUgc29ydCBvZiByZXF1ZXN0IHRvIHRoZSBkZXZpY2UsIG1heWJlIHVzaW5nIGEgc3BlY2lmaWMgVVNCIENvbnRyb2wgVHJhbnNmZXIsIGFuZCB0aGVuIGludGVycHJldGluZyB0aGUgcmVzcG9uc2UgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZi4gSSBiZXQgaXQgd2lsbCByZWx5IG9uIFVTQiBWaWRlbyBDbGFzcyAoVVZDKSBzdGFuZGFyZHMsIGFzIHRoYXQmIzM5O3MgdGhlIGNvbW1vbiBmcmFtZXdvcmsgZm9yIHZpZGVvIGRldmljZXMgb3ZlciBVU0IuIEkgd291bGRu4oCZdCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgY29kZSB0aGF0IHJlZmxlY3QgdGhlIFVWQyBmb3JtYXQgZGVmaW5pdGlvbnMuCgpUaGUgY29kZSBpdHNlbGYgaXMgZ29pbmcgdG8gcmV2ZWFsIHRoZSBzcGVjaWZpYyBxdWVyaWVzIG1hZGUsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIHJlc3BvbnNlcy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBob3cgZG9lcyBpdCBkZWFsIHdpdGggZGV2aWNlcyB0aGF0IGRvbiYjMzk7dCBzdXBwb3J0IGNlcnRhaW4gY2FwYWJpbGl0aWVzLCBvciBpZiBjb21tdW5pY2F0aW9uIGZhaWxzPyBEb2VzIGl0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNldHRpbmdzLCByZXBvcnQgYW4gZXJyb3IsIG9yIHNpbXBseSBza2lwIHVuc3VwcG9ydGVkIGZlYXR1cmVzPyBBbHNvLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgZGV0ZXJtaW5lcyAqd2hpY2gqIHNwZWNpZmljIFVWQyBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIHF1ZXJpZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc29ydCBvZiBpZGVudGlmaWVyLCBvciBwZXJoYXBzIGFuIGVudW1lcmF0ZWQgbGlzdCwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbi4KCkluIHRoZSBiYWNrIG9mIG15IG1pbmQsIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBjYWNoZSBhbnkgb2YgdGhpcyBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkIHF1ZXJpZXM/IE9yIG1heWJlIGl0IGNhbiBsZXZlcmFnZSBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHByZXZpb3VzIHF1ZXJpZXMuIEFuZCwgbGFzdGx5LCBhcyBhIGJvbnVzLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zIGhhbmRsZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIHRob3NlIGFkdmFuY2VkIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDU6XHRzdGF0aWMgaW50IHVzYnR2X3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxuIDYwNjpcdFx0XHRcdFx0c3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKVxuIDYwNzpcdHtcbiA2MDg6XHRcdHN0cnVjdCB1c2J0diAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2MDk6XHRcbiA2MTA6XHRcdHN0cnNjcHkoY2FwLVx1MDAzZWRyaXZlciwgXCYjMzQ7dXNidHZcJiMzNDssIHNpemVvZihjYXAtXHUwMDNlZHJpdmVyKSk7XG4gNjExOlx0XHRzdHJzY3B5KGNhcC1cdTAwM2VjYXJkLCBcJiMzNDt1c2J0dlwmIzM0Oywgc2l6ZW9mKGNhcC1cdTAwM2VjYXJkKSk7XG4gNjEyOlx0XHR1c2JfbWFrZV9wYXRoKGRldi1cdTAwM2V1ZGV2LCBjYXAtXHUwMDNlYnVzX2luZm8sIHNpemVvZihjYXAtXHUwMDNlYnVzX2luZm8pKTtcbiA2MTM6XHRcdHJldHVybiAwO1xuIDYxNDpcdH1cbiA2MTU6XHRcbiA2MTY6XHRzdGF0aWMgaW50IHVzYnR2X2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXG4gNjE3Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2lucHV0ICppKVxuIDYxODpcdHtcbiA2MTk6XHRcdHN0cnVjdCB1c2J0diAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2MjA6XHRcbiA2MjE6XHRcdHN3aXRjaCAoaS1cdTAwM2VpbmRleCkge1xuIDYyMjpcdFx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XG4gNjIzOlx0XHRcdHN0cnNjcHkoaS1cdTAwM2VuYW1lLCBcJiMzNDtDb21wb3NpdGVcJiMzNDssIHNpemVvZihpLVx1MDAzZW5hbWUpKTtcbiA2MjQ6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Mjc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBVU0IgQ2FwdHVyZSBEZXZpY2UgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdXNidHZfcXVlcnljYXBgIGZ1bmN0aW9uIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGNvZGUgaXMgdXNpbmcgYGRldi0mZ3Q7dWRldmAgaGVyZSwgc3BlY2lmaWNhbGx5IGluIHRoaXMgYHVzYl9tYWtlX3BhdGhgIGNhbGwsIGB1c2JfbWFrZV9wYXRoKGRldi0mZ3Q7dWRldiwgY2FwLSZndDtidXNfaW5mbywgc2l6ZW9mKGNhcC0mZ3Q7YnVzX2luZm8pKTtgLiBJdCYjMzk7cyBzdGFydGluZyB0byBsb29rIGxpa2UgaWYgYGRldi0mZ3Q7dWRldmAgaXMgTlVMTCwgdGhlbiBgdXNiX21ha2VfcGF0aGAgd2lsbCBkZXJlZmVyZW5jZSB0aGF0IE5VTEwgcG9pbnRlciEgVGhhdCYjMzk7cyBiYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBsZXQgbWUgc2VlLi4uIEFoLCBoZXJlIGl0IGlzOgoKYGBgYwpzdGF0aWMgaW5saW5lIHZvaWQgdXNiX21ha2VfcGF0aChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBjaGFyICpidWYsIHNpemVfdCBzaXplKQp7CglpbnQgYWN0dWFsOwoJYWN0dWFsID0gc25wcmludGYoYnVmLCBzaXplLCAmIzM0O3VzYi0lcy0lcyYjMzQ7LCBkZXYtJmd0O2J1cy0mZ3Q7YnVzX25hbWUsCgkJCSAgZGV2LSZndDtkZXZwYXRoKTsKfQpgYGAKCk9rYXksIHRoZSBtb3JlIEkgbG9vayBhdCB0aGlzIHRoZSB3b3JzZSBpdCBnZXRzLiBJZiBgZGV2YCBpdHNlbGYgaXMgTlVMTCwgdGhlbiBgZGV2LSZndDtidXNgIHdpbGwgY2F1c2UgYSBjcmFzaCEgU28sIGl0JiMzOTtzIG5vdCBqdXN0IHRoZSBwb3RlbnRpYWwgTlVMTCBgZGV2LSZndDt1ZGV2YCBpc3N1ZSwgYnV0IGFsc28gYSBwb3RlbnRpYWwgTlVMTCBgZGV2YCBpc3N1ZSEgYHVzYnR2X3F1ZXJ5Y2FwYCBpcyBkZWZpbml0ZWx5IGEga2V5IGFyZWEgdG8gZm9jdXMgb24uCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGF0IHNvbWUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gc2VlIGlmIHRoaXMgcGF0dGVybiByZXBlYXRzIGl0c2VsZi4gSSYjMzk7bGwgY2hlY2sgYHVzYnR2X2VudW1faW5wdXRgLi4uIE5vcGUsIGRvZXNuJiMzOTt0IHVzZSBgZGV2LSZndDt1ZGV2YCBpbiB0aGF0IG9uZS4gV2hhdCBhYm91dCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGA/IE9rYXksIEkmIzM5O2xsIG1vdmUgb24gdG8gdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0fVxuIDYzNjpcdFxuIDYzNzpcdHN0YXRpYyBpbnQgdXNidHZfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsXG4gNjM4Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpXG4gNjM5Olx0e1xuIDY0MDpcdFx0aWYgKGYtXHUwMDNlaW5kZXggXHUwMDNlIDApXG4gNjQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0MjpcdFxuIDY0MzpcdFx0Zi1cdTAwM2VwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xuIDY0NDpcdFx0cmV0dXJuIDA7XG4gNjQ1Olx0fVxuIDY0NjpcdFxuIDY0NzpcdHN0YXRpYyBpbnQgdXNidHZfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXG4gNjQ4Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2Zvcm1hdCAqZilcbiA2NDk6XHR7XG4gNjUwOlx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2NTE6XHRcbiA2NTI6XHRcdGYtXHUwMDNlZm10LnBpeC53aWR0aCA9IHVzYnR2LVx1MDAzZXdpZHRoO1xuIDY1MzpcdFx0Zi1cdTAwM2VmbXQucGl4LmhlaWdodCA9IHVzYnR2LVx1MDAzZWhlaWdodDtcbiA2NTQ6XHRcdGYtXHUwMDNlZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjI1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ29uc2lkZXJpbmcgVVNCIEdhZGdldCBEcml2ZXJzIGZvciBhIFN5c3RlbSoqCgpSaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgKm5vKiBgdWRldmAgZm9yIHRoaXMgcGFydGljdWxhciBhcHBsaWNhdGlvbi4gVGhhdCYjMzk7cyBhIGNvbnN0cmFpbnQgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGxldCYjMzk7cyBleHBsb3JlIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgdXNidHZfZ19zdGRgIGlzIGEgdmlhYmxlIGRyaXZlciB0byBhY2hpZXZlIG15IGdvYWxzLiBJdCBpcyBhIHBvc3NpYmlsaXR5IGFuZCBJIG11c3QgY29uc2lkZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRyZXR1cm4gMDtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB1c2J0dl9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pXG4gNjY0Olx0e1xuIDY2NTpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjY2Olx0XHQqbm9ybSA9IHVzYnR2LVx1MDAzZW5vcm07XG4gNjY3Olx0XHRyZXR1cm4gMDtcbiA2Njg6XHR9XG4gNjY5Olx0XG4gNjcwOlx0c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiA2NzM6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY3NDpcdFxuIDY3NTpcdFx0aWYgKG5vcm0gXHUwMDI2IFVTQlRWX1RWX1NURClcbiA2NzY6XHRcdFx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIG5vcm0pO1xuIDY3NzpcdFxuIDY3ODpcdFx0cmV0dXJuIHJldDtcbiA2Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzMxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB1c2J0dl9nX3N0ZGAgTW9kdWxlJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgdXNidHZfZ19zdGRgIGNvZGUuIEZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhlIGFic2VuY2Ugb2YgYHVkZXZgIHVzYWdlIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG5hcnJvd3MgZG93biB3aGVyZSB0byBsb29rIGlmIHRoZXJlIGFyZSBgdWRldmAtcmVsYXRlZCBpc3N1ZXMuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gcGF5IGF0dGVudGlvbiB0byBoZXJlIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLiBUaGVzZSBhcmUgdGhlIHRvdWNocG9pbnRzLCB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGRldmljZSBhbmQgdmlkZW8gY2FwdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNhcmVmdWxseSBmb3IgYW55IGxvZ2ljIGVycm9ycyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCldhaXQgYSBtaW51dGUuLi4gSSBoYXZlIHRvIGRvdWJsZSBjaGVjazogYHVzYnR2X3NfaW5wdXRgIGlzIHVzaW5nIGB1ZGV2YCwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFxuIDY4MTpcdHN0YXRpYyBpbnQgdXNidHZfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKVxuIDY4MjpcdHtcbiA2ODM6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY4NDpcdFx0KmkgPSB1c2J0di1cdTAwM2VpbnB1dDtcbiA2ODU6XHRcdHJldHVybiAwO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxuIDY4OTpcdHtcbiA2OTA6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY5MTpcdFxuIDY5MjpcdFx0cmV0dXJuIHVzYnR2X3NlbGVjdF9pbnB1dCh1c2J0diwgaSk7XG4gNjkzOlx0fVxuIDY5NDpcdFxuIDY5NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xuIDY5NjpcdFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxuIDY5NzpcdFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcbiA2OTg6XHRcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXG4gNjk5Olx0XHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MjgKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBVU0JUViBEcml2ZXIgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXIgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEl0IGxvb2tzIGxpa2UgYHVzYnR2X3NlbGVjdF9pbnB1dGAgY2FsbHMgYHVzYnR2X3NldF9yZWdzYCwgd2hpY2ggdGhlbiB1c2VzIGB1ZGV2YC4gVGhhdCB0ZWxscyBtZSB0aGF0IGB1c2J0dl9zX2lucHV0YCBpcyBhbm90aGVyIGtleSBzeW1ib2wgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byB0aWdodGVuIHVwIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgSSYjMzk7bSByZWFsbHkgaGl0dGluZyB0aGUga2V5IGFyZWFzIHJlbGF0ZWQgdG8gdGhlIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkLgoKSGVyZSYjMzk7cyBteSByZWZpbmVkIGxpc3Q6CgoqICAgYHVzYnR2X2Rpc2Nvbm5lY3RgCiogICBgdXNidHZfcHJvYmVgCiogICBgdXNidHZfc19zdGRgCiogICBgdXNidHZfc19pbnB1dGAKKiAgIGB1c2J0dl9zX2N0cmxgCiogICBgdXNidHZfcXVlcnljYXBgCiogICBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYAoqICAgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYAoqICAgYHVzYnR2X2J1Zl9xdWV1ZWAKClllYWgsIHRoaXMgbG9va3Mgc29saWQuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgdXNiX2RldmljZWAgcG9pbnRlciBpcyBhY2Nlc3NlZCBhZnRlciBpdCYjMzk7cyBiZWVuIGZyZWVkLiBCeSBzZXR0aW5nIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGlzY29ubmVjdCwgdGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBjb25jdXJyZW50IFY0TDIgaW9jdGxzIGZyb20gYWNjZXNzaW5nIGJhZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYSBVU0IgZHJpdmVyIGV4cG9zaW5nIGEgVjRMMiBpbnRlcmZhY2UsIGZ1enppbmcgdmlhIGJvdGggVVNCIGFuZCBWNEwyIGZ1enppbmcgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyYXRpb25zIGxpa2U6CgoqICAgYFZJREVPX1VTQlRWYAoqICAgYE1FRElBX1NVUFBPUlRgCiogICBgTUVESUFfVVNCX1NVUFBPUlRgCiogICBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgCiogICBgVklERU9fREVWYAoqICAgYFNORGAKCkkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIFllcCwgaXQgZGVwZW5kcyBvbiBgVklERU9fREVWICZhbXA7JmFtcDsgU05EYCwgYHNlbGVjdHMgU05EX1BDTWAsIGFuZCBgc2VsZWN0cyBWSURFT0JVRjJfVk1BTExPQ2AsIHNvIG15IGN1cnJlbnQgbGlzdCBpcyBnb29kLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MgYW5kIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHY0bDJfbG9ja2AgbXV0ZXggZHVyaW5nIGRldmljZSBkaXNjb25uZWN0LiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgVjRMMiBpb2N0bHMgKGxpa2UgYFZJRElPQ19RVUVSWUNBUGAsIGBWSURJT0NfU19TVERgLCBgVklESU9DX1NfQ1RSTGAsIGV0Yy4pIGZyb20gYWNjZXNzaW5nIHRoZSBmcmVlZCBgdXNiX2RldmljZWAgcG9pbnRlci4gU2luY2UgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXggaW4gYSBVU0IgZHJpdmVyIHRoYXQgZXhwb3NlcyBhIFY0TDIgaW50ZXJmYWNlLCBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdmlhIFVTQiBhbmQgVjRMMiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHY0bDJfbG9ja2AgbXV0ZXggZHVyaW5nIGRldmljZSBkaXNjb25uZWN0LiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgVjRMMiBpb2N0bHMgKGxpa2UgYFZJRElPQ19RVUVSWUNBUGAsIGBWSURJT0NfU19TVERgLCBgVklESU9DX1NfQ1RSTGAsIGV0Yy4pIGZyb20gYWNjZXNzaW5nIHRoZSBmcmVlZCBgdXNiX2RldmljZWAgcG9pbnRlci4gU2luY2UgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXggaW4gYSBVU0IgZHJpdmVyIHRoYXQgZXhwb3NlcyBhIFY0TDIgaW50ZXJmYWNlLCBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdmlhIFVTQiBhbmQgVjRMMiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY3NDRlMzdkZTliYjJkOTNmZDI2MWQwNWU4ODRhMGIzNGVmODdiNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDoyNTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYwppbmRleCA2YzRmYWNmNGY0MWE3Li5iMzNiNTRmZGJkNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jCkBAIC0xMzYsOCAmIzQzOzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJdXNidHZfYXVkaW9fZnJlZSh1c2J0dik7CiAJdXNidHZfdmlkZW9fZnJlZSh1c2J0dik7CiAKLQl1c2J0di0mZ3Q7dWRldiA9IE5VTEw7Ci0KIAkvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmUKIAkgICBkb25lIHVzaW5nIGl0ICovCiAJdjRsMl9kZXZpY2VfcHV0KCZhbXA7dXNidHYtJmd0O3Y0bDJfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jCmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYwpAQCAtOTY4LDUgJiM0Mzs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dikKIAl2YjJfdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmFtcDt1c2J0di0mZ3Q7dmRldik7CiAJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3VzYnR2LSZndDt2NGwyX2xvY2spOwomIzQzOwl1c2J0di0mZ3Q7dWRldiA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3VzYnR2LSZndDt2NGwyX2xvY2spOwomIzQzOwogCXY0bDJfZGV2aWNlX3B1dCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGJ5IG1vdmluZyB0aGUgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO2AgYXNzaWdubWVudCBpbnRvIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgcHJvdGVjdGluZyBpdCB3aXRoIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI1OjU1LjI1NDg4MDc2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTMwNzMwOTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgYnkgbW92aW5nIHRoZSBgdXNidHYtXFx1MDAzZXVkZXYgPSBOVUxMO2AgYXNzaWdubWVudCBpbnRvIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgcHJvdGVjdGluZyBpdCB3aXRoIGB1c2J0di1cXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MjU6NTUuMjU0ODg2MTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM1NTc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjI1OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xcbmluZGV4IDZjNGZhY2Y0ZjQxYTcuLmIzM2I1NGZkYmQ2MjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXFxuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXFxuQEAgLTEzNiw4ICsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiBcXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcXG4gXFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XFxuIFxcbi1cXHR1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7XFxuLVxcbiBcXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcXG4gXFx0ICAgZG9uZSB1c2luZyBpdCAqL1xcbiBcXHR2NGwyX2RldmljZV9wdXQoXFx1MDAyNnVzYnR2LVxcdTAwM2V2NGwyX2Rldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXFxuaW5kZXggZGUwMzI4MTAwYTYwZC4uZWYwNjZkZjcxMjQ2OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXFxuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xcbkBAIC05NjgsNSArOTY4LDkgQEAgdm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuIFxcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2dXNidHYtXFx1MDAzZXZkZXYpO1xcbiBcXHR2NGwyX2RldmljZV9kaXNjb25uZWN0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9kZXYpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfbG9jayk7XFxuK1xcdHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG4rXFxuIFxcdHY0bDJfZGV2aWNlX3B1dChcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfZGV2KTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNTo1NS42NjkxNzg0MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzY0NTMzNTkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklERU9fVVNCVFZcIixcbiAgICBcIk1FRElBX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX1VTQl9TVVBQT1JUXCIsXG4gICAgXCJNRURJQV9DQU1FUkFfU1VQUE9SVFwiLFxuICAgIFwiVklERU9fREVWXCIsXG4gICAgXCJTTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2J0dl9kaXNjb25uZWN0XCIsXG4gICAgXCJ1c2J0dl9wcm9iZVwiLFxuICAgIFwidXNidHZfc19zdGRcIixcbiAgICBcInVzYnR2X3NfaW5wdXRcIixcbiAgICBcInVzYnR2X3NfY3RybFwiLFxuICAgIFwidXNidHZfcXVlcnljYXBcIixcbiAgICBcInVzYnR2X3N0YXJ0X3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfc3RvcF9zdHJlYW1pbmdcIixcbiAgICBcInVzYnR2X2J1Zl9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFVTQlRWIGRyaXZlciBieSBzZXR0aW5nIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3NDRlMzdkZTliYjJkOTNmZDI2MWQwNWU4ODRhMGIzNGVmODdiNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDoyNTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuaW5kZXggNmM0ZmFjZjRmNDFhNy4uYjMzYjU0ZmRiZDYyMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG5AQCAtMTM2LDggKzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbiBcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xuIFxuLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4tXG4gXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcbiBcdCAgIGRvbmUgdXNpbmcgaXQgKi9cbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcbmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG4rKysgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5AQCAtOTY4LDUgKzk2OCw5IEBAIHZvaWQgdXNidHZfdmlkZW9fZnJlZShzdHJ1Y3QgdXNidHYgKnVzYnR2KVxuIFx0dmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnVzYnR2LVx1MDAzZXZkZXYpO1xuIFx0djRsMl9kZXZpY2VfZGlzY29ubmVjdChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfbG9jayk7XG4rXHR1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuK1xuIFx0djRsMl9kZXZpY2VfcHV0KFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfZGV2KTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNTo1NS42NjkxODAzMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI0NjgzNjEwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIERyaXZlciBQYXRjaCBmb3IgV29ydGhGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGB1c2J0di1jb3JlLmNgIGFuZCBgdXNidHYtdmlkZW8uY2AsIHNwZWNpZmljYWxseSBtb3ZpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO2AgZnJvbSBgdXNidHZfZGlzY29ubmVjdGAgdG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCB3cmFwcGluZyBpdCBpbiBhIG11dGV4LiBUaGF0IHNjcmVhbXMgXCJ1c2UtYWZ0ZXItZnJlZVwiIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggdG8gbWUg4oCTIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyIGNvZGUuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgcHJvbXB0LiBJdCdzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgXCJ0ZWFyZG93biBjYWxsYmFja3NcIiBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4gSG9sZCBvbiwgYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGEgVVNCIGRyaXZlciBkaXNjb25uZWN0IGNhbGxiYWNrLi4uIHRoYXQncyBzaW1pbGFyISBJdOKAmXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgdW5wbHVnZ2VkIG9yIHRoZSBkcml2ZXIgaXMgdW5ib3VuZCwgbGlrZSBhIGAucmVtb3ZlYCBmdW5jdGlvbiBmb3IgUENJLlxuXG5UaGUgdHJpY2sgbm93IGlzIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIGlzIGNhbGxlZCAqZnJvbSogYHVzYnR2X2Rpc2Nvbm5lY3RgLiBTbywgbGV0J3MgZGlnIGludG8gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCBgdXNidHZfdmlkZW9fZnJlZWAgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzozOC4xMzc1NDQ0ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3NDUzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz02Nz1zdGF0aWMgaW50IHVzYnR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyNi1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTI3OnN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyOC17XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9MTU2PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0dl91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTE1OS1cXHQucHJvYmUgPSB1c2J0dl9wcm9iZSxcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTYwOlxcdC5kaXNjb25uZWN0ID0gdXNidHZfZGlzY29ubmVjdCxcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTYxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI3OjM4LjUzNTAwODQ1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Nzg4MTE0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXNzZWN0aW5nIHRoZSBVU0IgVFYgRHJpdmVyIERpc2Nvbm5lY3QqKlxuXG5SaWdodCwgc28gYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgdGhlIGAuZGlzY29ubmVjdGAgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIHRoZSBgdXNiX2RyaXZlcmAgc3RydWN0dXJlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgZm9jdXNlZCBzb2xlbHkgb24gdGhlIHRlYXJkb3duIHByb2Nlc3Mg4oCTIHNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgdGhlIGxvZ2ljIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGAgaXRzZWxmIGFuZCwgaW1wb3J0YW50bHksIHRoZSBmdW5jdGlvbiBgdXNidHZfdmlkZW9fZnJlZWAgd2hpY2ggYHVzYnR2X2Rpc2Nvbm5lY3RgIGNhbGxzLlxuXG5Ob3cgSSBuZWVkIHRvIHBhdXNlIGFuZCBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJ4oCZbSBzdGFydGluZyB0byBnZXQgdGhhdCBuaWdnbGluZyBmZWVsaW5nLiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBgdXNidHZfdmlkZW9fZnJlZWAgYWN0dWFsbHkgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGA/IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQuIElmIGl0J3MgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzLCB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIHRoYW4gdGhlIHBhdGNoIGluaXRpYWxseSBzdWdnZXN0cywgYW5kIHRoYXTigJlzIGdvaW5nIHRvIGltcGFjdCBteSByZXZpZXcgb2YgdGhpcyBwYXRjaC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI3OjQyLjIxMzgyMjEyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyOTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2J0dl92aWRlb19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTctXFx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjExODpcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE5LVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTEyNz1zdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEzNi1cXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTM3OlxcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzgtXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NjUtXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5NjY6dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05Njcte1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD0xMzI9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzM6dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo0Mi4yNTg0NTgwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzI0OTg5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIHVzYnR2IERyaXZlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9wcm9iZWAgKHNwZWNpZmljYWxseSBvbiB0aGUgZXJyb3IgcGF0aCkgYW5kIGB1c2J0dl9kaXNjb25uZWN0YC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD9cIiBUaGUgcHJvbXB0IEknbSBmb2xsb3dpbmcgZGlyZWN0cyBtZSB0byBza2lwIHBhdGNoZXMgaWYgdGhleSBwcmltYXJpbHkgaW52b2x2ZSB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAgdGhhdCBhcmUgKm9ubHkqIGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kcy5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBhICpVU0IqIGRyaXZlciwgbm90IFBDSSEgVGhlIGJlYXV0eSBvZiBVU0IgaXMgdGhlIGhvdC11bnBsdWcgY2FwYWJpbGl0aWVzIGFyZSBlYXNpbHkgZXhwbG9pdGVkIHVzaW5nIHN5emthbGxlciBhbmQgaXRzIGBkdW1teV9oY2RgLCBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgL2BzeXpfdXNiX2Rpc2Nvbm5lY3RgIHN5c3RlbSBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGUgcHJvbXB0J3MgcmVmZXJlbmNlIHRvICdQQ0kgaG90LXVucGx1ZycgKmltcGxpY2l0bHkqIGV4Y2x1ZGUgVVNCIGhvdC11bnBsdWc/XCIgXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgd29yZGluZzogXCJEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXCIgIEFoYSEgVGhlIHByb21wdCBpcyBzcGVjaWZpYyBhYm91dCBcIlBDSSBob3QtdW5wbHVnXCIuIEdpdmVuIHRoZSBleHRlbnNpdmUgVVNCIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXIsIGFuZCBnaXZlbiB0aGF0IFVTQiBob3QtdW5wbHVnIGlzIGV4cGxpY2l0bHkgZXhwbG9pdGVkIGJ5IHN5emthbGxlciB2aWEgbWVjaGFuaXNtcyBsaWtlIHZoY2kvZHVtbXlfaGNkLCBJJ20gbGVhbmluZyB0b3dhcmQgKmRlZmluaXRlbHkqIGZ1enppbmcgdGhpcy5cblxuVGhlcmUncyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGU6IGB1c2J0dl92aWRlb19mcmVlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZSBgdXNidHZfcHJvYmVgIGVycm9yIHBhdGguIFNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29tcGxldGUgYHVzYnR2X3Byb2JlYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo1Ny45ODM0NDk5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfdmlkZW9fZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTY3PXN0YXRpYyBpbnQgdXNidHZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE3LVxcdC8qIHRoaXMgd2lsbCB1bmRvIHRoZSB2NGwyX2RldmljZV9nZXQoKSAqL1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMTg6XFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz0xMjc9c3RhdGljIHZvaWQgdXNidHZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzYtXFx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjEzNzpcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo1OC4wMjgxODMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTAxMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1c2J0dl9wcm9iZWAncyBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHVzYnR2X3Byb2JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIFVTQiBUViBkZXZpY2UuIEknbSBnb2luZyB0byBtYXAgb3V0IGVhY2ggcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUsIHRoZSBlcnJvciBjb2RlcyByZXR1cm5lZCwgYW5kIGhvdyB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlY292ZXIgb3IsIHVsdGltYXRlbHksIGNsZWFuIHVwLiBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCB0b28sIGhvdyBpdCByZWxlYXNlcyBhbGxvY2F0ZWQgbWVtb3J5LCBoYW5kbGVzIGRldmljZSBkZXJlZ2lzdHJhdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjbGVhbnVwIHRoYXQgYXJlIGxpa2VseSBvciBsZXNzIHNvLiBJJ2xsIGZvY3VzIG9uIHRoZSBkaWZmZXJlbnQgZXhpdCBwb2ludHMgYW5kIGVuc3VyZSB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIG9yIGhhbmRsZWQgYXMgdGhleSBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODowMS4yMzkxOTg5NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRyZXQgPSB1c2J0dl92aWRlb19pbml0KHVzYnR2KTtcXG4gMTAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMDI6XFx0XFx0XFx0Z290byB1c2J0dl92aWRlb19mYWlsO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRyZXQgPSB1c2J0dl9hdWRpb19pbml0KHVzYnR2KTtcXG4gMTA1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMDY6XFx0XFx0XFx0Z290byB1c2J0dl9hdWRpb19mYWlsO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHQvKiBmb3Igc2ltcGxpY2l0eSB3ZSBleHBsb2l0IHRoZSB2NGwyX2RldmljZSByZWZlcmVuY2UgY291bnRpbmcgKi9cXG4gMTA5OlxcdFxcdHY0bDJfZGV2aWNlX2dldChcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfZGV2KTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiRnVzaGljYWkgVVNCVFYwMDcgQXVkaW8tVmlkZW8gR3JhYmJlclxcXFxuXFxcIik7XFxuIDExMjpcXHRcXHRyZXR1cm4gMDtcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0dXNidHZfYXVkaW9fZmFpbDpcXG4gMTE1OlxcdFxcdC8qIHdlIG11c3Qgbm90IGZyZWUgYXQgdGhpcyBwb2ludCAqL1xcbiAxMTY6XFx0XFx0djRsMl9kZXZpY2VfZ2V0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9kZXYpO1xcbiAxMTc6XFx0XFx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXFxuIDExODpcXHRcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0dXNidHZfdmlkZW9fZmFpbDpcXG4gMTIxOlxcdFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7XFxuIDEyMjpcXHRcXHRrZnJlZSh1c2J0dik7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdHJldHVybiByZXQ7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDEyODpcXHR7XFxuIDEyOTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6Mjg6MDEuMjM5MjcyMDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzM5Njg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCVFYgRHJpdmVyIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdXNidHZgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSB0d28gZGlzdGluY3QgcGxhY2VzOiBhbiBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgICh3aGljaCBpcyBhbHJlYWR5IGEgcmVkIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMpIGFuZCB0aGUgbW9yZSBwcmVkaWN0YWJsZSBgdXNidHZfZGlzY29ubmVjdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGZyb20ganVzdCBgdXNidHZfZGlzY29ubmVjdGAgdG8gYWxzbyBiZWluZyBleGVjdXRlZCB3aXRoaW4gYHVzYnR2X3ZpZGVvX2ZyZWVgLiBBbmQgY3J1Y2lhbGx5LCBpdCdzIG5vdyBndWFyZGVkIGJ5IGBtdXRleF9sb2NrKFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfbG9jaylgLlxuXG5UaGUgb2xkIGJlaGF2aW9yLCB3aXRoIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgICpvbmx5KiB3aXRoaW4gYHVzYnR2X2Rpc2Nvbm5lY3RgLCBzZWVtcyBpbmhlcmVudGx5IHByb2JsZW1hdGljLiBOb3csIHdpdGggaXQgYWxzbyBpbiBgdXNidHZfdmlkZW9fZnJlZWAsIGl0IGlzIGFsc28gZXhlY3V0ZWQgb24gdGhlIHByb2JlIGVycm9yIHBhdGguIFRoaXMgc2lnbmFscyBhbiBhdHRlbXB0IHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGB1ZGV2YCBwb2ludGVyLlxuXG5NeSBpbnR1aXRpb24gc2F5cyB0aGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSBpbnZvbHZpbmcgY29uY3VycmVudCBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSByZXNvbHZpbmcgYSByYWNlIGJldHdlZW4gYSBkaXNjb25uZWN0IGV2ZW50IGFuZCBzb21lIG90aGVyIFY0TDIgb3BlcmF0aW9uLiBUaGUgYG11dGV4X2xvY2tgIGhpbnRzIGF0IGEgVjRMMiBpb2N0bCBvciBzaW1pbGFyIGFjY2Vzcy4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBJdCdzIGEgcmFjZSBjb25kaXRpb24gaW4gYSBVU0IgZHJpdmVyLCBhbmQgc3l6a2FsbGVyIGlzICpwZXJmZWN0KiBmb3IgdGhpcyBraW5kIG9mIHNjZW5hcmlvLiBTeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6IFVTQiBkZXZpY2VzIGFuZCBWNEwyIGlvY3RscyBjb25jdXJyZW50bHksIHRyaWdnZXJpbmcgdGhpcyByYWNlIGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyB0aGUgdW5kZXJseWluZyBidWcuIExldCdzIG1ha2Ugc3VyZSB0aGUgVVNCVFYgY29uZmlnIGlzIGNvcnJlY3QgYW5kIGdldCB0aGlzIHRoaW5nIGZ1enplZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI4OjA4LjExMzI0Mjg5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDIyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJREVPX1VTQlRWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZzoyOmNvbmZpZyBWSURFT19VU0JUVlxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODowOC4xNTk5OTAwODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDc5NDUwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIFZJREVPX1VTQlRWKipcblxuT2theSwgdGltZSB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSURFT19VU0JUVmAuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgcmVsZWFzZSwgc28gYSBtZXRpY3Vsb3VzIGNoZWNrIGlzIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB3ZSBzdGFydD9cIiBQcm9iYWJseSB3aXRoIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGxpYnJhcnkgdXBkYXRlcyB0aGF0IGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucz8gSGFzIHRoZXJlIGJlZW4gYW55IHJlY2VudCB3b3JrIGluIHJlbGF0ZWQgcHJvamVjdHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IG1pZ2h0IHRvdWNoIHRoZSBVU0Igc3RhY2sgb3IgdmlkZW8gcHJvY2Vzc2luZyBwaXBlbGluZXMsIHRoYXQgY291bGQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcz9cblxuSSdtIHRoaW5raW5nOiAqTGV0J3MgbG9vayBhdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdC4qIFRoZW4sIEknbGwgbmVlZCB0byB3b3JrIG91dHdhcmRzIHRvIHRoZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcywgYmVjYXVzZSB0aG9zZSBhcmUgb2Z0ZW4gdGhlIHNuZWFreSBjdWxwcml0cy4gSSdsbCBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY2FsbCBncmFwaCB0byBhbnRpY2lwYXRlIHBvdGVudGlhbCBjb25mbGljdHMgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYFZJREVPX1VTQlRWYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIGNhcHR1cmUsIGVuY29kaW5nLCBhbmQgVVNCIGRldmljZSBoYW5kbGluZy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHZlcnNpb24gY29tcGF0aWJpbGl0eS4gQXJlIHdlIHBlZ2dlZCB0byBzcGVjaWZpYyB2ZXJzaW9ucz8gQXJlIHdlIHVzaW5nIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2VzLCBvciBhcmUgd2Ugc3R1Y2sgb24gb2xkZXIgdmVyc2lvbnMgdGhhdCBtaWdodCBoYXZlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBrbm93biBidWdzPyBJIG5lZWQgdG8gcmV2aWV3IGNoYW5nZSBsb2dzLCBpc3N1ZSB0cmFja2VycywgYW5kIG1heWJlIGV2ZW4gcHVsbCBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3Iga2V5IGRlcGVuZGVuY2llcyB0byBjaGVjayB0aGUgYWN0dWFsIGNvZGUuXG5cbipGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQqLiBJcyB0aGlzIGEgY3Jvc3MtcGxhdGZvcm0gcHJvamVjdD8gSWYgc28sIEkgbmVlZCB0byB0aGluayBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgT1Mgb3IgaGFyZHdhcmUgY29tYmluYXRpb24/IFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IGBWSURFT19VU0JUVmAgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgZXNwZWNpYWxseSB0aGUga2VybmVsLCBkaXNwbGF5IGRyaXZlcnMgYW5kIG90aGVyIGhhcmR3YXJlIHBlcmlwaGVyYWxzLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY3JlYXRlIGEgcm9idXN0IGRlcGVuZGVuY3kgbWFwLiBJJ2xsIHByb2JhYmx5IGJ1aWxkIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIOKAkyBtYXliZSBhIGdyYXBoIG9yIGRpYWdyYW0g4oCTIHRvIGNsZWFybHkgY29tbXVuaWNhdGUgdGhlIGRlcGVuZGVuY2llcyB0byB0aGUgdGVhbS4gVGhlIGVuZCBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHdlJ3JlIHVzaW5nIHRoZSByaWdodCB2ZXJzaW9ucywgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByaXNrcywgYW5kIHRoYXQgd2UgaGF2ZSBhIHBsYW4gZm9yIGRlYWxpbmcgd2l0aCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcywgYW5kIEkgY2FuJ3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6Mjg6NDAuMzA3OTM3OTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBWSURFT19VU0JUVlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gVklERU9fREVWIFxcdTAwMjZcXHUwMDI2IFNORFxcbiAgIDU6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gICA2OlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfVk1BTExPQ1xcbiAgIDc6XFx0XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2J0dlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODo0MC4zMDgwMDYwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQxMTU0MTUxOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb21wb25lbnQgRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byB0aGUgbmVlZCBmb3IgdGhlc2UgY29yZSBjb21wb25lbnRzOiBgVklERU9fVVNCVFZgLCBgVklERU9fREVWYCwgYW5kIGBTTkRgLiBNYWtlcyBzZW5zZSBzbyBmYXIuIFRoZW4sIGEgZmxhZyB3ZW50IHVwLiBJIGp1c3QgcmVtZW1iZXJlZCB0aGF0IGBWSURFT19ERVZgIGlzIG9mdGVuIG5lc3RlZCB3aXRoaW4gYE1FRElBX1NVUFBPUlRgLiBTbywgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIG9mIGBWSURFT19ERVZgLCBqdXN0IHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBgTUVESUFfU1VQUE9SVGAgZWNvc3lzdGVtLiBHb3R0YSBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IHRoZSBpbmNsdXNpb24gb2YgYE1FRElBX1NVUFBPUlRgIG1pZ2h0IGludHJvZHVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDEuNDYyMTYxODE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEzNjIzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJREVPX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL0tjb25maWc9MTU3PW1lbnUgXFxcIk1lZGlhIGNvcmUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0xNTktXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjE2MDpjb25maWcgVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE2MS1cXHR0cmlzdGF0ZSBcXFwiVmlkZW80TGludXggY29yZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDIuMDIzNTMxMjM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg4NzUwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDaGVja2luZyBWSURFT19ERVYgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBWSURFT19ERVZgIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIGxvb2sgaW4gdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcy4gR2l2ZW4gdGhhdCBgVklERU9fREVWYCBzb3VuZHMgbGlrZSBpdCBwZXJ0YWlucyB0byB2aWRlbyBkZXZpY2VzLCBgZHJpdmVycy9tZWRpYS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZWZpbml0aW9uIHJpZ2h0LCBiZWZvcmUgSSBzdGFydCB3b3JraW5nIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgaXMgbGlrZWx5IHRoZSByb290IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0NS4zOTI0MTA2NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugc29tZSB2aXJ0dWFsIHRlc3QgZHJpdmVyLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQgIEluIGNhc2Ugb2YgZG91YnRzLCBzYXkgTi5cXG4gMTUzOlxcdFxcdCAgU2F5IFkgd2hlbiB5b3UgaGF2ZSBhIHNvZnR3YXJlIGRlZmluZWQgcmFkaW8gZGV2aWNlLlxcbiAxNTQ6XFx0ZW5kbWVudSAjIG1lZGlhIGRldmljZSB0eXBlc1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXG4gMTU3OlxcdG1lbnUgXFxcIk1lZGlhIGNvcmUgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdHZpc2libGUgaWYgIU1FRElBX1NVUFBPUlRfRklMVEVSXFxuIDE1OTpcXHRcXG4gMTYwOlxcdGNvbmZpZyBWSURFT19ERVZcXG4gMTYxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaWRlbzRMaW51eCBjb3JlXFxcIlxcbiAxNjI6XFx0XFx0ZGVmYXVsdCBNRURJQV9DQU1FUkFfU1VQUE9SVCB8fCBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVCB8fCBNRURJQV9SQURJT19TVVBQT1JUIHx8IE1FRElBX1NEUl9TVVBQT1JUIHx8IE1FRElBX1BMQVRGT1JNX1NVUFBPUlQgfHwgTUVESUFfVEVTVF9TVVBQT1JUXFxuIDE2MzpcXHRcXHRkZXBlbmRzIG9uIChJMkMgfHwgSTJDPW4pXFxuIDE2NDpcXHRcXHRzZWxlY3QgUkFUSU9OQUxcXG4gMTY1OlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfVjRMMiBpZiBWSURFT0JVRjJfQ09SRVxcbiAxNjY6XFx0XFx0aGVscFxcbiAxNjc6XFx0XFx0ICBFbmFibGVzIHRoZSBWNEwyIEFQSSwgdXNlZCBieSBjYW1lcmFzLCBhbmFsb2cgVFYsIHZpZGVvIGdyYWJiZXJzLFxcbiAxNjg6XFx0XFx0ICByYWRpbyBkZXZpY2VzIGFuZCBieSBzb21lIGlucHV0IGRldmljZXMuXFxuIDE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDUuMzkyNTQ3MTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTkwMzc0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBWSURFT1xcX1VTQlRWIGFuZCBNRURJQVxcX1NVUFBPUlQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgVklERU9fVVNCVFZgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgY29yZSBzZXR0aW5nIEkgbmVlZCB0byBmb2N1cyBvbi4gQnV0LCBob2xkIG9uLi4uIGl0J3MgYWxzbyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1FRElBX1NVUFBPUlRgIGZsYWcuIEV2ZW4gdGhvdWdoIGBWSURFT19VU0JUVmAgaXMgdGhlIG1haW4gY29uZmlnLCBJIGNhbid0IGRpc21pc3MgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiBgTUVESUFfU1VQUE9SVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBkZWNpc2lvbnMgSSBtYWtlIHJlZ2FyZGluZyBgVklERU9fVVNCVFZgLCB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgY29uZmxpY3Qgb3IgbGltaXQgdGhlIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCBieSBgTUVESUFfU1VQUE9SVGAuIFRpbWUgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d2/igKYgYSBtb3JlIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIG5lZWRlZCB0byBlbnN1cmUgZnVsbCBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0OS4wOTE1OTYyNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg2OTQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVESUFfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL0tjb25maWc9MTA9c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL2NlYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MTI6bWVudWNvbmZpZyBNRURJQV9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aW1lZGlhIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc9MjM9aWYgTUVESUFfU1VQUE9SVFxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MjU6Y29uZmlnIE1FRElBX1NVUFBPUlRfRklMVEVSXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI2LVxcdGJvb2wgXFxcIkZpbHRlciBtZWRpYSBkcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0OS4yMjE0OTUwNTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDUyNTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBNZWRpYSBTdXBwb3J0IENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaGluZ2VzIG9uIHByb3BlciBtZWRpYSBzdXBwb3J0LiBUaGF0J3MgYSBnaXZlbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBNRURJQV9VU0JfU1VQUE9SVGAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHBsYWNlIGZvciBVU0ItYmFzZWQgbWVkaWEgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYW5kIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo1Mi45NDIwMjMxMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTU0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRURJQV9VU0JfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZz0zPWlmIFVTQiBcXHUwMDI2XFx1MDAyNiBNRURJQV9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy00LVxcbmRyaXZlcnMvbWVkaWEvdXNiL0tjb25maWc6NTptZW51Y29uZmlnIE1FRElBX1VTQl9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1lZGlhIFVTQiBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NTMuMDE4NTgyNzk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQzMTEyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVTQiBNZWRpYSBEcml2ZXIgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBNRURJQV9VU0JfU1VQUE9SVGAgZW5hYmxlZCBhcyB3ZWxsLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCdzIG5vdCBqdXN0IGFzc3VtZSBpdCdzIGFjdGl2YXRlZCwgdGhvdWdoLiBMZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGluIHRoZSBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZSBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIHdoZW4gZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcyBpbiB0aGVzZSBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NTYuODMyODk4NjY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGlmIFVTQiBcXHUwMDI2XFx1MDAyNiBNRURJQV9TVVBQT1JUXFxuICAgNDpcXHRcXG4gICA1OlxcdG1lbnVjb25maWcgTUVESUFfVVNCX1NVUFBPUlRcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1lZGlhIFVTQiBBZGFwdGVyc1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgRW5hYmxlIG1lZGlhIGRyaXZlcnMgZm9yIFVTQiBidXMuXFxuICAgOTpcXHRcXHQgIElmIHlvdSBoYXZlIHN1Y2ggZGV2aWNlcywgc2F5IFkuXFxuICAxMDpcXHRcXG4gIDExOlxcdGlmIE1FRElBX1VTQl9TVVBQT1JUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXFxuICAxNDpcXHRcXHRjb21tZW50IFxcXCJXZWJjYW0gZGV2aWNlc1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXFxcIlxcbiAgMTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9wd2MvS2NvbmZpZ1xcXCJcXG4gIDE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZ1xcXCJcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXZjL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMyOjU2LjgzMzAwOTU4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYyNTExMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCVFYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHVzYnR2YCByZWFsbHkgbmVzdGVkIHVuZGVyIGBNRURJQV9DQU1FUkFfU1VQUE9SVGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcy4gWWVwLCB0aGVyZSBpdCBpczogYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYHVzYnR2YCBpcyBjbGVhcmx5IGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAuIFRpbWUgdG8ganVtcCBpbnRvIGBkcml2ZXJzL21lZGlhL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFzIEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo1OS43OTU1MjMxOTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTA4MDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVESUFfQ0FNRVJBX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS9LY29uZmlnPTYyPW1lbnUgXFxcIk1lZGlhIGRldmljZSB0eXBlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02Ni0jXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjY3OmNvbmZpZyBNRURJQV9DQU1FUkFfU1VQUE9SVFxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMyOjU5Ljk4NjYxMjEwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA0Nzk0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyBmb3IgQ2FtZXJhIFN1cHBvcnQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbDogaXMgY2FtZXJhIHN1cHBvcnQgZXZlbiBlbmFibGVkIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbj8gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBtZWRpYSBkZXZpY2VzIGFyZSBkZWZpbmVkLiBTbywgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBmaWxlIGFuZCBzZWUgaWYgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkIGV4aXN0cyBhbmQgd2hhdCBpdHMgc3RhdHVzIGlzLiBUaGlzIHdpbGwgZGljdGF0ZSB3aGV0aGVyIEkgbmVlZCB0byBib3RoZXIgbG9va2luZyBmdXJ0aGVyIGludG8gY2FtZXJhLXJlbGF0ZWQgY29kZSBhdCBhbGwsIG9yIGlmIHRoaXMgd2hvbGUgYXJlYSBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZCBmb3IgdGhpcyBidWlsZC4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjA0Ljk5MTQxMDMzMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAgSWYgdW5zdXJlIHNheSBZLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRtZW51IFxcXCJNZWRpYSBkZXZpY2UgdHlwZXNcXFwiXFxuICA2MzpcXHRcXG4gIDY0OlxcdCNcXG4gIDY1OlxcdCMgTXVsdGltZWRpYSBzdXBwb3J0IC0gYXV0b21hdGljYWxseSBlbmFibGUgVjRMMiBhbmQgRFZCIGNvcmVcXG4gIDY2OlxcdCNcXG4gIDY3OlxcdGNvbmZpZyBNRURJQV9DQU1FUkFfU1VQUE9SVFxcbiAgNjg6XFx0XFx0Ym9vbFxcbiAgNjk6XFx0XFx0cHJvbXB0IFxcXCJDYW1lcmFzIGFuZCB2aWRlbyBncmFiYmVyc1xcXCIgaWYgTUVESUFfU1VQUE9SVF9GSUxURVJcXG4gIDcwOlxcdFxcdGRlZmF1bHQgeSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHdlYmNhbXMgYW5kIHZpZGVvIGdyYWJiZXJzLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIFNheSBZIHdoZW4geW91IGhhdmUgYSB3ZWJjYW0gb3IgYSB2aWRlbyBjYXB0dXJlIGdyYWJiZXIgYm9hcmQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVFxcbiAgNzc6XFx0XFx0Ym9vbFxcbiAgNzg6XFx0XFx0cHJvbXB0IFxcXCJBbmFsb2cgVFZcXFwiIGlmIE1FRElBX1NVUFBPUlRfRklMVEVSXFxuICA3OTpcXHRcXHRkZWZhdWx0IHkgaWYgIU1FRElBX1NVUFBPUlRfRklMVEVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjA0Ljk5MTU1MjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODA2MjM0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVTQlRWIFN1cHBvcnQgd2l0aGluIHRoZSBLZXJuZWwgTWVkaWEgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIGNsZWFyIHRoYXQgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBhIHJlcXVpcmVtZW50LiBOb3csIGhvbGQgb24sIEkgc2VlIGBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVGAgbWVudGlvbmVkLCBhbmQgdGhhdCdzIGdvdCBtZSB0aGlua2luZy4gVGhlIGB1c2J0dmAgZHJpdmVyIGlzIGRlc2NyaWJlZCBhcyBcIlVTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydCxcIiBhbmQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGxvZ2ljYWxseSBmYWxscyB1bmRlciB0aGUgY2FtZXJhIHN1cHBvcnQgdW1icmVsbGEuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBBaCwgaGVyZSB3ZSBnbywgbGluZSAxMyBhbmQgb253YXJkIHRlbGxzIHRoZSB0YWxlOlxuXG5gYGBcbmlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXG4gICAgY29tbWVudCBcIldlYmNhbSBkZXZpY2VzXCJcblxuICAgIHNvdXJjZSBcImRyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL0tjb25maWdcIlxuICAgIHNvdXJjZSBcImRyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi9zMjI1NS9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wiXG4gICAgc291cmNlIFwiZHJpdmVycy9tZWRpYS91c2IvenIzNjR4eC9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi9zdGt3ZWJjYW0vS2NvbmZpZ1wiXG4gICAgc291cmNlIFwiZHJpdmVycy9tZWRpYS91c2IvY3BpYTIvS2NvbmZpZ1wiXG5lbmRpZlxuYGBgXG5cbkJpbmdvISBgdXNidHZgIGlzIGV4cGxpY2l0bHkgKmluc2lkZSogdGhhdCBgaWYgTUVESUFfQ0FNRVJBX1NVUFBPUlRgIGJsb2NrLiBTbywgdGhlcmUgaXQgaXMg4oCTIFVTQlRWIHN1cHBvcnQgaXMgaW5kZWVkIGNvbnRpbmdlbnQgb24gYE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZyYW1ld29yayBpcyBzdHJ1Y3R1cmVkLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgdGFzaywga25vd2luZyB0aGF0IGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMzoyNS43OTc3OTA3NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXG4gIDExOlxcdGlmIE1FRElBX1VTQl9TVVBQT1JUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXFxuICAxNDpcXHRcXHRjb21tZW50IFxcXCJXZWJjYW0gZGV2aWNlc1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXFxcIlxcbiAgMTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9wd2MvS2NvbmZpZ1xcXCJcXG4gIDE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZ1xcXCJcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXZjL0tjb25maWdcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdGVuZGlmXFxuICAyMzpcXHRcXG4gIDI0OlxcdGlmIE1FRElBX0FOQUxPR19UVl9TVVBQT1JUXFxuICAyNTpcXHRcXHRjb21tZW50IFxcXCJBbmFsb2cgVFYgVVNCIGRldmljZXNcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvZ283MDA3L0tjb25maWdcXFwiXFxuICAyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWVkaWEvdXNiL2hkcHZyL0tjb25maWdcXFwiXFxuICAyOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MjUuNzk3ODU1ODQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQ4MDEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0JUViBEcml2ZXIncyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBjb25maXJtaW5nIGl0J3Mgb25seSBpbmNsdWRlZCB3aGVuIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGxvb2tzIGxpa2U6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIHNwZWNpZmljYWxseSBgVklERU9fVVNCVFZgLiBJIHJlY2FsbCB0aGF0IGBWSURFT19VU0JUVmAgaXRzZWxmIGRlcGVuZHMgb24gYFZJREVPX0RFVmAgYW5kIGBTTkRgLiBGb3J0dW5hdGVseSwgYFZJREVPX0RFVmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgIGlzLCBzbyB0aGF0J3MgaGFuZGxlZC4gYFNORGAgaXMgdGhlIHNvdW5kIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSB2aWRlbyBkcml2ZXIuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB3aGVyZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgc2VlIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgLiBgdXNidHZfdmlkZW9fZnJlZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgdXNidHZfZGlzY29ubmVjdGAgYW5kIGB1c2J0dl9wcm9iZWAuIEEga2V5IGRldGFpbCBoZXJlIGlzIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIGlzIG5vdCBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIGZvciB0ZWFyaW5nIGRvd24gdGhlIGhhcmR3YXJlLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIGhpZ2gtcGVyZm9ybWFuY2UgcGF0aC4gSG93ZXZlciwgdGhlIHJhY2UgY29uZGl0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgYmV0d2VlbiBgdXNidHZfZGlzY29ubmVjdGAgYW5kIHNvbWV0aGluZyBlbHNlLCBtYXliZSBWNEwyIGlvY3RscyBvciByZWd1bGFyIGZpbGUgb3BlcmF0aW9ucy5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhhdCdzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjMxLjk2MjY2MDkyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzODUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidjRsMl9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVzYnR2LVxcdTAwM2VidWZsb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjg5MTpcXHRtdXRleF9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTg5Mi1cXHRtdXRleF9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldmIycV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTQ0LVxcdHVzYnR2LVxcdTAwM2V2ZGV2LnF1ZXVlID0gXFx1MDAyNnVzYnR2LVxcdTAwM2V2YjJxO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTQ1OlxcdHVzYnR2LVxcdTAwM2V2ZGV2LmxvY2sgPSBcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfbG9jaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk0Ni1cXHR1c2J0di1cXHUwMDNldmRldi5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEUgfFxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz05NjY9dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3MC1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3Mi1cXHR1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5NzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3NC1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg9ODc9c3RydWN0IHVzYnR2IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTUtXFx0c3RydWN0IHZiMl9xdWV1ZSB2YjJxO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg6OTY6XFx0c3RydWN0IG11dGV4IHY0bDJfbG9jaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oLTk3LVxcdHN0cnVjdCBtdXRleCB2YjJxX2xvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjMyLjAyMzA1MDExOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg0OTU4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJ3MgQ29uY3VycmVuY3kqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AgdGVsbHMgbWUgdGhhdCB0aGUgYHY0bDJfbG9ja2AgaXMgdGhlIHByaW1hcnkgbG9jayBwcm90ZWN0aW5nIHRoZSBWNEwyIGRldmljZS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhlIFY0TDIgY29yZSB3aWxsIGhhbmRsZSBhY3F1aXJpbmcgdGhpcyBsb2NrIGZvciBhbnkgaW9jdGwgY2FsbHMuIFRoaXMgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGxpZXMgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQgdGhlc2UgVjRMMiBpb2N0bHMuIEkgbmVlZCB0byBkZWVwbHkgc2NydXRpbml6ZSBgdXNidHZfZGlzY29ubmVjdGAgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGVkLiBBbHNvLCBgdXNidHZfcHJvYmVgLCBzaW5jZSBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiwgaXMgYWxzbyBvZiBpbnRlcmVzdC4gQWRkaXRpb25hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgVjRMMiBpb2N0bHMgaW4gYHVzYnR2LXZpZGVvLmNgLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBhdCB0aGUgdGltZSB0aGUgZGV2aWNlIGlzIHVucGx1Z2dlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGVzZSBpb2N0bHMgYXJlIGJlaW5nIHByb3Blcmx5IHN5bmNocm9uaXplZCB3aXRoIHRoZSBkaXNjb25uZWN0IHJvdXRpbmUuIFRoaXMgd2lsbCByZXF1aXJlIGEgY2xvc2UgbG9vayBhdCB0aGUgbG9jayB1c2FnZSB3aXRoaW4gdGhlc2UgaW9jdGwgaGFuZGxlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGB1c2J0di12aWRlby5jYCBmaWxlIGFuZCBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaW4gdGVybXMgb2YgVjRMMiBpb2N0bCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzYuNzA4MDEwODgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTE5NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2NGwyX2lvY3RsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02ODg9c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk0LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6Njk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk2LVxcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzYuNzc3MjE2Nzg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTE5OTE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBgdXNidHZfaW9jdGxfb3BzYDpcblxuKipBbmFseXppbmcgYHVzYnR2X2lvY3RsX29wc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGlzIGB1c2J0dl9pb2N0bF9vcHNgIHN0cnVjdHVyZS4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyIHNwYWNlIGFuZCB0aGUgVVNCIFRWIGRyaXZlciBoYXBwZW5zLCByaWdodD8gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGRyaXZlciBkZWZpbmVzIGl0cyBzcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMsIHRoZSBjb21tYW5kcyB1c2Vyc3BhY2UgY2FuIHNlbmQgaXQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHRvIHNlZSB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDb21tYW5kcyBmb3IgdmlkZW8gY2FwdHVyZToqKiBBcmUgdGhlcmUgYGlvY3RsYCBjb21tYW5kcyB0byBzdGFydCwgc3RvcCwgY29uZmlndXJlIHRoZSB2aWRlbyBzdHJlYW0/IFRoaW5rIHNldHRpbmcgZnJhbWUgcmF0ZXMsIHJlc29sdXRpb25zLCBjb2RlY3M/IFRoYXQncyB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgYSBVU0IgVFYgdHVuZXIuXG4qICAgKipBdWRpbyBjb250cm9sPyoqIEhvcGVmdWxseSwgdGhlcmUncyBhIGNvcnJlc3BvbmRpbmcgc2V0IGZvciBhdWRpbyBzZXR0aW5ncyB0b28uIEV2ZW4gaWYgaXQncyBqdXN0IHBhc3NpbmcgaXQgb2ZmIHRvIHRoZSBBTFNBIGxheWVyIGl0J3MgaW1wb3J0YW50IHRvIHNlZSB3aGF0IGlzIHN1cHBvcnRlZC5cbiogICAqKlR1bmluZyBhbmQgQ2hhbm5lbCBjb250cm9sOioqIFRoaXMgaXMgY3J1Y2lhbC4gSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhlIGFjdHVhbCB0dW5pbmcgb2YgdGhlIGhhcmR3YXJlPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBmcmVxdWVuY3kgc2V0dGluZywgb3IgYXJlIHRoZXJlIG1vcmUgYWR2YW5jZWQgQVBJcyBmb3Igc2Nhbm5pbmcgYW5kIG1hbmFnaW5nIGNoYW5uZWxzP1xuKiAgICoqRGVtdXhpbmcgYW5kIERhdGEgSGFuZGxpbmc6KiogSSdtIGN1cmlvdXMgaWYgdGhlIGBpb2N0bGAgb3BzIHJldmVhbCBhbnkgZGV0YWlscyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBNUEVHIHN0cmVhbXMgb3Igb3RoZXIgdHJhbnNwb3J0IHN0cmVhbXMuIElzIGl0IGRvaW5nIGFueSBkZW11eGluZyBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBzZW5kaW5nIHRoZSByYXcgZGF0YSB1cCB0byB1c2Vyc3BhY2U/IFRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHRoZSBkcml2ZXIgZGVzaWduLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSBuZWVkIHRvIGtub3cgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBlcnJvcnMgYW5kIGFueSByZWxldmFudCBlcnJvciBjb2Rlcy5cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdsbCBleHBlY3QgdG8gc2VlIG1lY2hhbmlzbXMgZm9yIHJlc2VydmluZywgcmVsZWFzaW5nLCBhbmQgbWFuYWdpbmcgaGFyZHdhcmUgcmVzb3VyY2VzLlxuKiAgICoqVmVyc2lvbmluZzoqKiBBbHdheXMgd29ydGggYSBwZWVrLiBJZiB0aGVyZSdzIGEgdmVyc2lvbmluZyBzY2hlbWUsIGhvdyBhcmUgdGhleSBoYW5kbGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eT9cblxuVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlc2UgYGlvY3RsYCBvcGVyYXRpb25zIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gZGlzc2VjdGluZyBob3cgdGhpcyBVU0IgVFYgZGV2aWNlIGNvbW11bmljYXRlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NDEuMTY5MjEzNTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0cmV0dXJuIHVzYnR2X3NlbGVjdF9pbnB1dCh1c2J0diwgaSk7XFxuIDY5MzpcXHR9XFxuIDY5NDpcXHRcXG4gNjk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbiA2OTY6XFx0XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbiA2OTc6XFx0XFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcXG4gNjk4OlxcdFxcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXFxuIDY5OTpcXHRcXHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAwOlxcdFxcdC52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuIDcwMTpcXHRcXHQudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAyOlxcdFxcdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcXG4gNzAzOlxcdFxcdC52aWRpb2Nfc19zdGQgPSB1c2J0dl9zX3N0ZCxcXG4gNzA0OlxcdFxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuIDcwNTpcXHRcXHQudmlkaW9jX3NfaW5wdXQgPSB1c2J0dl9zX2lucHV0LFxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcXG4gNzA4OlxcdFxcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXFxuIDcwOTpcXHRcXHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxcbiA3MTA6XFx0XFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcXG4gNzExOlxcdFxcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxcbiA3MTI6XFx0XFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcXG4gNzEzOlxcdFxcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXFxuIDcxNDpcXHRcXHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXFxuIDcxNTpcXHR9O1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHVzYnR2X2ZvcHMgPSB7XFxuIDcxODpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gNzE5OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NDEuMTY5NDM4MTQyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwOTA1MzM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVVNCVFYgRGV2aWNlIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIGZ1bmN0aW9ucywgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9nX2lucHV0YCwgYW5kIGB1c2J0dl9zX2lucHV0YCwgdGhleSdyZSBkZWZpbml0ZWx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBzZWVtIHRvIGJlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgVVNCVFYgZGV2aWNlLiBJJ20gYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBkZXZpY2UgaXMgY29udHJvbGxlZCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGtleS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zX2lucHV0YC4gVGhleSBzZWVtIGxpa2UgdGhleSAqbWlnaHQqIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGB1c2J0di1cdTAwM2V1ZGV2YCBvYmplY3QsIHdoaWNoIHdvdWxkIGJlIHJlYWxseSBpbXBvcnRhbnQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYHVzYnR2X3Nfc3RkYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBhbSBpbmNsdWRpbmcgYWxsIG9mIHRoZSByZWxldmFudCBzeW1ib2xzIGZvciBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjQ5LjI1OTk3NjM5NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NTgwNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYnR2X3Nfc3RkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY2Mz1zdGF0aWMgaW50IHVzYnR2X2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjY5LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NjcwOnN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzEte1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTcwMi1cXHQudmlkaW9jX2dfc3RkID0gdXNidHZfZ19zdGQsXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo3MDM6XFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNzA0LVxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjQ5LjcxNDU2MTExOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1NDQyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB1c2J0dl9zX3N0ZGAgU291cmNlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gVGhlIGltbWVkaWF0ZSBpbXB1bHNlIGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB1c2J0dl9zX3N0ZGAuIEknbSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBrZXkgYXJlYXMgSSdsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIGFzcGVjdHMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgdG8gaGFuZGxlIHRoZSB2aWRlbyBzdHJlYW0gZGF0YSBhbmQgaXRzIHByb2Nlc3Npbmc/IEFyZSB0aGV5IHVzaW5nIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnM/IEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGZvbGxvd3MgYSBsb2dpY2FsIHN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHRoaXMgY2FuIGJyaW5nIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBzdGFuZGFyZCBhc3BlY3RzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkndmUgaGFuZGxlZCBwb3RlbnRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjUyLjk0MDAwNjMyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiA2NzM6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY3NDpcXHRcXG4gNjc1OlxcdFxcdGlmIChub3JtIFxcdTAwMjYgVVNCVFZfVFZfU1REKVxcbiA2NzY6XFx0XFx0XFx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIG5vcm0pO1xcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Nzk6XFx0fVxcbiA2ODA6XFx0XFxuIDY4MTpcXHRzdGF0aWMgaW50IHVzYnR2X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSlcXG4gNjgyOlxcdHtcXG4gNjgzOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2ODQ6XFx0XFx0KmkgPSB1c2J0di1cXHUwMDNlaW5wdXQ7XFxuIDY4NTpcXHRcXHRyZXR1cm4gMDtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcXG4gNjg5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NTIuOTQwMTMxNDk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjU4NTg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVzYnR2X3NlbGVjdF9ub3JtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIFVTQiB2aWRlbyBwaXBlbGluZS4gSXMgaXQgcmVsYXRlZCB0byBzdGFuZGFyZCBzZWxlY3Rpb24g4oCTIE5UU0MsIFBBTCwgU0VDQU0sIG9yIHNvbWUgc3BlY2lmaWMgcmVnaW9uYWwgdmFyaWFudD8gT3IgaXMgaXQgbW9yZSBncmFudWxhciwgZGVhbGluZyB3aXRoIGxpbmUgcmF0ZXMsIGZyYW1lIHJhdGVzLCBhbmQgcGl4ZWwgY2xvY2sgc2V0dGluZ3M/IEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBnb2luZyBhbnkgZGVlcGVyLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBpbmRpY2F0b3JzIOKAkyB2YXJpYWJsZSBuYW1lcyB0aGF0IGhpbnQgYXQgdGhlIHRhcmdldGVkIHN0YW5kYXJkLCBiaXRmaWVsZHMgdGhhdCBtaWdodCBlbmNvZGUgdGhlIHNlbGVjdGlvbiwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGlmIGl0J3Mgb3BlcmF0aW5nIGF0IGEgaGlnaGVyIGxldmVsLCBwb3RlbnRpYWxseSB1c2luZyBzb21lIGFic3RyYWN0aW9uIGxheWVyIGxpa2UgYSBWaWRlbzRMaW51eCAoVjRMKSBkcml2ZXIuXG5cbklmIGl0ICppcyogZGVhbGluZyB3aXRoIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiwgdGltaW5nIGNvbnN0cmFpbnRzLCBhbmQgcG90ZW50aWFsIHNpZGUtZWZmZWN0cy4gQXJlIHRoZXJlIGFueSBrbm93biBlcnJhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHNldHRpbmdzIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmU/IEknbGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gSG93IHJvYnVzdCBpcyB0aGlzIHNlbGVjdGlvbiBtZWNoYW5pc20/IEFyZSB0aGVyZSBmYWxsYmFjayBtZWNoYW5pc21zIGlmIGEgcGFydGljdWxhciBzdGFuZGFyZCBpcyBub3Qgc3VwcG9ydGVkPyBXaGF0IGhhcHBlbnMgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQ/XG5cbkVzc2VudGlhbGx5LCBJJ20gYWltaW5nIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gYXNzZXNzIGhvdyB3ZWxsIGl0J3MgaW50ZWdyYXRlZCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NTkuMTA1OTkxODU3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NTk1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfc2VsZWN0X25vcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9MTI4PXN0YXRpYyB1aW50MTZfdCB1c2J0dl9ub3JtX3RvXzE2Zl9yZWcodjRsMl9zdGRfaWQgbm9ybSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTQ4LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MTQ5OnN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTE1MC17XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMzQzLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQ0OlxcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCB1c2J0di1cXHUwMDNlbm9ybSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0zNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjcwPXN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTY3NS1cXHRpZiAobm9ybSBcXHUwMDI2IFVTQlRWX1RWX1NURClcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjY3NjpcXHRcXHRyZXQgPSB1c2J0dl9zZWxlY3Rfbm9ybSh1c2J0diwgbm9ybSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjU5LjIxNzY2MTI4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDU5NTIzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHRoaXMgVVNCIHZpZGVvIHByb2plY3Q6XG5cbioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdXNidHZfc2VsZWN0X25vcm1gIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IG5hbWUuIEl0J3Mgb2J2aW91c2x5IHRpZWQgdG8gc2VsZWN0aW5nIHRoZSB2aWRlbyBzdGFuZGFyZCBvciAnbm9ybScgZm9yIGEgVVNCIFRWIGRldmljZSDigJMgTlRTQywgUEFMLCBTRUNBTSwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNlbGVjdGlvbj8gSXMgaXQganVzdCBhIGhhcmR3YXJlIHNldHRpbmcsIG9yIGRvZXMgaXQgdHJpZ2dlciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIHBpeGVsIGNsb2NrLCBjb2xvciBzcGFjZSwgb3IgZXZlbiBETUEgc2V0dGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYWZ0ZXIgdGhpcyBwb2ludCwgYW5kIGhvdyBpdCBlZmZlY3RzIHRoaXMgY2hvaWNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcG9zc2libGUgZGVwZW5kZW5jaWVzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGNvbmRpdGlvbnMgdG8gYmUgYXdhcmUgb2YuLi4gbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMuLi4gb3IgZXZlbiwgd29yc2UsIGEgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBrZWVwIHRoZXNlIHRoaW5ncyBpbiBtaW5kLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjA2LjI3NzE5MDQ4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdC8qIFRoZXNlIGFyZSB0aGUgc2VyaWVzIG9mIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGVcXG4gMTUzOlxcdFxcdCAqIGRlY29kZXIgZm9yIGEgc3BlY2lmaWMgc3RhbmRhcmQuXFxuIDE1NDpcXHRcXHQgKiBUaGUgZmlyc3QgMjEgcmVnaXN0ZXIgd3JpdGVzIGFyZSBjb3BpZWQgZnJvbSB0aGVcXG4gMTU1OlxcdFxcdCAqIFNldHRpbmdzXFxcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXFxuIDE1NjpcXHRcXHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXFxuIDE1NzpcXHRcXHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XFxuIDE2MDpcXHRcXHRcXHQvKiBcXFwiQVZQQUxcXFwiIHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xcbiAxNjE6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMDAzLCAweDAwMDQgfSxcXG4gMTYyOlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDAxYSwgMHgwMDY4IH0sXFxuIDE2MzpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMDAsIDB4MDBkMyB9LFxcbiAxNjQ6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTBlLCAweDAwNzIgfSxcXG4gMTY1OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDEwZiwgMHgwMGEyIH0sXFxuIDE2NjpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMTIsIDB4MDBiMCB9LFxcbiAxNjc6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTE1LCAweDAwMTUgfSxcXG4gMTY4OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDExNywgMHgwMDAxIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjA2LjI3NzM1OTc2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTYzOTIyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB1c2J0dl9zZWxlY3Rfbm9ybWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHVzYnR2X3NlbGVjdF9ub3JtYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWUsIHByZXN1bWFibHkgc2VsZWN0cyBhIHZpZGVvIHN0YW5kYXJkLiBCdXQgd2hhdCdzIHJlYWxseSBpbXBvcnRhbnQgaXMgKmhvdyogaXQncyBkb2luZyB0aGlzIHNlbGVjdGlvbi4gVGhlIHRleHQgZXhwbGljaXRseSBwb2ludHMgb3V0IHRoYXQgaXQncyB3cml0aW5nIHRvIHJlZ2lzdGVycywgYW5kIGl0J3MgZG9pbmcgc28gKnZpYSBVU0IqLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24gSSBuZWVkIHRvIG1ha2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaW1wbGllcyBhIGxvdy1sZXZlbCBpbnRlcmFjdGlvbjsgaXQgaXNuJ3QgdXNpbmcgYSBoaWdoLWxldmVsIEFQSSBhYnN0cmFjdGlvbiBmb3IgdGhlIHRhc2suIEl0J3Mgc2VuZGluZyBjb21tYW5kcyBkaXJlY3RseSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgaW50ZXJuYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCByZWdpc3RlciB3cml0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGluZ3MgbGlrZSBiYW5kd2lkdGggdXRpbGl6YXRpb24sIGxhdGVuY3ksIGFuZCBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24vZGVidWdnaW5nIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNDQxMjg2MDM0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM3NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2J0dl9zZXRfcmVnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYz0xNzI9c3RhdGljIGludCB1c2J0dl9hdWRpb19zdGFydChzdHJ1Y3QgdXNidHYgKmNoaXApXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTIxNS1cXHQvKiBzdGFydGluZyB0aGUgc3RyZWFtICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYzoyMTY6XFx0dXNidHZfc2V0X3JlZ3MoY2hpcCwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTIxNy1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM9MjMxPXN0YXRpYyBpbnQgdXNidHZfYXVkaW9fc3RvcChzdHJ1Y3QgdXNidHYgKmNoaXApXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTI1MC1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jOjI1MTpcXHR1c2J0dl9zZXRfcmVncyhjaGlwLCBzZXR1cCwgQVJSQVlfU0laRShzZXR1cCkpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjUyLVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTQ2LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzo0NzppbnQgdXNidHZfc2V0X3JlZ3Moc3RydWN0IHVzYnR2ICp1c2J0diwgY29uc3QgdTE2IHJlZ3NbXVsyXSwgaW50IHNpemUpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9OTE9c3RhdGljIGludCB1c2J0dl9zZWxlY3RfaW5wdXQoc3RydWN0IHVzYnR2ICp1c2J0diwgaW50IGlucHV0KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0xMTItXFx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoxMTM6XFx0XFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIGNvbXBvc2l0ZSwgQVJSQVlfU0laRShjb21wb3NpdGUpKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTExNC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTExNS1cXHRjYXNlIFVTQlRWX1NWSURFT19JTlBVVDpcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExNjpcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc3ZpZGVvLCBBUlJBWV9TSVpFKHN2aWRlbykpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE3LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz0xNDk9c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTMtXFx0XFx0aWYgKG5vcm0gXFx1MDAyNiBudHNjX21hc2spXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNTQ6XFx0XFx0XFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIG50c2MsIEFSUkFZX1NJWkUobnRzYykpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjU1LVxcdFxcdGVsc2UgaWYgKG5vcm0gXFx1MDAyNiBwYWxfbWFzaylcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NjpcXHRcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgcGFsLCBBUlJBWV9TSVpFKHBhbCkpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjU3LVxcdFxcdGVsc2UgaWYgKG5vcm0gXFx1MDAyNiBWNEwyX1NURF9TRUNBTSlcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1ODpcXHRcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc2VjYW0sIEFSUkFZX1NJWkUoc2VjYW0pKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1OS1cXHRcXHRlbHNlXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI2Ny1cXHRcXHR9O1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MjY4OlxcdFxcdHJldCA9IHVzYnR2X3NldF9yZWdzKHVzYnR2LCBjZmcsIEFSUkFZX1NJWkUoY2ZnKSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNjktXFx0fVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz0yNzQ9c3RhdGljIGludCB1c2J0dl9zZXR1cF9jYXB0dXJlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTMzOS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjM0MDpcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaC0xMjktXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzA6aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oLTEzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNTA5NjY3MTA3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ0NjE2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgdXNidHZfc2V0X3JlZ3NgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGB1c2J0dl9zZXRfcmVnc2AuXCIgWWVwLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBiZWluZyBzZXQuIEl0J3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgc2V0dXAuIFRoaXMgZnVuY3Rpb24gaXMgYm91bmQgdG8gYmUgdGhlIGtleSB0byBhbGwgdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuIE15IGV4cGVyaWVuY2Ugc2F5cyB0aGF0IHRoaXMgaXMgYSBncmVhdCBwb2ludCB0byBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDoxNi41NjQxMzE5NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ3OlxcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCk7XFxuICA1MTpcXHRcXHRpbnQgaTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiAgNTQ6XFx0XFx0XFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcXG4gIDU1OlxcdFxcdFxcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldiwgcGlwZSwgVVNCVFZfUkVRVUVTVF9SRUcsXFxuICA1ODpcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuICA1OTpcXHRcXHRcXHRcXHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcXG4gIDYwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIDA7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTYuNTY0MjQ1OTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4NzY2MTIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gdGhlIFVTQlRWIERyaXZlcioqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIEknbSBsb29raW5nIGF0IHRoaXMgYHVzYnR2X3NldF9yZWdzYCBmdW5jdGlvbiwgYW5kIGl0J3MgdXNpbmcgYHVzYnR2LVx1MDAzZXVkZXZgLiBSaWdodCBhd2F5LCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGlmIGB1c2J0di1cdTAwM2V1ZGV2YCBpcyBldmVyIGBOVUxMYCwgdGhlbiBjYWxscyBsaWtlIGB1c2Jfc25kY3RybHBpcGVgIGFyZSBnb2luZyB0byB0cmlnZ2VyIGEgY3Jhc2guIEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBgdXNiX3NuZGN0cmxwaXBlYCBpcyBqdXN0IGEgbWFjcm8sIHJpZ2h0PyBJdCBleHBhbmRzIHRvIGEgY2FsY3VsYXRpb24gaW52b2x2aW5nIGBfX2NyZWF0ZV9waXBlYCB3aGljaCBpbiB0dXJuIHRyaWVzIHRvIGFjY2VzcyBgKGRldiktXHUwMDNlZGV2bnVtYC4gSWYgdGhhdCBgZGV2YCBpcyBudWxsLCBpdCdzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBwbGFpbiBhbmQgc2ltcGxlLlxuXG5TbywgKmRlZmluaXRlbHkqIGEgcHJvYmxlbSBpZiBgdXNidHYtXHUwMDNldWRldmAgaXMgTlVMTCB3aGVuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBJIHNlZSB0aGUgY29kZSBkZWxpYmVyYXRlbHkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7YCBpbnNpZGUgYSBgbXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AuIEFscmlnaHQsIGdvdCBpdC4gYHVzYnR2X3NldF9yZWdzYCBpcyBjYWxsZWQgZnJvbSBgdXNidHZfc2VsZWN0X25vcm1gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9zX3N0ZGAuIEFuZCBgdXNidHZfc19zdGRgIGlzIGNhbGxlZCBhcyBhIFY0TDIgaW9jdGwuIFRoZSBWNEwyIGNvcmUsIGJlaW5nIHdoYXQgaXQgaXMsIGF1dG9tYXRpY2FsbHkgZ3JhYnMgdGhlIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGB1c2J0dl9zX3N0ZGAgYmVjYXVzZSBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AuIFRoaXMgc2V0dXAgaXMgZXhwbGljaXRseSBwcmV2ZW50aW5nIGB1c2J0dl9zX3N0ZGAgZnJvbSBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBkaXNjb25uZWN0LlxuXG5CdXQsIGFuZCB0aGlzIGlzIGEgYmlnIGJ1dC4uLmRvZXMgYHVzYnR2X3Nfc3RkYCBpdHNlbGYgKmNoZWNrKiBpZiBgdXNidHYtXHUwMDNldWRldmAgaXMgTlVMTCBiZWZvcmUgaXQgdHJpZXMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdD8gVGhpcyBpcyBjcnVjaWFsLiBJZiBpdCBkb2Vzbid0LCB0aGF0IGxvY2sgaXMgb25seSBwYXJ0aWFsbHkgZWZmZWN0aXZlISBJJ3ZlIGdvdHRhIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zZWxlY3Rfbm9ybWAuIEdvdHRhIHNlZSBpZiB0aGVyZSdzIGEgbnVsbCBjaGVjaywgb3IgaWYgdGhleSBqdXN0IGJsaXRoZWx5IGFzc3VtZSB0aGF0IGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsIGFsd2F5cyBiZSB2YWxpZCwgd2hpY2ggZ2l2ZW4gdGhlIHByaW9yIGFzc2lnbm1lbnQsIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjIzLjk1MTkxMTQ2NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdC8qIFRoZXNlIGFyZSB0aGUgc2VyaWVzIG9mIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGVcXG4gMTUzOlxcdFxcdCAqIGRlY29kZXIgZm9yIGEgc3BlY2lmaWMgc3RhbmRhcmQuXFxuIDE1NDpcXHRcXHQgKiBUaGUgZmlyc3QgMjEgcmVnaXN0ZXIgd3JpdGVzIGFyZSBjb3BpZWQgZnJvbSB0aGVcXG4gMTU1OlxcdFxcdCAqIFNldHRpbmdzXFxcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXFxuIDE1NjpcXHRcXHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXFxuIDE1NzpcXHRcXHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XFxuIDE2MDpcXHRcXHRcXHQvKiBcXFwiQVZQQUxcXFwiIHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xcbiAxNjE6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMDAzLCAweDAwMDQgfSxcXG4gMTYyOlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDAxYSwgMHgwMDY4IH0sXFxuIDE2MzpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMDAsIDB4MDBkMyB9LFxcbiAxNjQ6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTBlLCAweDAwNzIgfSxcXG4gMTY1OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDEwZiwgMHgwMGEyIH0sXFxuIDE2NjpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMTIsIDB4MDBiMCB9LFxcbiAxNjc6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTE1LCAweDAwMTUgfSxcXG4gMTY4OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDExNywgMHgwMDAxIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjIzLjk1MjA5MDYxNloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA4OTE5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlIGluIGB1c2J0dl9zZXRfcmVnc2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJ20ganVzdCBxdWlja2x5IHRoaW5raW5nLCBpZiB0aGF0IGB1c2J0di1cdTAwM2V1ZGV2YCBwb2ludGVyIGlzIE5VTEwsIGRvZXMgdGhlIGB1c2J0dl9zZXRfcmVnc2AgZnVuY3Rpb24gYWN0dWFsbHkgZG8gYSBjaGVjayBvbiBpdD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBoZXJlLiBUaGlzIGlzIGEgY2xhc3NpYyBhcmVhIGZvciBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyByb2J1c3QuIEJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIHNhZmUuIExldCdzIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHJldmlldyBpdHMgbG9naWMgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjI3Ljk2MTAxMzUzMVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ3OlxcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCk7XFxuICA1MTpcXHRcXHRpbnQgaTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiAgNTQ6XFx0XFx0XFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcXG4gIDU1OlxcdFxcdFxcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldiwgcGlwZSwgVVNCVFZfUkVRVUVTVF9SRUcsXFxuICA1ODpcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuICA1OTpcXHRcXHRcXHRcXHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcXG4gIDYwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIDA7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MjcuOTYxMTM0NzExWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDA1OTk5OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJ3MgU3luY2hyb25pemF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoaXMgZml4LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldhaXQsIGB1c2J0dl9zZXRfcmVnc2AgZG9lc24ndCBjaGVjayBmb3IgYSBOVUxMIGB1c2J0di1cdTAwM2V1ZGV2YD8hIFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgdXNiX3NuZGN0cmxwaXBlYCFcIi4gQnV0IHRoZW4gSSByZWFsaXplZCwgaWYgYHVzYnR2LVx1MDAzZXVkZXZgICppcyogTlVMTCwgaG93IGRvZXMgdGhlIHBhdGNoIGFkZHJlc3MgdGhlIHJhY2UgY29uZGl0aW9uP1xuXG5UaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgdjRsMl9sb2NrYC4gSWYgYHVzYnR2LVx1MDAzZXVkZXZgIGlzIHNldCB0byBOVUxMICp1bmRlciogdGhlIHByb3RlY3Rpb24gb2YgYHY0bDJfbG9ja2AsIHRoZW4gYW55IElPQ1RMIHRoYXQgcnVucyBhZnRlciBgdjRsMl9sb2NrYCBpcyByZWxlYXNlZCBzaG91bGQgc2VlIGB1c2J0di1cdTAwM2V1ZGV2ID09IE5VTExgLCBidXQgZXZlbiB0aGVuLCBpdCBzZWVtcyBwcm9ibGVtYXRpYy4uLlxuXG5BaGEhIFRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBWNEwyIGNvcmUgdGhhdCByZWplY3RzIElPQ1RMcy4gSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGNoZWNrIGZvciBgdmlkZW9faXNfcmVnaXN0ZXJlZGAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB3aXRoaW4gdGhlIFY0TDIgY29yZS4gWWVzLCB0aGUgVjRMMiBjb3JlIGNoZWNrcyBgdmlkZW9faXNfcmVnaXN0ZXJlZCgpYCBiZWZvcmUgY2FsbGluZyBJT0NUTHMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuXG5cbmB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnVzYnR2LVx1MDAzZXZkZXYpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VgLiBUaGlzIGNsZWFycyB0aGUgYFY0TDJfRkxfUkVHSVNURVJFRGAgZmxhZy4gQW55IG5ldyBJT0NUTCBpcyByZWplY3RlZCBieSBgdmlkZW9faW9jdGwyYCBvciBgdjRsMl9pb2N0bGAgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC5cblxuQnV0IHdoYXQgYWJvdXQgYW4gSU9DVEwgdGhhdCBpcyBBTFJFQURZIHJ1bm5pbmc/IElmIGFuIElPQ1RMIGlzIGFscmVhZHkgcnVubmluZywgaXQgaG9sZHMgYHY0bDJfbG9ja2AuICBgdXNidHZfdmlkZW9fZnJlZWAgd2lsbCBibG9jayBvbiBgbXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AgdW50aWwgdGhlIElPQ1RMIGZpbmlzaGVzLiBUaGVuIGl0IHdpbGwgc2V0IGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgLiBTbyB0aGUgSU9DVEwgd2lsbCBmaW5pc2ggd2l0aCBgdXNidHYtXHUwMDNldWRldmAgc3RpbGwgdmFsaWQuIEFmdGVyIHRoZSBJT0NUTCBmaW5pc2hlcywgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFjcXVpcmVzIHRoZSBsb2NrLCBzZXRzIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTGAsIGFuZCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgdW5yZWdpc3RlcmVkLCBzbyBubyBuZXcgSU9DVExzIGNhbiBzdGFydC4gVGhlcmVmb3JlIGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsICpuZXZlciogYmUgTlVMTCB3aGlsZSBhbiBJT0NUTCBpcyBydW5uaW5nIVxuXG5UaGF0J3MgaXQhIFRoaXMgcGVyZmVjdGx5IGZpeGVzIHRoZSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBmb3IgYHVzYnR2LVx1MDAzZXVkZXZgLiBUaGUgVVNCIGNvcmUgZnJlZXMgYHVzYnR2LVx1MDAzZXVkZXZgIGFmdGVyIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLiBJZiBgdXNidHZfZGlzY29ubmVjdGAgKmRpZG4ndCogd2FpdCBmb3IgSU9DVExzIHRvIGZpbmlzaCwgYW4gSU9DVEwgY291bGQgYmUgcnVubmluZywgYHVzYnR2X2Rpc2Nvbm5lY3RgIHJldHVybnMsIHRoZSBVU0IgY29yZSBmcmVlcyBgdWRldmAsIGFuZCBCT09NLCBVQUYhIEJ5IGFjcXVpcmluZyBgdjRsMl9sb2NrYCBpbiBgdXNidHZfdmlkZW9fZnJlZWAgKHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9kaXNjb25uZWN0YCksIGl0IHdhaXRzIGZvciBhbGwgY3VycmVudGx5IHJ1bm5pbmcgSU9DVExzIHRvIGZpbmlzaC4gQW5kIHNpbmNlIGB2YjJfdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VgIHdhcyBhbHJlYWR5IGNhbGxlZCwgbm8gbmV3IElPQ1RMcyBjYW4gc3RhcnQuIFRoaXMgaXMgYSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBmaXguIEl0IHBlcmZlY3RseSBwcm90ZWN0cyB0aGUgVVNCIGRldmljZS5cblxuU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuLSBgdXNidHZfZGlzY29ubmVjdGBcbi0gYHVzYnR2X3Byb2JlYFxuLSBgdXNidHZfc19zdGRgXG4tIGB1c2J0dl9zX2lucHV0YFxuLSBgdXNidHZfcXVlcnljYXBgXG4tIGB1c2J0dl9lbnVtX2lucHV0YFxuLSBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGBcbi0gYHVzYnR2X2ZtdF92aWRfY2FwYFxuLSBgdXNidHZfZ19zdGRgXG4tIGB1c2J0dl9nX2lucHV0YFxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYHVzYnR2X2lvY3RsX29wc2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MzkuMzY3MTM5MzRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbiA2OTY6XFx0XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbiA2OTc6XFx0XFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcXG4gNjk4OlxcdFxcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXFxuIDY5OTpcXHRcXHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAwOlxcdFxcdC52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuIDcwMTpcXHRcXHQudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAyOlxcdFxcdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcXG4gNzAzOlxcdFxcdC52aWRpb2Nfc19zdGQgPSB1c2J0dl9zX3N0ZCxcXG4gNzA0OlxcdFxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuIDcwNTpcXHRcXHQudmlkaW9jX3NfaW5wdXQgPSB1c2J0dl9zX2lucHV0LFxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcXG4gNzA4OlxcdFxcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXFxuIDcwOTpcXHRcXHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxcbiA3MTA6XFx0XFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcXG4gNzExOlxcdFxcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxcbiA3MTI6XFx0XFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcXG4gNzEzOlxcdFxcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXFxuIDcxNDpcXHRcXHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjM5LjM2NzI5OTk0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzM0Nzg0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVVNCVFYgTW9kdWxlIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhlc2Ugc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIFVTQlRWIG1vZHVsZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGFuZCBgdXNidHZfZ19pbnB1dGAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBlc3NlbnRpYWwgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLlxuXG5Ob3csIGEgcXVpY2sgbm90ZSB0byBzZWxmOiBgdXNidHZfcHJvYmVgIGlzIGNsZWFybHkgZGVmaW5lZCB3aXRoaW4gYHVzYnR2LWNvcmUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB0aGUgaW52ZXN0aWdhdGlvbi5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2VhcmNoLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGlvY3RsIG9yIGZpbGUgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBnaXZlbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjQ3Ljk0MDc4MTgxMloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0fTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1c2J0dl9mb3BzID0ge1xcbiA3MTg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDcxOTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsXFxuIDcyMDpcXHRcXHQubW1hcCA9IHZiMl9mb3BfbW1hcCxcXG4gNzIxOlxcdFxcdC5vcGVuID0gdjRsMl9maF9vcGVuLFxcbiA3MjI6XFx0XFx0LnJlbGVhc2UgPSB2YjJfZm9wX3JlbGVhc2UsXFxuIDcyMzpcXHRcXHQucmVhZCA9IHZiMl9mb3BfcmVhZCxcXG4gNzI0OlxcdFxcdC5wb2xsID0gdmIyX2ZvcF9wb2xsLFxcbiA3MjU6XFx0fTtcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0c3RhdGljIGludCB1c2J0dl9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSxcXG4gNzI4OlxcdFxcdHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsXFxuIDcyOTpcXHRcXHR1bnNpZ25lZCBpbnQgKm5wbGFuZXMsIHVuc2lnbmVkIGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7XFxuIDczMjpcXHRcXHR1bnNpZ25lZCBzaXplID0gVVNCVFZfQ0hVTksgKiB1c2J0di1cXHUwMDNlbl9jaHVua3MgKiAyICogc2l6ZW9mKHUzMik7XFxuIDczMzpcXHRcXHR1bnNpZ25lZCBpbnQgcV9udW1fYnVmcyA9IHZiMl9nZXRfbnVtX2J1ZmZlcnModnEpO1xcbiA3MzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjQ3Ljk0MDkyNzEwMloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE1MjAyMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlcidzIFY0TDIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucyBhcmUsIGFzIGV4cGVjdGVkLCB1c2luZyB0aGUgZ2VuZXJpYyBWaWRlbzRMaW51eDIgYW5kIFZpZGVvIEJ1ZmZlciAyIGludGVyZmFjZXMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IHRoZSByZWFsIG1lYXQsIHRoZSB0aGluZ3MgdGhhdCBhcmUgdW5pcXVlIHRvIHRoaXMgc3BlY2lmaWMgYHVzYnR2YCBkZXZpY2UsIGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgaW4gdGhlIHF1ZXVpbmcgb3BlcmF0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgY29udHJvbHMgdGhlIGRhdGEgZmxvdywgYW5kIGhhbmRsZXMgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBxdWV1aW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBjcml0aWNhbCBwYXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjUyLjI1NjEzMjYyNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MTMxNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZiMl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9Nzc0PXN0YXRpYyB2b2lkIHVzYnR2X3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODEtXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo3ODI6c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODMtXFx0LnF1ZXVlX3NldHVwID0gdXNidHZfcXVldWVfc2V0dXAsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTktXFx0dXNidHYtXFx1MDAzZXZiMnEuYnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB1c2J0dl9idWYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTAwOlxcdHVzYnR2LVxcdTAwM2V2YjJxLm9wcyA9IFxcdTAwMjZ1c2J0dl92YjJfb3BzO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTAxLVxcdHVzYnR2LVxcdTAwM2V2YjJxLm1lbV9vcHMgPSBcXHUwMDI2dmIyX3ZtYWxsb2NfbWVtb3BzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo1Mi44MDAyNjkzNTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1ODkxNTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGB1c2J0dl92YjJfb3BzYCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGB1c2J0dl92YjJfb3BzYCBzdHJ1Y3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFZpZGVvNExpbnV4MiAoVjRMMikgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGFzcGVjdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGF0YSBmcm9tIHRoZSBVU0IgVFYgZGV2aWNlLCB3aGF0ZXZlciBpdCBtaWdodCBiZSwgZmxvd3MgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUg4oCTIHRoZSBgcXVldWVfc2V0dXBgLCBgYnVmX2luaXRgLCBgYnVmX3ByZXBhcmVgLCBgYnVmX3F1ZXVlYCwgYGJ1Zl9yZWxlYXNlYCwgYW5kIHRoZSBvdGhlcnMuIEVhY2ggb25lJ3MgcHVycG9zZSBpcyBjbGVhcjsgYHF1ZXVlX3NldHVwYCBpcyBjcml0aWNhbCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBjb25maWd1cmF0aW9uLiBUaGVuIHRoZXJl4oCZcyBob3cgYnVmZmVycyBhcmUgcHJlcGFyZWQsIHF1ZXVlZCwgYW5kIHJlbGVhc2VkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlciBhbGxvY2F0aW9uLCBtZW1vcnkgbWFwcGluZywgYW5kIHBvdGVudGlhbGx5IERNQSBvcGVyYXRpb25zLiBJJ20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBVU0IgdHJhbnNmZXIsIGNvbnNpZGVyaW5nIGJhbmR3aWR0aCBsaW1pdGF0aW9ucywgYW5kIGlmIHRoZSBkcml2ZXIgZW1wbG95cyBhbnkgY2xldmVyIHRlY2huaXF1ZXMgbGlrZSBzY2F0dGVyL2dhdGhlciBsaXN0cyB0byBtYXhpbWl6ZSBlZmZpY2llbmN5LiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgaG93IHRoaXMgc3RydWN0dXJlIGNvbGxhYm9yYXRlcyB3aXRoIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBWNEwyIHN0YWNrLCBsb29raW5nIGZvciBhbnkgc3VidGxlIGhpbnRzIG9uIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSBpZiB0aGlzIGNvZGUgYWRoZXJlcyB0byBiZXN0IHByYWN0aWNlcyBhbmQgaWYgdGhlcmUncyBhbnkgY2xldmVybmVzcyB0byBhZG1pcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo1OC40NTkxODg4NjVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdH1cXG4gNzgxOlxcdFxcbiA3ODI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XFxuIDc4MzpcXHRcXHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcXG4gNzg0OlxcdFxcdC5idWZfcXVldWUgPSB1c2J0dl9idWZfcXVldWUsXFxuIDc4NTpcXHRcXHQuc3RhcnRfc3RyZWFtaW5nID0gdXNidHZfc3RhcnRfc3RyZWFtaW5nLFxcbiA3ODY6XFx0XFx0LnN0b3Bfc3RyZWFtaW5nID0gdXNidHZfc3RvcF9zdHJlYW1pbmcsXFxuIDc4NzpcXHR9O1xcbiA3ODg6XFx0XFxuIDc4OTpcXHRzdGF0aWMgaW50IHVzYnR2X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKVxcbiA3OTA6XFx0e1xcbiA3OTE6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IGNvbnRhaW5lcl9vZihjdHJsLVxcdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHJsKTtcXG4gNzkzOlxcdFxcdHU4ICpkYXRhO1xcbiA3OTQ6XFx0XFx0dTE2IGluZGV4LCBzaXplO1xcbiA3OTU6XFx0XFx0aW50IHJldDtcXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XFxuIDc5ODpcXHRcXHRpZiAoIWRhdGEpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NTguNDU5OTMxMjE1WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTY1MTcxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIENvZGUgSG9va3MgZm9yIFVTQiBUViBEZXZpY2UgQ29udHJvbCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBob29rIGludG8gdGhpcyBVU0IgVFYgZHJpdmVyLiBgdXNidHZfcXVldWVfc2V0dXBgLCBgdXNidHZfYnVmX3F1ZXVlYCwgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AsIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFsbCBsb29rIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbGxpbmcgdGhlIGRldmljZSdzIGJlaGF2aW9yLiBXYWl0IGEgc2Vjb25kLCBgdXNidHZfc19jdHJsYC4uLiB0aGF0J3MgYSBWNEwyIGNvbnRyb2wgaGFuZGxlciwgaXNuJ3QgaXQ/IElmIGl0J3MgYSBWNEwyIGNvbnRyb2wgaGFuZGxlciwgaXQncyBsaWtlbHkgdXNpbmcgYHVzYnR2LVx1MDAzZXVkZXZgIHRvIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkZXZpY2UuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpZiBpdCdzIGNvcnJlY3QsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQncyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAzNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6MDEuNzc2NDUzNzYyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHR7XFxuIDc5MTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gY29udGFpbmVyX29mKGN0cmwtXFx1MDAzZWhhbmRsZXIsIHN0cnVjdCB1c2J0dixcXG4gNzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGN0cmwpO1xcbiA3OTM6XFx0XFx0dTggKmRhdGE7XFxuIDc5NDpcXHRcXHR1MTYgaW5kZXgsIHNpemU7XFxuIDc5NTpcXHRcXHRpbnQgcmV0O1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRkYXRhID0ga21hbGxvYygzLCBHRlBfS0VSTkVMKTtcXG4gNzk4OlxcdFxcdGlmICghZGF0YSlcXG4gNzk5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MDA6XFx0XFxuIDgwMTpcXHRcXHQvKlxcbiA4MDI6XFx0XFx0ICogUmVhZCBpbiB0aGUgY3VycmVudCBicmlnaHRuZXNzL2NvbnRyYXN0IHJlZ2lzdGVycy4gV2UgbmVlZCB0aGVtXFxuIDgwMzpcXHRcXHQgKiBib3RoLCBiZWNhdXNlIHRoZSB2YWx1ZXMgYXJlIGZvciBzb21lIHJlYXNvbiBpbnRlcmxlYXZlZC5cXG4gODA0OlxcdFxcdCAqL1xcbiA4MDU6XFx0XFx0aWYgKGN0cmwtXFx1MDAzZWlkID09IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwgY3RybC1cXHUwMDNlaWQgPT0gVjRMMl9DSURfQ09OVFJBU1QpIHtcXG4gODA2OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldixcXG4gODA3OlxcdFxcdFxcdFxcdHVzYl9yY3ZjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCksIFVTQlRWX0NPTlRST0xfUkVHLFxcbiA4MDg6XFx0XFx0XFx0XFx0VVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuIDgwOTpcXHRcXHRcXHRcXHQwLCBVU0JUVl9CQVNFICsgMHgwMjQ0LCAodm9pZCAqKWRhdGEsIDMsXFxuIDgxMDpcXHRcXHRcXHRcXHRVU0JfQ1RSTF9HRVRfVElNRU9VVCk7XFxuIDgxMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gODEyOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDgxMzpcXHRcXHR9XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdHN3aXRjaCAoY3RybC1cXHUwMDNlaWQpIHtcXG4gODE2OlxcdFxcdGNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzpcXG4gODE3OlxcdFxcdFxcdGluZGV4ID0gVVNCVFZfQkFTRSArIDB4MDI0NDtcXG4gODE4OlxcdFxcdFxcdHNpemUgPSAzO1xcbiA4MTk6XFx0XFx0XFx0ZGF0YVswXSBcXHUwMDI2PSAweGYwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTowMS43NzY2NDA2MDJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxNDIyODYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQlRWIENvbnRyb2wgUGF0aCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgZGlyZWN0bHkgYWNjZXNzZXMgYHVzYnR2LVx1MDAzZXVkZXZgLiBUaGF0J3MgdGhlIGZpcnN0IG9ic2VydmF0aW9uLiBOb3csIGxldCdzIGJhY2sgdXAgYSBiaXQuIFJpZ2h0LCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIGJ5IHRoZSBWNEwyIGNvcmUsIHNwZWNpZmljYWxseSB3aGVuIGEgY29udHJvbCBzZXR0aW5nIGlzIHRyaWdnZXJlZC4gQSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW1tZWRpYXRlbHk6IGRvZXMgdGhlIFY0TDIgY29yZSBob2xkIHRoZSBgdjRsMl9sb2NrYCB3aGVuIGl0IGNhbGxzIGB1c2J0dl9zX2N0cmxgPyBXZSAqbmVlZCogdG8ga25vdyB0aGlzIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQsIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGB1c2J0dl92aWRlb19pbml0YCwgdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSBjb250cm9scyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNsdWUgYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEwLjE5MDg3MzM4MVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzQ0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidjRsMl9jdHJsX2hhbmRsZXJfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz04ODQ9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTEwLVxcdC8qIGNvbnRyb2xzICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5MTE6XFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIDQpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTEyLVxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNToxMC4yNjU4NTQ3MzNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NzI2OTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdXNidHZfdmlkZW9faW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGNvZGUncyBzdHJ1Y3R1cmUgYW5kIG15IHByaW9yIGV4cGVyaWVuY2Ugd2l0aCBVU0IgdmlkZW8gY2FwdHVyZSBkcml2ZXJzLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgdXNidHZfdmlkZW9faW5pdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MTAuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpZGVvIGNhcHR1cmUgcGlwZWxpbmUgYmVnaW5zLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZGV2aWNlIGVudW1lcmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIChsaWtlIGZyYW1lIGJ1ZmZlcnMsIERNQSBjaGFubmVscyBpZiBpdCdzIHRoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUpLCBhbmQgcG9zc2libHkgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBVU0IgdHJhbnNmZXIgZGVzY3JpcHRvcnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZHJpdmVyIHNldHRpbmcgdXAgaXRzIGVuZHBvaW50cyBhbmQgbmVnb3RpYXRpbmcgdGhlIHZpZGVvIGZvcm1hdCBzZXR0aW5ncyB3aXRoIHRoZSBkZXZpY2UuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBkcml2ZXIgd2lsbCBiZWNvbWUgYXBwYXJlbnQuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBhbnkgVjRMMiBzdWJzeXN0ZW1zIGl0IG1pZ2h0IGJlIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMwOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEzLjgxMzEyNzgzN1oiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0dXNidHYtXFx1MDAzZXZiMnEub3BzID0gXFx1MDAyNnVzYnR2X3ZiMl9vcHM7XFxuIDkwMTpcXHRcXHR1c2J0di1cXHUwMDNldmIycS5tZW1fb3BzID0gXFx1MDAyNnZiMl92bWFsbG9jX21lbW9wcztcXG4gOTAyOlxcdFxcdHVzYnR2LVxcdTAwM2V2YjJxLnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQztcXG4gOTAzOlxcdFxcdHVzYnR2LVxcdTAwM2V2YjJxLmxvY2sgPSBcXHUwMDI2dXNidHYtXFx1MDAzZXZiMnFfbG9jaztcXG4gOTA0OlxcdFxcdHJldCA9IHZiMl9xdWV1ZV9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldmIycSk7XFxuIDkwNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA5MDY6XFx0XFx0XFx0ZGV2X3dhcm4odXNidHYtXFx1MDAzZWRldiwgXFxcIkNvdWxkIG5vdCBpbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZVxcXFxuXFxcIik7XFxuIDkwNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDg6XFx0XFx0fVxcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHQvKiBjb250cm9scyAqL1xcbiA5MTE6XFx0XFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIDQpO1xcbiA5MTI6XFx0XFx0djRsMl9jdHJsX25ld19zdGQoXFx1MDAyNnVzYnR2LVxcdTAwM2VjdHJsLCBcXHUwMDI2dXNidHZfY3RybF9vcHMsXFxuIDkxMzpcXHRcXHRcXHRcXHRWNEwyX0NJRF9DT05UUkFTVCwgMCwgMHgzZmYsIDEsIDB4MWQwKTtcXG4gOTE0OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTU6XFx0XFx0XFx0XFx0VjRMMl9DSURfQlJJR0hUTkVTUywgMCwgMHgzZmYsIDEsIDB4MWMwKTtcXG4gOTE2OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTc6XFx0XFx0XFx0XFx0VjRMMl9DSURfU0FUVVJBVElPTiwgMCwgMHgzZmYsIDEsIDB4MjAwKTtcXG4gOTE4OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTk6XFx0XFx0XFx0XFx0VjRMMl9DSURfSFVFLCAtMHhkZmYsIDB4ZGZmLCAxLCAweDAwMCk7XFxuIDkyMDpcXHRcXHR2NGwyX2N0cmxfbmV3X3N0ZChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIFxcdTAwMjZ1c2J0dl9jdHJsX29wcyxcXG4gOTIxOlxcdFxcdFxcdFxcdFY0TDJfQ0lEX1NIQVJQTkVTUywgMHgwLCAweGZmLCAxLCAweDYwKTtcXG4gOTIyOlxcdFxcdHJldCA9IHVzYnR2LVxcdTAwM2VjdHJsLmVycm9yO1xcbiA5MjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gOTI0OlxcdFxcdFxcdGRldl93YXJuKHVzYnR2LVxcdTAwM2VkZXYsIFxcXCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xcXFxuXFxcIik7XFxuIDkyNTpcXHRcXHRcXHRnb3RvIGN0cmxfZmFpbDtcXG4gOTI2OlxcdFxcdH1cXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0LyogdjRsMiBzdHJ1Y3R1cmUgKi9cXG4gOTI5OlxcdFxcdHVzYnR2LVxcdTAwM2V2NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSBcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEzLjgxMzI2NzQ2N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDAwNDM5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVU0JUViBMb2NraW5nIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXIncyBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBgdXNidHYtXHUwMDNlY3RybC5sb2NrYCBub3QgYmVpbmcgc2V0LCBpbXBseWluZyB0aGUgZHJpdmVyIG1pZ2h0IHJlbHkgb24gYW4gaW50ZXJuYWwgbG9jaywgcmlnaHQ/IEJ1dCB0aGVuIEkgbm90aWNlZCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIHdoZW4gYFZJRElPQ19TX0NUUkxgIG9yIGBWSURJT0NfU19FWFRfQ1RSTFNgIGlzIGNhbGxlZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGB2NGwyX2lvY3RsYCBob2xkIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGBWSURJT0NfU19DVFJMYD8gQWhhLCB5ZXMhIGB1c2J0di1cdTAwM2V2ZGV2LmxvY2sgPSBcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2s7YCBjb25maXJtcyB0aGF0IGB2aWRlb19pb2N0bDJgIHdpbGwgaW5kZWVkIGFjcXVpcmUgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AgYmVmb3JlIGRpc3BhdGNoaW5nICphbnkqIGlvY3RsLCBpbmNsdWRpbmcgYFZJRElPQ19TX0NUUkxgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2NrIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHY0bDJfY3RybF9oYW5kbGVyX3NldHVwYCBpcyBjYWxsZWQgZnJvbSBgdXNidHZfdmlkZW9faW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHVzYnR2X3Byb2JlYC4gU28gYHVzYnR2X3NfY3RybGAgaXMgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIHdoZW4gY2FsbGVkIHZpYSBpb2N0bC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cGAgZG9lc24ndCBob2xkIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLCBidXQgaXQncyBjYWxsZWQgZHVyaW5nIHByb2JlLCBzbyB0aGVyZSdzIG5vIHJhY2UuIExvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIGFzc2Vzc2luZyB0aGlzLlxuXG5Ob3csIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIHJldmlldzogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgYXJlIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldmIycV9sb2NrYCwgbm90IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBPa2F5LCBsZXQncyByZXZpc2l0IGB1c2J0dl92aWRlb19pbml0YC4gIFllcywgYHVzYnR2LVx1MDAzZXZiMnEubG9jayA9IFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jaztgLiBUaGVyZWZvcmUgYHZiMl9pb2N0bF9zdHJlYW1vbmAgd2lsbCBhY3F1aXJlIGB1c2J0di1cdTAwM2V2YjJxX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgY29ycmVjdCBsb2NrIHVzYWdlIGluIHRoZSBzdHJlYW1pbmcgcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBpcyB1c2luZyBgdXNidHYtXHUwMDNldWRldmAgZm9yIGFueSBwdXJwb3NlLCB0aGlzIG1pZ2h0IGJlIGEgcG9pbnQgb2YgY29uZmxpY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzMwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6MjEuODEzNzA5MTY5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc0MDpcXHRcXHRzaXplc1swXSA9IHNpemU7XFxuIDc0MTpcXHRcXG4gNzQyOlxcdFxcdHJldHVybiAwO1xcbiA3NDM6XFx0fVxcbiA3NDQ6XFx0XFxuIDc0NTpcXHRzdGF0aWMgdm9pZCB1c2J0dl9idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKVxcbiA3NDY6XFx0e1xcbiA3NDc6XFx0XFx0c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7XFxuIDc0ODpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi1cXHUwMDNldmIyX3F1ZXVlKTtcXG4gNzQ5OlxcdFxcdHN0cnVjdCB1c2J0dl9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3QgdXNidHZfYnVmLCB2Yik7XFxuIDc1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRpZiAodXNidHYtXFx1MDAzZXVkZXYgPT0gTlVMTCkge1xcbiA3NTM6XFx0XFx0XFx0dmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTtcXG4gNzU0OlxcdFxcdFxcdHJldHVybjtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnVzYnR2LVxcdTAwM2VidWZsb2NrLCBmbGFncyk7XFxuIDc1ODpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZidWYtXFx1MDAzZWxpc3QsIFxcdTAwMjZ1c2J0di1cXHUwMDNlYnVmcyk7XFxuIDc1OTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ1c2J0di1cXHUwMDNlYnVmbG9jaywgZmxhZ3MpO1xcbiA3NjA6XFx0fVxcbiA3NjE6XFx0XFxuIDc2MjpcXHRzdGF0aWMgaW50IHVzYnR2X3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNvdW50KVxcbiA3NjM6XFx0e1xcbiA3NjQ6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAodXNidHYtXFx1MDAzZXVkZXYgPT0gTlVMTClcXG4gNzY3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHR1c2J0di1cXHUwMDNlbGFzdF9vZGQgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNToyMS44MTM4MTQ5NTlaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MDMwNjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlcidzIExvY2tpbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21lIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYXJvdW5kIHRoZSBgdXNidHYtXHUwMDNldWRldmAgcG9pbnRlci4gIFRoZSBmdW5jdGlvbnMgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9idWZfcXVldWVgIGFyZSBjaGVja2luZyBpZiBgdXNidHYtXHUwMDNldWRldiA9PSBOVUxMYC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiVWggb2gsIGlzIHRoaXMgcHJvcGVybHkgc3luY2hyb25pemVkP1wiIE15IGluaXRpYWwgY29uY2VybiB3YXMgdGhhdCB0aGUgY2hlY2sgd2FzIG9ubHkgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2YjJxX2xvY2tgLCBub3QgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIHNldHMgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AsIHdoaWNoIHJhaXNlZCB0aGUgcXVlc3Rpb24gaWYgdGhlcmUncyBhIHJhY2Ugd2l0aCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYC4gVGhlbiBJIHRob3VnaHQgaXQgdGhyb3VnaC4uLiBMZXQncyBzZWU6IGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIGdldHMgY2FsbGVkIGJ5IGB2YjJfaW9jdGxfc3RyZWFtb25gLiBPa2F5LCBgdmIyX2lvY3RsX3N0cmVhbW9uYCBpcyBhbiBpb2N0bC4gQWgsIGFuZCBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AuIFNvLCBgdmlkZW9faW9jdGwyYCBpcyBnb2luZyB0byBhY3F1aXJlIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGB2YjJfaW9jdGxfc3RyZWFtb25gLCBhbmQgVEhFTiwgYHZiMl9pb2N0bF9zdHJlYW1vbmAgd291bGQgYWNxdWlyZSBgdXNidHYtXHUwMDNldmIycV9sb2NrYC4gU28sIGFjdHVhbGx5LCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBJUyBwcm90ZWN0ZWQgYnkgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuXG5cbk9rYXksIGJ1dCB3aGF0IGFib3V0IGB1c2J0dl9idWZfcXVldWVgPyBJdCdzIGNhbGxlZCBieSBgdmIyX2lvY3RsX3FidWZgLiBTaW5jZSBgdmIyX2lvY3RsX3FidWZgIGlzIGFsc28gYW4gaW9jdGwsIHRoYXQgbWVhbnMgaXQncyBhbHNvIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldjRsMl9sb2NrYCEgVGhhdCdzIGdvb2QuXG5cblNvLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0bHkgc3luY2hyb25pemVzIHRoZSB1c2FnZSBvZiBgdXNidHYtXHUwMDNldWRldmAsIGVuc3VyaW5nIGl0J3Mgbm90IGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGZyZWVkIGluIGlvY3RsIGNhbGxzLiBUaGF0J3MgYSByZWxpZWYuIEl0J3MgcHJvcGVybHkgbG9ja2VkLlxuXG5Ob3csIHdhaXQuLi4gV2hhdCBhYm91dCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggYWxsIG9mIHRoZXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjI4LjQ4NDEyNTQ2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHR1c2J0di1cXHUwMDNlc2VxdWVuY2UgPSAwO1xcbiA3NzE6XFx0XFx0cmV0dXJuIHVzYnR2X3N0YXJ0KHVzYnR2KTtcXG4gNzcyOlxcdH1cXG4gNzczOlxcdFxcbiA3NzQ6XFx0c3RhdGljIHZvaWQgdXNidHZfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpXFxuIDc3NTpcXHR7XFxuIDc3NjpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdGlmICh1c2J0di1cXHUwMDNldWRldilcXG4gNzc5OlxcdFxcdFxcdHVzYnR2X3N0b3AodXNidHYpO1xcbiA3ODA6XFx0fVxcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgdXNidHZfdmIyX29wcyA9IHtcXG4gNzgzOlxcdFxcdC5xdWV1ZV9zZXR1cCA9IHVzYnR2X3F1ZXVlX3NldHVwLFxcbiA3ODQ6XFx0XFx0LmJ1Zl9xdWV1ZSA9IHVzYnR2X2J1Zl9xdWV1ZSxcXG4gNzg1OlxcdFxcdC5zdGFydF9zdHJlYW1pbmcgPSB1c2J0dl9zdGFydF9zdHJlYW1pbmcsXFxuIDc4NjpcXHRcXHQuc3RvcF9zdHJlYW1pbmcgPSB1c2J0dl9zdG9wX3N0cmVhbWluZyxcXG4gNzg3OlxcdH07XFxuIDc4ODpcXHRcXG4gNzg5OlxcdHN0YXRpYyBpbnQgdXNidHZfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjI4LjQ4NDI3NzYxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTg3MTM4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiB0aGUgVVNCVFYgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBoYXZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuIEl0IHNlZW1zIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgY2hlY2tzIGB1c2J0di1cdTAwM2V1ZGV2YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VkIGEgcmVkIGZsYWcuIEkga25vdyBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGlzIGNhbGxlZCB2aWEgYHZiMl9pb2N0bF9zdHJlYW1vZmZgLCB3aGljaCBpcyBhbiBpb2N0bCwgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBIb3dldmVyLCBpdCdzIGFsc28gY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRocm91Z2ggYHZiMl9mb3BfcmVsZWFzZWAgd2hpY2ggZ29lcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGZ1bmN0aW9uIGNhbGxzOiBgdmIyX2ZvcF9yZWxlYXNlYCAtXHUwMDNlIGB2YjJfY29yZV9xdWV1ZV9yZWxlYXNlYCAtXHUwMDNlIGBfX3ZiMl9xdWV1ZV9jYW5jZWxgIC1cdTAwM2UgYHN0b3Bfc3RyZWFtaW5nYC5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIGB2YjJfZm9wX3JlbGVhc2VgIGl0c2VsZiBob2xkcyBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gIEl0ICpkb2VzKiBhY3F1aXJlIGB2cS1cdTAwM2Vsb2NrYCB3aGljaCBpcyBgdXNidHYtXHUwMDNldmIycV9sb2NrYCwgYnV0IG5vdCBgdmRldi1cdTAwM2Vsb2NrYCB3aGljaCBpcyBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBpcyBhIHByb2JsZW0hICBUaGUgYHY0bDJfZmhfcmVsZWFzZWAgb3IgYHZiMl9mb3BfcmVsZWFzZWAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBob2xkIHRoZSBgdjRsMl9sb2NrYC5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHZiMl9mb3BfcmVsZWFzZWAgZG9lc24ndCBrbm93IGFib3V0IGB2ZGV2LVx1MDAzZWxvY2tgIGluIGBkcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuY2AgYW5kIGZvdW5kIHRoYXQgaXQgY2FsbHMgYG11dGV4X2xvY2sodnEtXHUwMDNlbG9jaylgICggYHVzYnR2LVx1MDAzZXZiMnFfbG9ja2ApLiAgU2luY2UgYHVzYnR2X2ZvcHMucmVsZWFzZWAgaXMgc2V0IHRvIGB2YjJfZm9wX3JlbGVhc2VgLCB0aGlzIGNvbmZpcm1zIG15IHdvcnJ5IHRoYXQgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCBtaWdodCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggYHVzYnR2X2Rpc2Nvbm5lY3RgLlxuXG5UaGUgcG90ZW50aWFsIHJhY2UgaXMgdGhhdCBgdXNidHZfZGlzY29ubmVjdGAgY291bGQgc2V0IGB1c2J0di1cdTAwM2V1ZGV2YCB0byBgTlVMTGAgdW5kZXIgYHY0bDJfbG9ja2AsIHdoaWxlIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agb25seSBob2xkcyBgdmIycV9sb2NrYC4gIElmIHRoaXMgaGFwcGVucywgdGhlIGNoZWNrIGBpZiAodXNidHYtXHUwMDNldWRldilgIGluIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agd291bGQgYmUgdnVsbmVyYWJsZSwgYmVjYXVzZSBpdCBpcyBub3QgcHJvdGVjdGVkIGJ5IGB2NGwyX2xvY2tgLlxuXG5Ob3csIGlmIGB1c2J0dl9kaXNjb25uZWN0YCBmcmVlcyByZXNvdXJjZXMsIGluY2x1ZGluZyBwb3RlbnRpYWxseSBzZXR0aW5nIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTGAsIGFuZCBhIGZpbGUgZGVzY3JpcHRvciBpcyBzdGlsbCBvcGVuLCBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBjYWxsIGB2YjJfZm9wX3JlbGVhc2VgIGFuZCB0aGVuIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AuICBJZiB0aGUgY2xvc2UgaGFwcGVucyAqYWZ0ZXIqIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCB0aGVuIGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsIGJlIGBOVUxMYCwgYW5kIHRoZSBjaGVjayBpbiBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIHdpbGwgYmUgaGl0IGFuZCBlZmZlY3RpdmVseSBwcmV2ZW50IHRoZSBpc3N1ZS4gSG93ZXZlciwgaWYgdGhlIGNsb3NlIGhhcHBlbnMgKmR1cmluZyogYHVzYnR2X2Rpc2Nvbm5lY3RgIHRoZXJlIGlzIGFuIGFjdHVhbCByYWNlIVxuXG5JIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB2aWRlb191bnJlZ2lzdGVyX2RldmljZWAuIElmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBvcGVuLCBpdCBpcyBwb3NzaWJsZSBmb3IgYHZiMl9mb3BfcmVsZWFzZWAgdG8gYmUgY2FsbGVkICphZnRlciogIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCBhbmQgYXQgdGhhdCBwb2ludCB0aGUgcmFjZSBpcyBhdmVydGVkIGJlY2F1c2UgYHVzYnR2LVx1MDAzZXVkZXZgIHdpbGwgYWxyZWFkeSBiZSBgTlVMTGAuXG5cbkhvd2V2ZXIsIGB1c2J0dl92aWRlb19mcmVlYCBhbHNvIGNhbGxzIGB2NGwyX2RldmljZV9kaXNjb25uZWN0YC4gSSBuZWVkIHRvIGVuc3VyZSBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGlzIHNhZmUgaW4gYWxsIHRoZXNlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IGFkZHMgYG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTsgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7IG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AgaW5zaWRlIGB1c2J0dl92aWRlb19mcmVlYC4gIFRoaXMgc2hvdWxkIGZpeCB0aGUgcmFjZSBjb25kaXRpb24hICBJIGhhdmUgdG8gbm90ZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBsaXN0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQ6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIGBWSURFT19VU0JUVmAuICBUaGUgYFZJREVPX1VTQlRWYCBjb25maWcgZGVwZW5kcyBvbiBgVklERU9fREVWIFx1MDAyNlx1MDAyNiBTTkRgIHNvIEkgbmVlZCB0byBpbmNsdWRlIGBWSURFT19ERVZgIGFuZCBgU05EYCBqdXN0IHRvIGJlIHNhZmUuICBJJ2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ2AgdG8gY29uZmlybSwgYnV0IEknbSBwcmV0dHkgY2VydGFpbi4gVGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX1xuXG4iLCJJbnB1dFRva2VucyI6MzAyNTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDMuNjcxNDE4OTA5WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVklERU9fVVNCVFZcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJVU0JUVjAwNyB2aWRlbyBjYXB0dXJlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIFZJREVPX0RFViBcXHUwMDI2XFx1MDAyNiBTTkRcXG4gICA1OlxcdFxcdHNlbGVjdCBTTkRfUENNXFxuICAgNjpcXHRcXHRzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0NcXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgdmlkZW80bGludXgyIGRyaXZlciBmb3IgVVNCVFYwMDcgYmFzZWQgdmlkZW8gY2FwdHVyZSBkZXZpY2VzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDMuNjcxNTQxNDI5WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzIzMTAxMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBVU0JUViBEcml2ZXIncyBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgVVNCVFYgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSBpdHMgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gYFZJREVPX0RFVmAgYW5kIGBTTkRgIGJlaW5nIGVuYWJsZWQg4oCTIG1ha2VzIHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmFjdGluZy4gQWgsIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQsIGNyaXRpY2FsbHksIHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGxvY2sgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbG9ja2luZywgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy4gRG9lcyBgdXNidHZfdmlkZW9fZnJlZWAgaG9sZCB0aGUgYHY0bDJfbG9ja2A/IE9rYXksIEkgc2VlIGl0IGRvZXMgYWNxdWlyZSB0aGUgYHY0bDJfbG9ja2AgaXRzZWxmOyBzbyB0aGUgbXV0ZXggcHJvdGVjdGlvbiBpcyBzb3VuZC4gVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBpdC4gRXhjZWxsZW50LCB0aGF0IHBhcnQgc2VlbXMgcm9idXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4uIExldCdzIGNvbnNpZGVyIHRoZSB2NGwyIG1ldGhvZHMuIEkgc2VlIGB1c2J0dl9xdWVyeWNhcGAsIGB1c2J0dl9lbnVtX2lucHV0YCwgYHVzYnR2X2VudW1fZm10X3ZpZF9jYXBgLCBgdXNidHZfZm10X3ZpZF9jYXBgLCBgdXNidHZfZ19zdGRgLCBhbmQgYHVzYnR2X2dfaW5wdXRgLiBUaGV5IGxvb2sgbGlrZSBzaW1wbGUgZ2V0dGVycywgc28gSSB3b3VsZG4ndCBleHBlY3QgdGhlbSB0byBiZSBwcm9ibGVtYXRpYyB3aXRoIHJlc3BlY3QgdG8gYHVzYnR2LVx1MDAzZXVkZXZgLCBidXQgSSBiZXR0ZXIgY2hlY2suIFdhaXQuLi4gYHVzYnR2X3F1ZXJ5Y2FwYCAqZG9lcyogdXNlIGB1c2J0di1cdTAwM2V1ZGV2YD8gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDk0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NTYuOTk0NjQ2NzFaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcbiA1ODE6XFx0XFx0dXNidHZfYXVkaW9fcmVzdW1lKHVzYnR2KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFVTQlRWX0lTT0NfVFJBTlNGRVJTOyBpKyspIHtcXG4gNTg0OlxcdFxcdFxcdHN0cnVjdCB1cmIgKmlwO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRcXHRpcCA9IHVzYnR2X3NldHVwX2lzb190cmFuc2Zlcih1c2J0dik7XFxuIDU4NzpcXHRcXHRcXHRpZiAoaXAgPT0gTlVMTCkge1xcbiA1ODg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNTg5OlxcdFxcdFxcdFxcdGdvdG8gc3RhcnRfZmFpbDtcXG4gNTkwOlxcdFxcdFxcdH1cXG4gNTkxOlxcdFxcdFxcdHVzYnR2LVxcdTAwM2Vpc29jX3VyYnNbaV0gPSBpcDtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0XFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoaXAsIEdGUF9LRVJORUwpO1xcbiA1OTQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU5NTpcXHRcXHRcXHRcXHRnb3RvIHN0YXJ0X2ZhaWw7XFxuIDU5NjpcXHRcXHR9XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdHJldHVybiAwO1xcbiA1OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjU2Ljk5NDc4MTQyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODUxMTQ5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYHVzYnR2X3F1ZXJ5Y2FwYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbXkgYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIHRvIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBxdWVyeWluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgVVNCIFRWIHR1bmVyIG9yIGNhcHR1cmUgZGV2aWNlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0OlxuXG4qICAgKipDb250ZXh0OioqIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgc2l0dWF0aW9uPyBBbSBJIGRlYnVnZ2luZyBhbiBpc3N1ZSB3aXRoIHZpZGVvIGNhcHR1cmUsIHRyeWluZyB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBkZXZpY2UsIG9yIHBlcmhhcHMgYnVpbGRpbmcgYSBuZXcgZHJpdmVyIG9yIGFwcGxpY2F0aW9uIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlc2UgdHlwZXMgb2YgZGV2aWNlcz8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhpcyBxdWVyeSB3b3VsZCBzaGFwZSBteSBhcHByb2FjaC5cbiogICAqKlB1cnBvc2U6KiogV2hhdCBzcGVjaWZpY2FsbHkgYW0gSSB0cnlpbmcgdG8gKmdldCogZnJvbSBgdXNidHZfcXVlcnljYXBgPyBBbSBJIGFmdGVyIHN1cHBvcnRlZCB2aWRlbyBmb3JtYXRzLCByZXNvbHV0aW9ucywgZnJhbWUgcmF0ZXMsIGF1ZGlvIGNvZGVjcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgSSdtIGludGVyZXN0ZWQgaW4gd2lsbCBkcml2ZSB0aGUgc3Vic2VxdWVudCBzdGVwcy5cbiogICAqKkltcGxlbWVudGF0aW9uOioqIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGxpa2VseSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBvciBpb2N0bCBvcGVyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgbGlicmFyeSBmdW5jdGlvbiBmb3IgV2luZG93cyBvciBtYWNPUy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyBBUEkgaXMgY3JpdGljYWwgaGVyZS5cbiogICAqKlRvb2xpbmc6KiogSSdkIGJlIHRoaW5raW5nIGFib3V0IHRoZSB0b29scyBJJ2QgdXNlLiBXb3VsZCBJIG5lZWQgdG8gdXNlIGBzdHJhY2VgIG9yIGEgc2ltaWxhciB0cmFjaW5nIHRvb2wgdG8gc2VlIHRoZSBzeXN0ZW0gY2FsbHMgYmVpbmcgbWFkZT8gUGVyaGFwcyBJJ2Qgc3RhcnQgd2l0aCBhIGJhc2ljIHRlc3QgcHJvZ3JhbSB0byBjYWxsIGB1c2J0dl9xdWVyeWNhcGAgZGlyZWN0bHksIG9yIGRlbHZlIGludG8gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbi5cbiogICAqKkRvY3VtZW50YXRpb246KiogTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gKGtlcm5lbCBoZWFkZXJzLCB1c2VyLXNwYWNlIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiwgZXRjLikuIElmIEknbSBsdWNreSwgdGhlcmUncyBnb29kIGRvY3VtZW50YXRpb24gdGhhdCBleHBsYWlucyB0aGUgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIHR5cGljYWwgdXNhZ2Ugb2YgYHVzYnR2X3F1ZXJ5Y2FwYC5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0IGlzIGVzc2VudGlhbCB0byByZW1lbWJlciB0aGF0IGV2ZW4gdGhlIG1vc3Qgd2VsbC1iZWhhdmVkIHNvZnR3YXJlIHdpbGwgc29tZXRpbWVzIGZhaWwsIHNvIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBjb2Rlcz9cbiogICAqKlRyb3VibGVzaG9vdGluZzoqKiBJZiBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgc2l0dWF0aW9uLCBhbSBJIHJlY2VpdmluZyB1bmV4cGVjdGVkIHJlc3VsdHM/IFRoaXMgd291bGQgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXAsIGFzIHdlbGwgYXMgd2hlcmUgdG8gYmVnaW4gbXkgaW5zcGVjdGlvbiBvZiB0aGUgY29kZS5cblxuSW4gZXNzZW5jZSwgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUsIHBsYWNpbmcgaXQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdmlkZW8gY2FwdHVyZS9VU0IgZGV2aWNlcywgYW5kIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBhIHBsYW4gb2YgYXR0YWNrIGZvciBpbnZlc3RpZ2F0aW5nIGl0LiBNeSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhIGFsbG93cyBtZSB0byByYXBpZGx5IGNvbm5lY3QgdGhlIGRvdHMgYW5kIGFudGljaXBhdGUgdGhlIGxpa2VseSBhdmVudWVzIG9mIGlucXVpcnkuIE5vdyBsZXQncyBnZXQgaW50byBpdCwgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MDIuMTc5OTAxMTg0WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE0MDg5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfcXVlcnljYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NTYyPXN0YXRpYyBpbnQgdXNidHZfc3RhcnQoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjA0LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NjA1OnN0YXRpYyBpbnQgdXNidHZfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDYtXFx0XFx0XFx0XFx0c3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2OTY6XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk3LVxcdC52aWRpb2NfZW51bV9pbnB1dCA9IHVzYnR2X2VudW1faW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjAyLjYyMTMxNDcwOVoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU4MTI1OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHVzYnR2X3F1ZXJ5Y2FwYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1c2J0dl9xdWVyeWNhcGAqKlxuXG5BbHJpZ2h0LCBgdXNidHZfcXVlcnljYXBgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgY2x1ZSwgaXNuJ3QgaXQ/IEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBVU0IgdmlkZW8sIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgd2l0aCBxdWVyeWluZyBjYXBhYmlsaXRpZXMuIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyB0aGF0IHRlbGxzIG1lIHdoYXQgYSBjb25uZWN0ZWQgVVNCIFRWIHR1bmVyIChvciBjYXB0dXJlIGRldmljZSwgbW9yZSBicm9hZGx5KSAqY2FuKiBkby4gVGhpcyBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIGRpc2NvdmVyIHN1cHBvcnRlZCByZXNvbHV0aW9ucywgZnJhbWUgcmF0ZXMsIHZpZGVvIGZvcm1hdHMsIGF1ZGlvIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIHRoaW5ncyBsaWtlIHN1cHBvcnRlZCBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIGV0Yy4pLiBcblxuU28sIEknbSBhbnRpY2lwYXRpbmcgYSBzdHJ1Y3R1cmVkIGRhdGEgcmV0cmlldmFsLiBJdCdzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgc2VuZGluZyBzb21lIHNvcnQgb2YgcmVxdWVzdCB0byB0aGUgZGV2aWNlLCBtYXliZSB1c2luZyBhIHNwZWNpZmljIFVTQiBDb250cm9sIFRyYW5zZmVyLCBhbmQgdGhlbiBpbnRlcnByZXRpbmcgdGhlIHJlc3BvbnNlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YuIEkgYmV0IGl0IHdpbGwgcmVseSBvbiBVU0IgVmlkZW8gQ2xhc3MgKFVWQykgc3RhbmRhcmRzLCBhcyB0aGF0J3MgdGhlIGNvbW1vbiBmcmFtZXdvcmsgZm9yIHZpZGVvIGRldmljZXMgb3ZlciBVU0IuIEkgd291bGRu4oCZdCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgY29kZSB0aGF0IHJlZmxlY3QgdGhlIFVWQyBmb3JtYXQgZGVmaW5pdGlvbnMuXG5cblRoZSBjb2RlIGl0c2VsZiBpcyBnb2luZyB0byByZXZlYWwgdGhlIHNwZWNpZmljIHF1ZXJpZXMgbWFkZSwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGUgcmVzcG9uc2VzLiBJJ20gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgaG93IGRvZXMgaXQgZGVhbCB3aXRoIGRldmljZXMgdGhhdCBkb24ndCBzdXBwb3J0IGNlcnRhaW4gY2FwYWJpbGl0aWVzLCBvciBpZiBjb21tdW5pY2F0aW9uIGZhaWxzPyBEb2VzIGl0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNldHRpbmdzLCByZXBvcnQgYW4gZXJyb3IsIG9yIHNpbXBseSBza2lwIHVuc3VwcG9ydGVkIGZlYXR1cmVzPyBBbHNvLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzICp3aGljaCogc3BlY2lmaWMgVVZDIGNhcGFiaWxpdGllcyBhcmUgYmVpbmcgcXVlcmllZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBzb3J0IG9mIGlkZW50aWZpZXIsIG9yIHBlcmhhcHMgYW4gZW51bWVyYXRlZCBsaXN0LCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLlxuXG5JbiB0aGUgYmFjayBvZiBteSBtaW5kLCBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBjYWNoZSBhbnkgb2YgdGhpcyBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkIHF1ZXJpZXM/IE9yIG1heWJlIGl0IGNhbiBsZXZlcmFnZSBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHByZXZpb3VzIHF1ZXJpZXMuIEFuZCwgbGFzdGx5LCBhcyBhIGJvbnVzLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zIGhhbmRsZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIHRob3NlIGFkdmFuY2VkIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0NDMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNjowNy4xNzk0NDUwNjdaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA1OlxcdHN0YXRpYyBpbnQgdXNidHZfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXFxuIDYwNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgdXNidHYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdHN0cnNjcHkoY2FwLVxcdTAwM2Vkcml2ZXIsIFxcXCJ1c2J0dlxcXCIsIHNpemVvZihjYXAtXFx1MDAzZWRyaXZlcikpO1xcbiA2MTE6XFx0XFx0c3Ryc2NweShjYXAtXFx1MDAzZWNhcmQsIFxcXCJ1c2J0dlxcXCIsIHNpemVvZihjYXAtXFx1MDAzZWNhcmQpKTtcXG4gNjEyOlxcdFxcdHVzYl9tYWtlX3BhdGgoZGV2LVxcdTAwM2V1ZGV2LCBjYXAtXFx1MDAzZWJ1c19pbmZvLCBzaXplb2YoY2FwLVxcdTAwM2VidXNfaW5mbykpO1xcbiA2MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0YXRpYyBpbnQgdXNidHZfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2lucHV0ICppKVxcbiA2MTg6XFx0e1xcbiA2MTk6XFx0XFx0c3RydWN0IHVzYnR2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRzd2l0Y2ggKGktXFx1MDAzZWluZGV4KSB7XFxuIDYyMjpcXHRcXHRjYXNlIFVTQlRWX0NPTVBPU0lURV9JTlBVVDpcXG4gNjIzOlxcdFxcdFxcdHN0cnNjcHkoaS1cXHUwMDNlbmFtZSwgXFxcIkNvbXBvc2l0ZVxcXCIsIHNpemVvZihpLVxcdTAwM2VuYW1lKSk7XFxuIDYyNDpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MDcuMTc5NjIwNTg3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MjQzMzgyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIFVTQiBDYXB0dXJlIERldmljZSBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdXNidHZfcXVlcnljYXBgIGZ1bmN0aW9uIGFuZCBJIHRoaW5rIEkndmUgZm91bmQgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiBUaGUgY29kZSBpcyB1c2luZyBgZGV2LVx1MDAzZXVkZXZgIGhlcmUsIHNwZWNpZmljYWxseSBpbiB0aGlzIGB1c2JfbWFrZV9wYXRoYCBjYWxsLCBgdXNiX21ha2VfcGF0aChkZXYtXHUwMDNldWRldiwgY2FwLVx1MDAzZWJ1c19pbmZvLCBzaXplb2YoY2FwLVx1MDAzZWJ1c19pbmZvKSk7YC4gSXQncyBzdGFydGluZyB0byBsb29rIGxpa2UgaWYgYGRldi1cdTAwM2V1ZGV2YCBpcyBOVUxMLCB0aGVuIGB1c2JfbWFrZV9wYXRoYCB3aWxsIGRlcmVmZXJlbmNlIHRoYXQgTlVMTCBwb2ludGVyISBUaGF0J3MgYmFkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgbGV0IG1lIHNlZS4uLiBBaCwgaGVyZSBpdCBpczpcblxuYGBgY1xuc3RhdGljIGlubGluZSB2b2lkIHVzYl9tYWtlX3BhdGgoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbntcblx0aW50IGFjdHVhbDtcblx0YWN0dWFsID0gc25wcmludGYoYnVmLCBzaXplLCBcInVzYi0lcy0lc1wiLCBkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c19uYW1lLFxuXHRcdFx0ICBkZXYtXHUwMDNlZGV2cGF0aCk7XG59XG5gYGBcblxuT2theSwgdGhlIG1vcmUgSSBsb29rIGF0IHRoaXMgdGhlIHdvcnNlIGl0IGdldHMuIElmIGBkZXZgIGl0c2VsZiBpcyBOVUxMLCB0aGVuIGBkZXYtXHUwMDNlYnVzYCB3aWxsIGNhdXNlIGEgY3Jhc2ghIFNvLCBpdCdzIG5vdCBqdXN0IHRoZSBwb3RlbnRpYWwgTlVMTCBgZGV2LVx1MDAzZXVkZXZgIGlzc3VlLCBidXQgYWxzbyBhIHBvdGVudGlhbCBOVUxMIGBkZXZgIGlzc3VlISBgdXNidHZfcXVlcnljYXBgIGlzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBmb2N1cyBvbi5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBhdCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gcmVwZWF0cyBpdHNlbGYuIEknbGwgY2hlY2sgYHVzYnR2X2VudW1faW5wdXRgLi4uIE5vcGUsIGRvZXNuJ3QgdXNlIGBkZXYtXHUwMDNldWRldmAgaW4gdGhhdCBvbmUuIFdoYXQgYWJvdXQgYHVzYnR2X2VudW1fZm10X3ZpZF9jYXBgPyBPa2F5LCBJJ2xsIG1vdmUgb24gdG8gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Mjc4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MTMuODAzOTYwOTIxWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdH1cXG4gNjM2OlxcdFxcbiA2Mzc6XFx0c3RhdGljIGludCB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdixcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpXFxuIDYzOTpcXHR7XFxuIDY0MDpcXHRcXHRpZiAoZi1cXHUwMDNlaW5kZXggXFx1MDAzZSAwKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdGYtXFx1MDAzZXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7XFxuIDY0NDpcXHRcXHRyZXR1cm4gMDtcXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIGludCB1c2J0dl9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2Zvcm1hdCAqZilcXG4gNjQ5OlxcdHtcXG4gNjUwOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRmLVxcdTAwM2VmbXQucGl4LndpZHRoID0gdXNidHYtXFx1MDAzZXdpZHRoO1xcbiA2NTM6XFx0XFx0Zi1cXHUwMDNlZm10LnBpeC5oZWlnaHQgPSB1c2J0di1cXHUwMDNlaGVpZ2h0O1xcbiA2NTQ6XFx0XFx0Zi1cXHUwMDNlZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNjoxMy44MDQwNDY5ODFaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTMzMDEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDb25zaWRlcmluZyBVU0IgR2FkZ2V0IERyaXZlcnMgZm9yIGEgU3lzdGVtKipcblxuUmlnaHQsIHNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsICpubyogYHVkZXZgIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uIFRoYXQncyBhIGNvbnN0cmFpbnQgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGxldCdzIGV4cGxvcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90IGB1c2J0dl9nX3N0ZGAgaXMgYSB2aWFibGUgZHJpdmVyIHRvIGFjaGlldmUgbXkgZ29hbHMuIEl0IGlzIGEgcG9zc2liaWxpdHkgYW5kIEkgbXVzdCBjb25zaWRlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyNTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjE3LjQ1MzM4MTkxNVoiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdXNidHZfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpub3JtKVxcbiA2NjQ6XFx0e1xcbiA2NjU6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY2NjpcXHRcXHQqbm9ybSA9IHVzYnR2LVxcdTAwM2Vub3JtO1xcbiA2Njc6XFx0XFx0cmV0dXJuIDA7XFxuIDY2ODpcXHR9XFxuIDY2OTpcXHRcXG4gNjcwOlxcdHN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuIDY3MTpcXHR7XFxuIDY3MjpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gNjczOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAobm9ybSBcXHUwMDI2IFVTQlRWX1RWX1NURClcXG4gNjc2OlxcdFxcdFxcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCBub3JtKTtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjc5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MTcuNDUzNTcxNzc1WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDgyMzY5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHVzYnR2X2dfc3RkYCBNb2R1bGUncyBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB1c2J0dl9nX3N0ZGAgY29kZS4gRmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoZSBhYnNlbmNlIG9mIGB1ZGV2YCB1c2FnZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIFRoYXQncyBnb29kIHRvIGtub3csIG5hcnJvd3MgZG93biB3aGVyZSB0byBsb29rIGlmIHRoZXJlIGFyZSBgdWRldmAtcmVsYXRlZCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvIGhlcmUgYXJlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X3NfY3RybGAsIGB1c2J0dl9xdWVyeWNhcGAsIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgLCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgLCBgdXNidHZfcXVldWVfc2V0dXBgLCBhbmQgYHVzYnR2X2J1Zl9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgdG91Y2hwb2ludHMsIHRoZSBlc3NlbnRpYWwgcGFydHMgb2YgdGhlIGRyaXZlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFVTQiBkZXZpY2UgYW5kIHZpZGVvIGNhcHR1cmUuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNhcmVmdWxseSBmb3IgYW55IGxvZ2ljIGVycm9ycyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIGhhdmUgdG8gZG91YmxlIGNoZWNrOiBgdXNidHZfc19pbnB1dGAgaXMgdXNpbmcgYHVkZXZgLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MjIuNTAxODUwOTczWiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHRcXG4gNjgxOlxcdHN0YXRpYyBpbnQgdXNidHZfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKVxcbiA2ODI6XFx0e1xcbiA2ODM6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY4NDpcXHRcXHQqaSA9IHVzYnR2LVxcdTAwM2VpbnB1dDtcXG4gNjg1OlxcdFxcdHJldHVybiAwO1xcbiA2ODY6XFx0fVxcbiA2ODc6XFx0XFxuIDY4ODpcXHRzdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxcbiA2ODk6XFx0e1xcbiA2OTA6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdHJldHVybiB1c2J0dl9zZWxlY3RfaW5wdXQodXNidHYsIGkpO1xcbiA2OTM6XFx0fVxcbiA2OTQ6XFx0XFxuIDY5NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHVzYnR2X2lvY3RsX29wcyA9IHtcXG4gNjk2OlxcdFxcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcXG4gNjk3OlxcdFxcdC52aWRpb2NfZW51bV9pbnB1dCA9IHVzYnR2X2VudW1faW5wdXQsXFxuIDY5ODpcXHRcXHQudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwLFxcbiA2OTk6XFx0XFx0LnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjIyLjUwMjE1NTQ4M1oiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk2Mzk2MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBVU0JUViBEcml2ZXIgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgVVNCVFYgZHJpdmVyIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgbWluZC4gSXQgbG9va3MgbGlrZSBgdXNidHZfc2VsZWN0X2lucHV0YCBjYWxscyBgdXNidHZfc2V0X3JlZ3NgLCB3aGljaCB0aGVuIHVzZXMgYHVkZXZgLiBUaGF0IHRlbGxzIG1lIHRoYXQgYHVzYnR2X3NfaW5wdXRgIGlzIGFub3RoZXIga2V5IHN5bWJvbCB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHRpZ2h0ZW4gdXAgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIG1ha2Ugc3VyZSBJJ20gcmVhbGx5IGhpdHRpbmcgdGhlIGtleSBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGJlaW5nIGFkZHJlc3NlZC5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdDpcblxuKiAgIGB1c2J0dl9kaXNjb25uZWN0YFxuKiAgIGB1c2J0dl9wcm9iZWBcbiogICBgdXNidHZfc19zdGRgXG4qICAgYHVzYnR2X3NfaW5wdXRgXG4qICAgYHVzYnR2X3NfY3RybGBcbiogICBgdXNidHZfcXVlcnljYXBgXG4qICAgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2BcbiogICBgdXNidHZfc3RvcF9zdHJlYW1pbmdgXG4qICAgYHVzYnR2X2J1Zl9xdWV1ZWBcblxuWWVhaCwgdGhpcyBsb29rcyBzb2xpZC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGB1c2JfZGV2aWNlYCBwb2ludGVyIGlzIGFjY2Vzc2VkIGFmdGVyIGl0J3MgYmVlbiBmcmVlZC4gQnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGlzY29ubmVjdCwgdGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBjb25jdXJyZW50IFY0TDIgaW9jdGxzIGZyb20gYWNjZXNzaW5nIGJhZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYSBVU0IgZHJpdmVyIGV4cG9zaW5nIGEgVjRMMiBpbnRlcmZhY2UsIGZ1enppbmcgdmlhIGJvdGggVVNCIGFuZCBWNEwyIGZ1enppbmcgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgdGhhdC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgbmVlZCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIHNwZWNpZmljYWxseSBjb25maWd1cmF0aW9ucyBsaWtlOlxuXG4qICAgYFZJREVPX1VTQlRWYFxuKiAgIGBNRURJQV9TVVBQT1JUYFxuKiAgIGBNRURJQV9VU0JfU1VQUE9SVGBcbiogICBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgXG4qICAgYFZJREVPX0RFVmBcbiogICBgU05EYFxuXG5JJ2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIFllcCwgaXQgZGVwZW5kcyBvbiBgVklERU9fREVWIFx1MDAyNlx1MDAyNiBTTkRgLCBgc2VsZWN0cyBTTkRfUENNYCwgYW5kIGBzZWxlY3RzIFZJREVPQlVGMl9WTUFMTE9DYCwgc28gbXkgY3VycmVudCBsaXN0IGlzIGdvb2QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MgYW5kIEkgdGhpbmsgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1MjgsIk91dHB1dFRva2VucyI6Mjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzEuOTk4NTU1ODMxWiIsIlNlcSI6ODYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTc5MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIyNTQyMzY4WiIsIlNlcSI6ODcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5NjM1MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIzMDY5MTU4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MzkxMDMyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVxcdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbmluZGV4IDZjNGZhY2Y0ZjQxYTcuLmIzM2I1NGZkYmQ2MjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuQEAgLTEzNiw4ICsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XG4gXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbiBcbi1cdHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO1xuLVxuIFx0LyogdGhlIHVzYnR2IHN0cnVjdHVyZSB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdjRsMiB3aWxsIGJlXG4gXHQgICBkb25lIHVzaW5nIGl0ICovXG4gXHR2NGwyX2RldmljZV9wdXQoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5pbmRleCBkZTAzMjgxMDBhNjBkLi5lZjA2NmRmNzEyNDY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xuQEAgLTk2OCw1ICs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbiBcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZ1c2J0di1cdTAwM2V2ZGV2KTtcbiBcdHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuK1x0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbitcbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIzMDcwMjA4WiIsIlNlcSI6ODksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzkwNjgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyMjg5LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjQwLjU2MjE0MjE4NVoiLCJTZXEiOjkwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGJ5IG1vdmluZyB0aGUgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXFx1MDAzZXY0bDJfbG9ja2AuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVxcdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 14:24:29 +0000 UTC FinishedAt: 2026-08-17 14:36:42 +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": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIDEO_USBTV", "MEDIA_SUPPORT", "MEDIA_USB_SUPPORT", "MEDIA_CAMERA_SUPPORT", "VIDEO_DEV", "SND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIDEO_USBTV", "MEDIA_SUPPORT", "MEDIA_USB_SUPPORT", "MEDIA_CAMERA_SUPPORT", "VIDEO_DEV", "SND" ], "series_id": "de91101a-9734-4d85-86a2-250af45c3f52" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usbtv_disconnect", "usbtv_probe", "usbtv_s_std", "usbtv_s_input", "usbtv_s_ctrl", "usbtv_querycap", "usbtv_start_streaming", "usbtv_stop_streaming", "usbtv_buf_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgYnkgbW92aW5nIHRoZSBgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBVU0JUViBkcml2ZXIgYnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG5pbmRleCA2YzRmYWNmNGY0MWE3Li5iMzNiNTRmZGJkNjIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbkBAIC0xMzYsOCAmIzQzOzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbiBcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xuIFxuLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4tXG4gXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcbiBcdCAgIGRvbmUgdXNpbmcgaXQgKi9cbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcbmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5AQCAtOTY4LDUgJiM0Mzs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbiBcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZ1c2J0di1cdTAwM2V2ZGV2KTtcbiBcdHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbiYjNDM7XHR1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbiYjNDM7XG4gXHR2NGwyX2RldmljZV9wdXQoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJREVPX1VTQlRWJiMzNDssCiAgICAmIzM0O01FRElBX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7TUVESUFfVVNCX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7TUVESUFfQ0FNRVJBX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7VklERU9fREVWJiMzNDssCiAgICAmIzM0O1NORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYnR2X2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dXNidHZfcHJvYmUmIzM0OywKICAgICYjMzQ7dXNidHZfc19zdGQmIzM0OywKICAgICYjMzQ7dXNidHZfc19pbnB1dCYjMzQ7LAogICAgJiMzNDt1c2J0dl9zX2N0cmwmIzM0OywKICAgICYjMzQ7dXNidHZfcXVlcnljYXAmIzM0OywKICAgICYjMzQ7dXNidHZfc3RhcnRfc3RyZWFtaW5nJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0b3Bfc3RyZWFtaW5nJiMzNDssCiAgICAmIzM0O3VzYnR2X2J1Zl9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBVU0JUViBkcml2ZXIgYnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMKaW5kZXggNmM0ZmFjZjRmNDFhNy4uYjMzYjU0ZmRiZDYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYwpAQCAtMTM2LDggJiM0MzsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCXVzYnR2X2F1ZGlvX2ZyZWUodXNidHYpOwogCXVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpOwogCi0JdXNidHYtJmd0O3VkZXYgPSBOVUxMOwotCiAJLyogdGhlIHVzYnR2IHN0cnVjdHVyZSB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdjRsMiB3aWxsIGJlCiAJICAgZG9uZSB1c2luZyBpdCAqLwogCXY0bDJfZGV2aWNlX3B1dCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYwppbmRleCBkZTAzMjgxMDBhNjBkLi5lZjA2NmRmNzEyNDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMKQEAgLTk2OCw1ICYjNDM7OTY4LDkgQEAgdm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpCiAJdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7dXNidHYtJmd0O3ZkZXYpOwogCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmFtcDt1c2J0di0mZ3Q7djRsMl9kZXYpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTsKJiM0MzsJdXNidHYtJmd0O3VkZXYgPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTsKJiM0MzsKIAl2NGwyX2RldmljZV9wdXQoJmFtcDt1c2J0di0mZ3Q7djRsMl9kZXYpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBEcml2ZXIgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYHVzYnR2LWNvcmUuY2AgYW5kIGB1c2J0di12aWRlby5jYCwgc3BlY2lmaWNhbGx5IG1vdmluZyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMO2AgZnJvbSBgdXNidHZfZGlzY29ubmVjdGAgdG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCB3cmFwcGluZyBpdCBpbiBhIG11dGV4LiBUaGF0IHNjcmVhbXMgJiMzNDt1c2UtYWZ0ZXItZnJlZSYjMzQ7IG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggdG8gbWUg4oCTIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyIGNvZGUuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgJiMzNDt0ZWFyZG93biBjYWxsYmFja3MmIzM0OyBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4gSG9sZCBvbiwgYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGEgVVNCIGRyaXZlciBkaXNjb25uZWN0IGNhbGxiYWNrLi4uIHRoYXQmIzM5O3Mgc2ltaWxhciEgSXTigJlzIHRyaWdnZXJlZCB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIHVucGx1Z2dlZCBvciB0aGUgZHJpdmVyIGlzIHVuYm91bmQsIGxpa2UgYSBgLnJlbW92ZWAgZnVuY3Rpb24gZm9yIFBDSS4KClRoZSB0cmljayBub3cgaXMgdGhhdCBgdXNidHZfdmlkZW9fZnJlZWAgaXMgY2FsbGVkICpmcm9tKiBgdXNidHZfZGlzY29ubmVjdGAuIFNvLCBsZXQmIzM5O3MgZGlnIGludG8gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCBgdXNidHZfdmlkZW9fZnJlZWAgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNidHZfZGlzY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTI2LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjEyNzpzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyOC17XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTE1Nj1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidHZfdXNiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTU5LVx0LnByb2JlID0gdXNidHZfcHJvYmUsXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTYwOlx0LmRpc2Nvbm5lY3QgPSB1c2J0dl9kaXNjb25uZWN0LFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTE2MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGlzc2VjdGluZyB0aGUgVVNCIFRWIERyaXZlciBEaXNjb25uZWN0KioKClJpZ2h0LCBzbyBgdXNidHZfZGlzY29ubmVjdGAgaXMgZGVmaW5pdGVseSB0aGUgYC5kaXNjb25uZWN0YCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIGB1c2JfZHJpdmVyYCBzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyBmb2N1c2VkIHNvbGVseSBvbiB0aGUgdGVhcmRvd24gcHJvY2VzcyDigJMgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB0d2Vha2luZyB0aGUgbG9naWMgd2l0aGluIGB1c2J0dl9kaXNjb25uZWN0YCBpdHNlbGYgYW5kLCBpbXBvcnRhbnRseSwgdGhlIGZ1bmN0aW9uIGB1c2J0dl92aWRlb19mcmVlYCB3aGljaCBgdXNidHZfZGlzY29ubmVjdGAgY2FsbHMuCgpOb3cgSSBuZWVkIHRvIHBhdXNlIGFuZCBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJ4oCZbSBzdGFydGluZyB0byBnZXQgdGhhdCBuaWdnbGluZyBmZWVsaW5nLiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBgdXNidHZfdmlkZW9fZnJlZWAgYWN0dWFsbHkgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGA/IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQuIElmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcywgdGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucyB0aGFuIHRoZSBwYXRjaCBpbml0aWFsbHkgc3VnZ2VzdHMsIGFuZCB0aGF04oCZcyBnb2luZyB0byBpbXBhY3QgbXkgcmV2aWV3IG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNidHZfdmlkZW9fZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE3LVx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTE4Olx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE5LVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz0xMjc9c3RhdGljIHZvaWQgdXNidHZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM2LVx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTM3Olx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM4LVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9ODg0PWludCB1c2J0dl92aWRlb19pbml0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NjUtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk2Njp2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTY3LXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oPTEzMj1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg6MTMzOnZvaWQgdXNidHZfdmlkZW9fZnJlZShzdHJ1Y3QgdXNidHYgKnVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgdXNidHYgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGZyb20gYHVzYnR2X3Byb2JlYCAoc3BlY2lmaWNhbGx5IG9uIHRoZSBlcnJvciBwYXRoKSBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0PyYjMzQ7IFRoZSBwcm9tcHQgSSYjMzk7bSBmb2xsb3dpbmcgZGlyZWN0cyBtZSB0byBza2lwIHBhdGNoZXMgaWYgdGhleSBwcmltYXJpbHkgaW52b2x2ZSB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAgdGhhdCBhcmUgKm9ubHkqIGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kcy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIHRoaXMgaXMgYSAqVVNCKiBkcml2ZXIsIG5vdCBQQ0khIFRoZSBiZWF1dHkgb2YgVVNCIGlzIHRoZSBob3QtdW5wbHVnIGNhcGFiaWxpdGllcyBhcmUgZWFzaWx5IGV4cGxvaXRlZCB1c2luZyBzeXprYWxsZXIgYW5kIGl0cyBgZHVtbXlfaGNkYCwgYW5kIHRoZSBgc3l6X3VzYl9jb25uZWN0YC9gc3l6X3VzYl9kaXNjb25uZWN0YCBzeXN0ZW0gY2FsbHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0RvZXMgdGhlIHByb21wdCYjMzk7cyByZWZlcmVuY2UgdG8gJiMzOTtQQ0kgaG90LXVucGx1ZyYjMzk7ICppbXBsaWNpdGx5KiBleGNsdWRlIFVTQiBob3QtdW5wbHVnPyYjMzQ7IAoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgd29yZGluZzogJiMzNDtEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsgIEFoYSEgVGhlIHByb21wdCBpcyBzcGVjaWZpYyBhYm91dCAmIzM0O1BDSSBob3QtdW5wbHVnJiMzNDsuIEdpdmVuIHRoZSBleHRlbnNpdmUgVVNCIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXIsIGFuZCBnaXZlbiB0aGF0IFVTQiBob3QtdW5wbHVnIGlzIGV4cGxpY2l0bHkgZXhwbG9pdGVkIGJ5IHN5emthbGxlciB2aWEgbWVjaGFuaXNtcyBsaWtlIHZoY2kvZHVtbXlfaGNkLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkICpkZWZpbml0ZWx5KiBmdXp6aW5nIHRoaXMuCgpUaGVyZSYjMzk7cyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGU6IGB1c2J0dl92aWRlb19mcmVlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZSBgdXNidHZfcHJvYmVgIGVycm9yIHBhdGguIFNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29tcGxldGUgYHVzYnR2X3Byb2JlYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2J0dl92aWRlb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz02Nz1zdGF0aWMgaW50IHVzYnR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTctXHQvKiB0aGlzIHdpbGwgdW5kbyB0aGUgdjRsMl9kZXZpY2VfZ2V0KCkgKi9cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMTg6XHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTktXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTEyNz1zdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzYtXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMzc6XHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdXNidHZfcHJvYmVgJiMzOTtzIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHVzYnR2X3Byb2JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIFVTQiBUViBkZXZpY2UuIEkmIzM5O20gZ29pbmcgdG8gbWFwIG91dCBlYWNoIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLCB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQsIGFuZCBob3cgdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWNvdmVyIG9yLCB1bHRpbWF0ZWx5LCBjbGVhbiB1cC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZXNvdXJjZSBtYW5hZ2VtZW50IHRvbywgaG93IGl0IHJlbGVhc2VzIGFsbG9jYXRlZCBtZW1vcnksIGhhbmRsZXMgZGV2aWNlIGRlcmVnaXN0cmF0aW9uLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNsZWFudXAgdGhhdCBhcmUgbGlrZWx5IG9yIGxlc3Mgc28uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkaWZmZXJlbnQgZXhpdCBwb2ludHMgYW5kIGVuc3VyZSB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIG9yIGhhbmRsZWQgYXMgdGhleSBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHJldCA9IHVzYnR2X3ZpZGVvX2luaXQodXNidHYpO1xuIDEwMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxMDI6XHRcdFx0Z290byB1c2J0dl92aWRlb19mYWlsO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0ID0gdXNidHZfYXVkaW9faW5pdCh1c2J0dik7XG4gMTA1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEwNjpcdFx0XHRnb3RvIHVzYnR2X2F1ZGlvX2ZhaWw7XG4gMTA3Olx0XG4gMTA4Olx0XHQvKiBmb3Igc2ltcGxpY2l0eSB3ZSBleHBsb2l0IHRoZSB2NGwyX2RldmljZSByZWZlcmVuY2UgY291bnRpbmcgKi9cbiAxMDk6XHRcdHY0bDJfZGV2aWNlX2dldChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gMTEwOlx0XG4gMTExOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0Z1c2hpY2FpIFVTQlRWMDA3IEF1ZGlvLVZpZGVvIEdyYWJiZXJcXG5cJiMzNDspO1xuIDExMjpcdFx0cmV0dXJuIDA7XG4gMTEzOlx0XG4gMTE0Olx0dXNidHZfYXVkaW9fZmFpbDpcbiAxMTU6XHRcdC8qIHdlIG11c3Qgbm90IGZyZWUgYXQgdGhpcyBwb2ludCAqL1xuIDExNjpcdFx0djRsMl9kZXZpY2VfZ2V0KFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfZGV2KTtcbiAxMTc6XHRcdC8qIHRoaXMgd2lsbCB1bmRvIHRoZSB2NGwyX2RldmljZV9nZXQoKSAqL1xuIDExODpcdFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XG4gMTE5Olx0XG4gMTIwOlx0dXNidHZfdmlkZW9fZmFpbDpcbiAxMjE6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7XG4gMTIyOlx0XHRrZnJlZSh1c2J0dik7XG4gMTIzOlx0XG4gMTI0Olx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdH1cbiAxMjY6XHRcbiAxMjc6XHRzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDEyODpcdHtcbiAxMjk6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQlRWIERyaXZlciBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdXNidHZgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSB0d28gZGlzdGluY3QgcGxhY2VzOiBhbiBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgICh3aGljaCBpcyBhbHJlYWR5IGEgcmVkIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMpIGFuZCB0aGUgbW9yZSBwcmVkaWN0YWJsZSBgdXNidHZfZGlzY29ubmVjdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGB1c2J0di0mZ3Q7dWRldiA9IE5VTEw7YCBmcm9tIGp1c3QgYHVzYnR2X2Rpc2Nvbm5lY3RgIHRvIGFsc28gYmVpbmcgZXhlY3V0ZWQgd2l0aGluIGB1c2J0dl92aWRlb19mcmVlYC4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm93IGd1YXJkZWQgYnkgYG11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKWAuCgpUaGUgb2xkIGJlaGF2aW9yLCB3aXRoIGB1c2J0di0mZ3Q7dWRldiA9IE5VTEw7YCAqb25seSogd2l0aGluIGB1c2J0dl9kaXNjb25uZWN0YCwgc2VlbXMgaW5oZXJlbnRseSBwcm9ibGVtYXRpYy4gTm93LCB3aXRoIGl0IGFsc28gaW4gYHVzYnR2X3ZpZGVvX2ZyZWVgLCBpdCBpcyBhbHNvIGV4ZWN1dGVkIG9uIHRoZSBwcm9iZSBlcnJvciBwYXRoLiBUaGlzIHNpZ25hbHMgYW4gYXR0ZW1wdCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgdWRldmAgcG9pbnRlci4KCk15IGludHVpdGlvbiBzYXlzIHRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGZpeCwgbGlrZWx5IGludm9sdmluZyBjb25jdXJyZW50IG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IHJlc29sdmluZyBhIHJhY2UgYmV0d2VlbiBhIGRpc2Nvbm5lY3QgZXZlbnQgYW5kIHNvbWUgb3RoZXIgVjRMMiBvcGVyYXRpb24uIFRoZSBgbXV0ZXhfbG9ja2AgaGludHMgYXQgYSBWNEwyIGlvY3RsIG9yIHNpbWlsYXIgYWNjZXNzLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBpbiBhIFVTQiBkcml2ZXIsIGFuZCBzeXprYWxsZXIgaXMgKnBlcmZlY3QqIGZvciB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8uIFN5emthbGxlciBjYW4gZWFzaWx5IGZ1enogVVNCIGRldmljZXMgYW5kIFY0TDIgaW9jdGxzIGNvbmN1cnJlbnRseSwgdHJpZ2dlcmluZyB0aGlzIHJhY2UgYW5kIHBvdGVudGlhbGx5IGV4cG9zaW5nIHRoZSB1bmRlcmx5aW5nIGJ1Zy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgVVNCVFYgY29uZmlnIGlzIGNvcnJlY3QgYW5kIGdldCB0aGlzIHRoaW5nIGZ1enplZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJREVPX1VTQlRWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWc6Mjpjb25maWcgVklERU9fVVNCVFZcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSBmb3IgVklERU9fVVNCVFYqKgoKT2theSwgdGltZSB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSURFT19VU0JUVmAuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgcmVsZWFzZSwgc28gYSBtZXRpY3Vsb3VzIGNoZWNrIGlzIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBkbyB3ZSBzdGFydD8mIzM0OyBQcm9iYWJseSB3aXRoIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGxpYnJhcnkgdXBkYXRlcyB0aGF0IGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucz8gSGFzIHRoZXJlIGJlZW4gYW55IHJlY2VudCB3b3JrIGluIHJlbGF0ZWQgcHJvamVjdHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IG1pZ2h0IHRvdWNoIHRoZSBVU0Igc3RhY2sgb3IgdmlkZW8gcHJvY2Vzc2luZyBwaXBlbGluZXMsIHRoYXQgY291bGQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcz8KCkkmIzM5O20gdGhpbmtpbmc6ICpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdC4qIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gd29yayBvdXR3YXJkcyB0byB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgdGhvc2UgYXJlIG9mdGVuIHRoZSBzbmVha3kgY3VscHJpdHMuIEkmIzM5O2xsIG5lZWQgdG8gbWVudGFsbHkgbWFwIHRoZSBjYWxsIGdyYXBoIHRvIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciByZXNvdXJjZSBjb250ZW50aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYFZJREVPX1VTQlRWYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIGNhcHR1cmUsIGVuY29kaW5nLCBhbmQgVVNCIGRldmljZSBoYW5kbGluZy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdmVyc2lvbiBjb21wYXRpYmlsaXR5LiBBcmUgd2UgcGVnZ2VkIHRvIHNwZWNpZmljIHZlcnNpb25zPyBBcmUgd2UgdXNpbmcgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZXMsIG9yIGFyZSB3ZSBzdHVjayBvbiBvbGRlciB2ZXJzaW9ucyB0aGF0IG1pZ2h0IGhhdmUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIGtub3duIGJ1Z3M/IEkgbmVlZCB0byByZXZpZXcgY2hhbmdlIGxvZ3MsIGlzc3VlIHRyYWNrZXJzLCBhbmQgbWF5YmUgZXZlbiBwdWxsIGRvd24gdGhlIHNvdXJjZSBjb2RlIGZvciBrZXkgZGVwZW5kZW5jaWVzIHRvIGNoZWNrIHRoZSBhY3R1YWwgY29kZS4KCipGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQqLiBJcyB0aGlzIGEgY3Jvc3MtcGxhdGZvcm0gcHJvamVjdD8gSWYgc28sIEkgbmVlZCB0byB0aGluayBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgT1Mgb3IgaGFyZHdhcmUgY29tYmluYXRpb24/IFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IGBWSURFT19VU0JUVmAgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgZXNwZWNpYWxseSB0aGUga2VybmVsLCBkaXNwbGF5IGRyaXZlcnMgYW5kIG90aGVyIGhhcmR3YXJlIHBlcmlwaGVyYWxzLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGNyZWF0ZSBhIHJvYnVzdCBkZXBlbmRlbmN5IG1hcC4gSSYjMzk7bGwgcHJvYmFibHkgYnVpbGQgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24g4oCTIG1heWJlIGEgZ3JhcGggb3IgZGlhZ3JhbSDigJMgdG8gY2xlYXJseSBjb21tdW5pY2F0ZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHRoZSB0ZWFtLiBUaGUgZW5kIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgd2UmIzM5O3JlIHVzaW5nIHRoZSByaWdodCB2ZXJzaW9ucywgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByaXNrcywgYW5kIHRoYXQgd2UgaGF2ZSBhIHBsYW4gZm9yIGRlYWxpbmcgd2l0aCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MsIGFuZCBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSURFT19VU0JUVlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFZJREVPX0RFViBcdTAwMjZcdTAwMjYgU05EXG4gICA1Olx0XHRzZWxlY3QgU05EX1BDTVxuICAgNjpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gICA3Olx0XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbXBvbmVudCBEZXBlbmRlbmN5IFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gdGhlIG5lZWQgZm9yIHRoZXNlIGNvcmUgY29tcG9uZW50czogYFZJREVPX1VTQlRWYCwgYFZJREVPX0RFVmAsIGFuZCBgU05EYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBUaGVuLCBhIGZsYWcgd2VudCB1cC4gSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgVklERU9fREVWYCBpcyBvZnRlbiBuZXN0ZWQgd2l0aGluIGBNRURJQV9TVVBQT1JUYC4gU28sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgYFZJREVPX0RFVmAsIGp1c3QgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBgTUVESUFfU1VQUE9SVGAgZWNvc3lzdGVtLiBHb3R0YSBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhhdCB0aGUgaW5jbHVzaW9uIG9mIGBNRURJQV9TVVBQT1JUYCBtaWdodCBpbnRyb2R1Y2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSURFT19ERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL0tjb25maWc9MTU3PW1lbnUgXCYjMzQ7TWVkaWEgY29yZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE1OS1cbmRyaXZlcnMvbWVkaWEvS2NvbmZpZzoxNjA6Y29uZmlnIFZJREVPX0RFVlxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE2MS1cdHRyaXN0YXRlIFwmIzM0O1ZpZGVvNExpbnV4IGNvcmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDaGVja2luZyBWSURFT19ERVYgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgVklERU9fREVWYCBpcyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBpcyB0byBsb29rIGluIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYFZJREVPX0RFVmAgc291bmRzIGxpa2UgaXQgcGVydGFpbnMgdG8gdmlkZW8gZGV2aWNlcywgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgaXMgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgZGVmaW5pdGlvbiByaWdodCwgYmVmb3JlIEkgc3RhcnQgd29ya2luZyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIGlzIGxpa2VseSB0aGUgcm9vdCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBzb21lIHZpcnR1YWwgdGVzdCBkcml2ZXIuXG4gMTUxOlx0XG4gMTUyOlx0XHQgIEluIGNhc2Ugb2YgZG91YnRzLCBzYXkgTi5cbiAxNTM6XHRcdCAgU2F5IFkgd2hlbiB5b3UgaGF2ZSBhIHNvZnR3YXJlIGRlZmluZWQgcmFkaW8gZGV2aWNlLlxuIDE1NDpcdGVuZG1lbnUgIyBtZWRpYSBkZXZpY2UgdHlwZXNcbiAxNTU6XHRcbiAxNTY6XHRcbiAxNTc6XHRtZW51IFwmIzM0O01lZGlhIGNvcmUgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0dmlzaWJsZSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcbiAxNTk6XHRcbiAxNjA6XHRjb25maWcgVklERU9fREVWXG4gMTYxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaWRlbzRMaW51eCBjb3JlXCYjMzQ7XG4gMTYyOlx0XHRkZWZhdWx0IE1FRElBX0NBTUVSQV9TVVBQT1JUIHx8IE1FRElBX0FOQUxPR19UVl9TVVBQT1JUIHx8IE1FRElBX1JBRElPX1NVUFBPUlQgfHwgTUVESUFfU0RSX1NVUFBPUlQgfHwgTUVESUFfUExBVEZPUk1fU1VQUE9SVCB8fCBNRURJQV9URVNUX1NVUFBPUlRcbiAxNjM6XHRcdGRlcGVuZHMgb24gKEkyQyB8fCBJMkM9bilcbiAxNjQ6XHRcdHNlbGVjdCBSQVRJT05BTFxuIDE2NTpcdFx0c2VsZWN0IFZJREVPQlVGMl9WNEwyIGlmIFZJREVPQlVGMl9DT1JFXG4gMTY2Olx0XHRoZWxwXG4gMTY3Olx0XHQgIEVuYWJsZXMgdGhlIFY0TDIgQVBJLCB1c2VkIGJ5IGNhbWVyYXMsIGFuYWxvZyBUViwgdmlkZW8gZ3JhYmJlcnMsXG4gMTY4Olx0XHQgIHJhZGlvIGRldmljZXMgYW5kIGJ5IHNvbWUgaW5wdXQgZGV2aWNlcy5cbiAxNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uczogVklERU9cX1VTQlRWIGFuZCBNRURJQVxfU1VQUE9SVCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IHJldm9sdmVzIGFyb3VuZCB0aGUgYFZJREVPX1VTQlRWYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHNldHRpbmcgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQsIGhvbGQgb24uLi4gaXQmIzM5O3MgYWxzbyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1FRElBX1NVUFBPUlRgIGZsYWcuIEV2ZW4gdGhvdWdoIGBWSURFT19VU0JUVmAgaXMgdGhlIG1haW4gY29uZmlnLCBJIGNhbiYjMzk7dCBkaXNtaXNzIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgYE1FRElBX1NVUFBPUlRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2hhdGV2ZXIgZGVjaXNpb25zIEkgbWFrZSByZWdhcmRpbmcgYFZJREVPX1VTQlRWYCwgdGhleSBkb24mIzM5O3QgaW5hZHZlcnRlbnRseSBjb25mbGljdCBvciBsaW1pdCB0aGUgZnVuY3Rpb25hbGl0eSBlbmFibGVkIGJ5IGBNRURJQV9TVVBQT1JUYC4gVGltZSB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3b+KApiBhIG1vcmUgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgbmVlZGVkIHRvIGVuc3VyZSBmdWxsIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRURJQV9TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS9LY29uZmlnPTEwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL2NlYy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL21lZGlhL0tjb25maWctMTEtXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MTI6bWVudWNvbmZpZyBNRURJQV9TVVBQT1JUXG5kcml2ZXJzL21lZGlhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aW1lZGlhIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21lZGlhL0tjb25maWc9MjM9aWYgTUVESUFfU1VQUE9SVFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI0LVxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjI1OmNvbmZpZyBNRURJQV9TVVBQT1JUX0ZJTFRFUlxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtGaWx0ZXIgbWVkaWEgZHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFzc2Vzc2luZyBNZWRpYSBTdXBwb3J0IENhcGFiaWxpdGllcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSBoaW5nZXMgb24gcHJvcGVyIG1lZGlhIHN1cHBvcnQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBNRURJQV9VU0JfU1VQUE9SVGAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZSBmb3IgVVNCLWJhc2VkIG1lZGlhIGludGVyYWN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGFuZCBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVESUFfVVNCX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZz0zPWlmIFVTQiBcdTAwMjZcdTAwMjYgTUVESUFfU1VQUE9SVFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy00LVxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZzo1Om1lbnVjb25maWcgTUVESUFfVVNCX1NVUFBPUlRcbmRyaXZlcnMvbWVkaWEvdXNiL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWVkaWEgVVNCIEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqVVNCIE1lZGlhIERyaXZlciBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBNRURJQV9VU0JfU1VQUE9SVGAgZW5hYmxlZCBhcyB3ZWxsLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCYjMzk7cyBub3QganVzdCBhc3N1bWUgaXQmIzM5O3MgYWN0aXZhdGVkLCB0aG91Z2guIExldCYjMzk7cyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGluIHRoZSBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHN1cmUgYWxsIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCBkZXBlbmRlbmNpZXMgaW4gdGhlc2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0aWYgVVNCIFx1MDAyNlx1MDAyNiBNRURJQV9TVVBQT1JUXG4gICA0Olx0XG4gICA1Olx0bWVudWNvbmZpZyBNRURJQV9VU0JfU1VQUE9SVFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtNZWRpYSBVU0IgQWRhcHRlcnNcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgRW5hYmxlIG1lZGlhIGRyaXZlcnMgZm9yIFVTQiBidXMuXG4gICA5Olx0XHQgIElmIHlvdSBoYXZlIHN1Y2ggZGV2aWNlcywgc2F5IFkuXG4gIDEwOlx0XG4gIDExOlx0aWYgTUVESUFfVVNCX1NVUFBPUlRcbiAgMTI6XHRcbiAgMTM6XHRpZiBNRURJQV9DQU1FUkFfU1VQUE9SVFxuICAxNDpcdFx0Y29tbWVudCBcJiMzNDtXZWJjYW0gZGV2aWNlc1wmIzM0O1xuICAxNTpcdFxuICAxNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L0tjb25maWdcJiMzNDtcbiAgMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0JUViBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHVzYnR2YCByZWFsbHkgbmVzdGVkIHVuZGVyIGBNRURJQV9DQU1FUkFfU1VQUE9SVGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcy4gWWVwLCB0aGVyZSBpdCBpczogYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYHVzYnR2YCBpcyBjbGVhcmx5IGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgLiBUaW1lIHRvIGp1bXAgaW50byBgZHJpdmVycy9tZWRpYS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJyb2FkZXIgY29udGV4dC4gTmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS9LY29uZmlnPTYyPW1lbnUgXCYjMzQ7TWVkaWEgZGV2aWNlIHR5cGVzXCYjMzQ7XG4tLVxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTY2LSNcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZzo2Nzpjb25maWcgTUVESUFfQ0FNRVJBX1NVUFBPUlRcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkNoZWNraW5nIGZvciBDYW1lcmEgU3VwcG9ydCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbDogaXMgY2FtZXJhIHN1cHBvcnQgZXZlbiBlbmFibGVkIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbj8gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVkaWEgZGV2aWNlcyBhcmUgZGVmaW5lZC4gU28sIGxldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIGlmIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCBleGlzdHMgYW5kIHdoYXQgaXRzIHN0YXR1cyBpcy4gVGhpcyB3aWxsIGRpY3RhdGUgd2hldGhlciBJIG5lZWQgdG8gYm90aGVyIGxvb2tpbmcgZnVydGhlciBpbnRvIGNhbWVyYS1yZWxhdGVkIGNvZGUgYXQgYWxsLCBvciBpZiB0aGlzIHdob2xlIGFyZWEgaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQgZm9yIHRoaXMgYnVpbGQuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRoYXQgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdCAgSWYgdW5zdXJlIHNheSBZLlxuICA2MTpcdFxuICA2MjpcdG1lbnUgXCYjMzQ7TWVkaWEgZGV2aWNlIHR5cGVzXCYjMzQ7XG4gIDYzOlx0XG4gIDY0Olx0I1xuICA2NTpcdCMgTXVsdGltZWRpYSBzdXBwb3J0IC0gYXV0b21hdGljYWxseSBlbmFibGUgVjRMMiBhbmQgRFZCIGNvcmVcbiAgNjY6XHQjXG4gIDY3Olx0Y29uZmlnIE1FRElBX0NBTUVSQV9TVVBQT1JUXG4gIDY4Olx0XHRib29sXG4gIDY5Olx0XHRwcm9tcHQgXCYjMzQ7Q2FtZXJhcyBhbmQgdmlkZW8gZ3JhYmJlcnNcJiMzNDsgaWYgTUVESUFfU1VQUE9SVF9GSUxURVJcbiAgNzA6XHRcdGRlZmF1bHQgeSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHdlYmNhbXMgYW5kIHZpZGVvIGdyYWJiZXJzLlxuICA3MzpcdFxuICA3NDpcdFx0ICBTYXkgWSB3aGVuIHlvdSBoYXZlIGEgd2ViY2FtIG9yIGEgdmlkZW8gY2FwdHVyZSBncmFiYmVyIGJvYXJkLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVFxuICA3NzpcdFx0Ym9vbFxuICA3ODpcdFx0cHJvbXB0IFwmIzM0O0FuYWxvZyBUVlwmIzM0OyBpZiBNRURJQV9TVVBQT1JUX0ZJTFRFUlxuICA3OTpcdFx0ZGVmYXVsdCB5IGlmICFNRURJQV9TVVBQT1JUX0ZJTFRFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQlRWIFN1cHBvcnQgd2l0aGluIHRoZSBLZXJuZWwgTWVkaWEgRnJhbWV3b3JrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBhIHJlcXVpcmVtZW50LiBOb3csIGhvbGQgb24sIEkgc2VlIGBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVGAgbWVudGlvbmVkLCBhbmQgdGhhdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIFRoZSBgdXNidHZgIGRyaXZlciBpcyBkZXNjcmliZWQgYXMgJiMzNDtVU0JUVjAwNyB2aWRlbyBjYXB0dXJlIHN1cHBvcnQsJiMzNDsgYW5kIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgbG9naWNhbGx5IGZhbGxzIHVuZGVyIHRoZSBjYW1lcmEgc3VwcG9ydCB1bWJyZWxsYS4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBBaCwgaGVyZSB3ZSBnbywgbGluZSAxMyBhbmQgb253YXJkIHRlbGxzIHRoZSB0YWxlOgoKYGBgCmlmIE1FRElBX0NBTUVSQV9TVVBQT1JUCiAgICBjb21tZW50ICYjMzQ7V2ViY2FtIGRldmljZXMmIzM0OwoKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL0tjb25maWcmIzM0OwogICAgc291cmNlICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvcHdjL0tjb25maWcmIzM0OwogICAgc291cmNlICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnJiMzNDsKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy9LY29uZmlnJiMzNDsKICAgIHNvdXJjZSAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3pyMzY0eHgvS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9zdGt3ZWJjYW0vS2NvbmZpZyYjMzQ7CiAgICBzb3VyY2UgJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9jcGlhMi9LY29uZmlnJiMzNDsKZW5kaWYKYGBgCgpCaW5nbyEgYHVzYnR2YCBpcyBleHBsaWNpdGx5ICppbnNpZGUqIHRoYXQgYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYCBibG9jay4gU28sIHRoZXJlIGl0IGlzIOKAkyBVU0JUViBzdXBwb3J0IGlzIGluZGVlZCBjb250aW5nZW50IG9uIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBmcmFtZXdvcmsgaXMgc3RydWN0dXJlZC4gTm93IEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIG15IHRhc2ssIGtub3dpbmcgdGhhdCBkZXBlbmRlbmN5IGlzIGVzdGFibGlzaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XG4gIDExOlx0aWYgTUVESUFfVVNCX1NVUFBPUlRcbiAgMTI6XHRcbiAgMTM6XHRpZiBNRURJQV9DQU1FUkFfU1VQUE9SVFxuICAxNDpcdFx0Y29tbWVudCBcJiMzNDtXZWJjYW0gZGV2aWNlc1wmIzM0O1xuICAxNTpcdFxuICAxNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L0tjb25maWdcJiMzNDtcbiAgMTk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wmIzM0O1xuICAyMTpcdFxuICAyMjpcdGVuZGlmXG4gIDIzOlx0XG4gIDI0Olx0aWYgTUVESUFfQU5BTE9HX1RWX1NVUFBPUlRcbiAgMjU6XHRcdGNvbW1lbnQgXCYjMzQ7QW5hbG9nIFRWIFVTQiBkZXZpY2VzXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2dvNzAwNy9LY29uZmlnXCYjMzQ7XG4gIDI4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL2hkcHZyL0tjb25maWdcJiMzNDtcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZgIGRyaXZlciBhbmQgY29uZmlybWluZyBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHdoZW4gYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkgc2VlIHRoYXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgbG9va3MgbGlrZTogYE1FRElBX1NVUFBPUlRgLCBgTUVESUFfVVNCX1NVUFBPUlRgLCBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgLCBhbmQgc3BlY2lmaWNhbGx5IGBWSURFT19VU0JUVmAuIEkgcmVjYWxsIHRoYXQgYFZJREVPX1VTQlRWYCBpdHNlbGYgZGVwZW5kcyBvbiBgVklERU9fREVWYCBhbmQgYFNORGAuIEZvcnR1bmF0ZWx5LCBgVklERU9fREVWYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgaXMsIHNvIHRoYXQmIzM5O3MgaGFuZGxlZC4gYFNORGAgaXMgdGhlIHNvdW5kIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSB2aWRlbyBkcml2ZXIuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHdoZXJlIHRoZSBwYXRjaCBpcyB0b3VjaGluZy4gSSBzZWUgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBgdXNidHZfZGlzY29ubmVjdGAuIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQgYHVzYnR2X3Byb2JlYC4gQSBrZXkgZGV0YWlsIGhlcmUgaXMgdGhhdCBgdXNidHZfdmlkZW9fZnJlZWAgaXMgbm90IGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIGRlc2lnbmVkIGZvciB0ZWFyaW5nIGRvd24gdGhlIGhhcmR3YXJlLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIGhpZ2gtcGVyZm9ybWFuY2UgcGF0aC4gSG93ZXZlciwgdGhlIHJhY2UgY29uZGl0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgYmV0d2VlbiBgdXNidHZfZGlzY29ubmVjdGAgYW5kIHNvbWV0aGluZyBlbHNlLCBtYXliZSBWNEwyIGlvY3RscyBvciByZWd1bGFyIGZpbGUgb3BlcmF0aW9ucy4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGB1c2J0di0mZ3Q7djRsMl9sb2NrYC4gVGhhdCYjMzk7cyBnb2luZyB0byBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djRsMl9sb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9ODg0PWludCB1c2J0dl92aWRlb19pbml0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTAtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2VidWZsb2NrKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6ODkxOlx0bXV0ZXhfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTItXHRtdXRleF9pbml0KFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jayk7XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NDQtXHR1c2J0di1cdTAwM2V2ZGV2LnF1ZXVlID0gXHUwMDI2dXNidHYtXHUwMDNldmIycTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTQ1Olx0dXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NDYtXHR1c2J0di1cdTAwM2V2ZGV2LmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURSB8XG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz05NjY9dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NzAtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MTpcdG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTcyLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MzpcdG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NzQtXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTUtXHRzdHJ1Y3QgdmIyX3F1ZXVlIHZiMnE7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oOjk2Olx0c3RydWN0IG11dGV4IHY0bDJfbG9jaztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTctXHRzdHJ1Y3QgbXV0ZXggdmIycV9sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBgdXNidHYtJmd0O3ZkZXYubG9jayA9ICZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jaztgIHRlbGxzIG1lIHRoYXQgdGhlIGB2NGwyX2xvY2tgIGlzIHRoZSBwcmltYXJ5IGxvY2sgcHJvdGVjdGluZyB0aGUgVjRMMiBkZXZpY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIHRoZSBWNEwyIGNvcmUgd2lsbCBoYW5kbGUgYWNxdWlyaW5nIHRoaXMgbG9jayBmb3IgYW55IGlvY3RsIGNhbGxzLiBUaGlzIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCk15IHByaW1hcnkgY29uY2VybiBub3cgbGllcyBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCB0aGVzZSBWNEwyIGlvY3Rscy4gSSBuZWVkIHRvIGRlZXBseSBzY3J1dGluaXplIGB1c2J0dl9kaXNjb25uZWN0YCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBBbHNvLCBgdXNidHZfcHJvYmVgLCBzaW5jZSBpdCYjMzk7cyB0aGUgaW5pdGlhbGl6YXRpb24sIGlzIGFsc28gb2YgaW50ZXJlc3QuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIFY0TDIgaW9jdGxzIGluIGB1c2J0di12aWRlby5jYC4gSSBoYXZlIHRvIHNlZSB3aGF0IG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgYXQgdGhlIHRpbWUgdGhlIGRldmljZSBpcyB1bnBsdWdnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhlc2UgaW9jdGxzIGFyZSBiZWluZyBwcm9wZXJseSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGlzY29ubmVjdCByb3V0aW5lLiBUaGlzIHdpbGwgcmVxdWlyZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZXNlIGlvY3RsIGhhbmRsZXJzLiBMZXQgbWUgZGlnIGludG8gdGhhdCBgdXNidHYtdmlkZW8uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBpbiB0ZXJtcyBvZiBWNEwyIGlvY3RsIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2NGwyX2lvY3RsX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY4OD1zdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk0LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTY5Ni1cdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgYHVzYnR2X2lvY3RsX29wc2A6CgoqKkFuYWx5emluZyBgdXNidHZfaW9jdGxfb3BzYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdXNidHZfaW9jdGxfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgYW5kIHRoZSBVU0IgVFYgZHJpdmVyIGhhcHBlbnMsIHJpZ2h0PyBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZHJpdmVyIGRlZmluZXMgaXRzIHNwZWNpZmljIGNvbnRyb2wgb3BlcmF0aW9ucywgdGhlIGNvbW1hbmRzIHVzZXJzcGFjZSBjYW4gc2VuZCBpdC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHRvIHNlZSB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcy4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29tbWFuZHMgZm9yIHZpZGVvIGNhcHR1cmU6KiogQXJlIHRoZXJlIGBpb2N0bGAgY29tbWFuZHMgdG8gc3RhcnQsIHN0b3AsIGNvbmZpZ3VyZSB0aGUgdmlkZW8gc3RyZWFtPyBUaGluayBzZXR0aW5nIGZyYW1lIHJhdGVzLCByZXNvbHV0aW9ucywgY29kZWNzPyBUaGF0JiMzOTtzIHRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiBhIFVTQiBUViB0dW5lci4KKiAgICoqQXVkaW8gY29udHJvbD8qKiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIGEgY29ycmVzcG9uZGluZyBzZXQgZm9yIGF1ZGlvIHNldHRpbmdzIHRvby4gRXZlbiBpZiBpdCYjMzk7cyBqdXN0IHBhc3NpbmcgaXQgb2ZmIHRvIHRoZSBBTFNBIGxheWVyIGl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgd2hhdCBpcyBzdXBwb3J0ZWQuCiogICAqKlR1bmluZyBhbmQgQ2hhbm5lbCBjb250cm9sOioqIFRoaXMgaXMgY3J1Y2lhbC4gSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhlIGFjdHVhbCB0dW5pbmcgb2YgdGhlIGhhcmR3YXJlPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBmcmVxdWVuY3kgc2V0dGluZywgb3IgYXJlIHRoZXJlIG1vcmUgYWR2YW5jZWQgQVBJcyBmb3Igc2Nhbm5pbmcgYW5kIG1hbmFnaW5nIGNoYW5uZWxzPwoqICAgKipEZW11eGluZyBhbmQgRGF0YSBIYW5kbGluZzoqKiBJJiMzOTttIGN1cmlvdXMgaWYgdGhlIGBpb2N0bGAgb3BzIHJldmVhbCBhbnkgZGV0YWlscyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBNUEVHIHN0cmVhbXMgb3Igb3RoZXIgdHJhbnNwb3J0IHN0cmVhbXMuIElzIGl0IGRvaW5nIGFueSBkZW11eGluZyBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBzZW5kaW5nIHRoZSByYXcgZGF0YSB1cCB0byB1c2Vyc3BhY2U/IFRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHRoZSBkcml2ZXIgZGVzaWduLgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGVycm9ycyBhbmQgYW55IHJlbGV2YW50IGVycm9yIGNvZGVzLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgbWVjaGFuaXNtcyBmb3IgcmVzZXJ2aW5nLCByZWxlYXNpbmcsIGFuZCBtYW5hZ2luZyBoYXJkd2FyZSByZXNvdXJjZXMuCiogICAqKlZlcnNpb25pbmc6KiogQWx3YXlzIHdvcnRoIGEgcGVlay4gSWYgdGhlcmUmIzM5O3MgYSB2ZXJzaW9uaW5nIHNjaGVtZSwgaG93IGFyZSB0aGV5IGhhbmRsaW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5PwoKVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlc2UgYGlvY3RsYCBvcGVyYXRpb25zIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gZGlzc2VjdGluZyBob3cgdGhpcyBVU0IgVFYgZGV2aWNlIGNvbW11bmljYXRlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjkxOlx0XG4gNjkyOlx0XHRyZXR1cm4gdXNidHZfc2VsZWN0X2lucHV0KHVzYnR2LCBpKTtcbiA2OTM6XHR9XG4gNjk0Olx0XG4gNjk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG4gNjk2Olx0XHQudmlkaW9jX3F1ZXJ5Y2FwID0gdXNidHZfcXVlcnljYXAsXG4gNjk3Olx0XHQudmlkaW9jX2VudW1faW5wdXQgPSB1c2J0dl9lbnVtX2lucHV0LFxuIDY5ODpcdFx0LnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdXNidHZfZW51bV9mbXRfdmlkX2NhcCxcbiA2OTk6XHRcdC52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMDpcdFx0LnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiA3MDE6XHRcdC52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMjpcdFx0LnZpZGlvY19nX3N0ZCA9IHVzYnR2X2dfc3RkLFxuIDcwMzpcdFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuIDcwNDpcdFx0LnZpZGlvY19nX2lucHV0ID0gdXNidHZfZ19pbnB1dCxcbiA3MDU6XHRcdC52aWRpb2Nfc19pbnB1dCA9IHVzYnR2X3NfaW5wdXQsXG4gNzA2Olx0XG4gNzA3Olx0XHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcbiA3MDg6XHRcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXG4gNzA5Olx0XHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxuIDcxMDpcdFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcbiA3MTE6XHRcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxuIDcxMjpcdFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcbiA3MTM6XHRcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXG4gNzE0Olx0XHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXG4gNzE1Olx0fTtcbiA3MTY6XHRcbiA3MTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHVzYnR2X2ZvcHMgPSB7XG4gNzE4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA3MTk6XHRcdC51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVVNCVFYgRGV2aWNlIENvbnRyb2wqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zLCBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfZW51bV9pbnB1dGAsIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X2dfc3RkYCwgYHVzYnR2X3Nfc3RkYCwgYHVzYnR2X2dfaW5wdXRgLCBhbmQgYHVzYnR2X3NfaW5wdXRgLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBzZWVtIHRvIGJlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgVVNCVFYgZGV2aWNlLiBJJiMzOTttIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBrZXkuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkmIzM5O20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zX2lucHV0YC4gVGhleSBzZWVtIGxpa2UgdGhleSAqbWlnaHQqIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGB1c2J0di0mZ3Q7dWRldmAgb2JqZWN0LCB3aGljaCB3b3VsZCBiZSByZWFsbHkgaW1wb3J0YW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBgdXNidHZfc19zdGRgIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIGluY2x1ZGluZyBhbGwgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjYzPXN0YXRpYyBpbnQgdXNidHZfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpub3JtKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjY5LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2NzA6c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjcxLXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHVzYnR2X2lvY3RsX29wcyA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTcwMi1cdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NzAzOlx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03MDQtXHQudmlkaW9jX2dfaW5wdXQgPSB1c2J0dl9nX2lucHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGB1c2J0dl9zX3N0ZGAgU291cmNlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIFRoZSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgdXNidHZfc19zdGRgLiBJJiMzOTttIGFscmVhZHkgZW52aXNpb25pbmcgdGhlIGtleSBhcmVhcyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBhc3BlY3RzLiBJcyBpdCBhIG1vZHVsYXIgZGVzaWduPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIHRvIGhhbmRsZSB0aGUgdmlkZW8gc3RyZWFtIGRhdGEgYW5kIGl0cyBwcm9jZXNzaW5nPyBBcmUgdGhleSB1c2luZyBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXJzPyBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBmb2xsb3dzIGEgbG9naWNhbCBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjYW4gYnJpbmcgc29tZSBpbnNpZ2h0IGludG8gdGhlIHN0YW5kYXJkIGFzcGVjdHMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG90ZW50aWFsIGRhdGEgc3luY2hyb25pemF0aW9uIHByb2JsZW1zLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRzdGF0aWMgaW50IHVzYnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCBub3JtKVxuIDY3MTpcdHtcbiA2NzI6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuIDY3MzpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjc0Olx0XG4gNjc1Olx0XHRpZiAobm9ybSBcdTAwMjYgVVNCVFZfVFZfU1REKVxuIDY3NjpcdFx0XHRyZXQgPSB1c2J0dl9zZWxlY3Rfbm9ybSh1c2J0diwgbm9ybSk7XG4gNjc3Olx0XG4gNjc4Olx0XHRyZXR1cm4gcmV0O1xuIDY3OTpcdH1cbiA2ODA6XHRcbiA2ODE6XHRzdGF0aWMgaW50IHVzYnR2X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSlcbiA2ODI6XHR7XG4gNjgzOlx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2ODQ6XHRcdCppID0gdXNidHYtXHUwMDNlaW5wdXQ7XG4gNjg1Olx0XHRyZXR1cm4gMDtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcbiA2ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGB1c2J0dl9zZWxlY3Rfbm9ybWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1c2J0dl9zZWxlY3Rfbm9ybWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBVU0IgdmlkZW8gcGlwZWxpbmUuIElzIGl0IHJlbGF0ZWQgdG8gc3RhbmRhcmQgc2VsZWN0aW9uIOKAkyBOVFNDLCBQQUwsIFNFQ0FNLCBvciBzb21lIHNwZWNpZmljIHJlZ2lvbmFsIHZhcmlhbnQ/IE9yIGlzIGl0IG1vcmUgZ3JhbnVsYXIsIGRlYWxpbmcgd2l0aCBsaW5lIHJhdGVzLCBmcmFtZSByYXRlcywgYW5kIHBpeGVsIGNsb2NrIHNldHRpbmdzPyBLbm93aW5nIHRoZSBvdmVyYWxsIGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgZ29pbmcgYW55IGRlZXBlci4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleSBpbmRpY2F0b3JzIOKAkyB2YXJpYWJsZSBuYW1lcyB0aGF0IGhpbnQgYXQgdGhlIHRhcmdldGVkIHN0YW5kYXJkLCBiaXRmaWVsZHMgdGhhdCBtaWdodCBlbmNvZGUgdGhlIHNlbGVjdGlvbiwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgb3IgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGF0IGEgaGlnaGVyIGxldmVsLCBwb3RlbnRpYWxseSB1c2luZyBzb21lIGFic3RyYWN0aW9uIGxheWVyIGxpa2UgYSBWaWRlbzRMaW51eCAoVjRMKSBkcml2ZXIuCgpJZiBpdCAqaXMqIGRlYWxpbmcgd2l0aCByZWdpc3RlciBtYW5pcHVsYXRpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcG93ZXIgY29uc3VtcHRpb24sIHRpbWluZyBjb25zdHJhaW50cywgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEFyZSB0aGVyZSBhbnkga25vd24gZXJyYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBzZXR0aW5ncyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlPyBJJiMzOTtsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIHRoaXMgc2VsZWN0aW9uIG1lY2hhbmlzbT8gQXJlIHRoZXJlIGZhbGxiYWNrIG1lY2hhbmlzbXMgaWYgYSBwYXJ0aWN1bGFyIHN0YW5kYXJkIGlzIG5vdCBzdXBwb3J0ZWQ/IFdoYXQgaGFwcGVucyBpZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8KCkVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHksIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbCBwaXRmYWxscy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGFzc2VzcyBob3cgd2VsbCBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3NlbGVjdF9ub3JtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9MTI4PXN0YXRpYyB1aW50MTZfdCB1c2J0dl9ub3JtX3RvXzE2Zl9yZWcodjRsMl9zdGRfaWQgbm9ybSlcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTE0OC1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MTQ5OnN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTUwLXtcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0My1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQ0Olx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIHVzYnR2LVx1MDAzZW5vcm0pO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0zNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjcwPXN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzUtXHRpZiAobm9ybSBcdTAwMjYgVVNCVFZfVFZfU1REKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2NzY6XHRcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCBub3JtKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA2MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgdGhpcyBVU0IgdmlkZW8gcHJvamVjdDoKCioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1c2J0dl9zZWxlY3Rfbm9ybWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgbmFtZS4gSXQmIzM5O3Mgb2J2aW91c2x5IHRpZWQgdG8gc2VsZWN0aW5nIHRoZSB2aWRlbyBzdGFuZGFyZCBvciAmIzM5O25vcm0mIzM5OyBmb3IgYSBVU0IgVFYgZGV2aWNlIOKAkyBOVFNDLCBQQUwsIFNFQ0FNLCB0aGF0IGtpbmQgb2YgdGhpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2VsZWN0aW9uPyBJcyBpdCBqdXN0IGEgaGFyZHdhcmUgc2V0dGluZywgb3IgZG9lcyBpdCB0cmlnZ2VyIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGl4ZWwgY2xvY2ssIGNvbG9yIHNwYWNlLCBvciBldmVuIERNQSBzZXR0aW5ncz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhZnRlciB0aGlzIHBvaW50LCBhbmQgaG93IGl0IGVmZmVjdHMgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBwb3NzaWJsZSBkZXBlbmRlbmNpZXMuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgY29uZGl0aW9ucyB0byBiZSBhd2FyZSBvZi4uLiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtcy4uLiBvciBldmVuLCB3b3JzZSwgYSBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgdGhpbmdzIGluIG1pbmQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdHN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0LyogVGhlc2UgYXJlIHRoZSBzZXJpZXMgb2YgcmVnaXN0ZXIgdmFsdWVzIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuIDE1MzpcdFx0ICogZGVjb2RlciBmb3IgYSBzcGVjaWZpYyBzdGFuZGFyZC5cbiAxNTQ6XHRcdCAqIFRoZSBmaXJzdCAyMSByZWdpc3RlciB3cml0ZXMgYXJlIGNvcGllZCBmcm9tIHRoZVxuIDE1NTpcdFx0ICogU2V0dGluZ3NcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXG4gMTU2Olx0XHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXG4gMTU3Olx0XHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXG4gMTU4Olx0XHQgKi9cbiAxNTk6XHRcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XG4gMTYwOlx0XHRcdC8qIFwmIzM0O0FWUEFMXCYjMzQ7IHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xuIDE2MTpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMDAzLCAweDAwMDQgfSxcbiAxNjI6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDAxYSwgMHgwMDY4IH0sXG4gMTYzOlx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMDAsIDB4MDBkMyB9LFxuIDE2NDpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTBlLCAweDAwNzIgfSxcbiAxNjU6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDEwZiwgMHgwMGEyIH0sXG4gMTY2Olx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMTIsIDB4MDBiMCB9LFxuIDE2NzpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTE1LCAweDAwMTUgfSxcbiAxNjg6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDExNywgMHgwMDAxIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHVzYnR2X3NlbGVjdF9ub3JtYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWUsIHByZXN1bWFibHkgc2VsZWN0cyBhIHZpZGVvIHN0YW5kYXJkLiBCdXQgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGlzICpob3cqIGl0JiMzOTtzIGRvaW5nIHRoaXMgc2VsZWN0aW9uLiBUaGUgdGV4dCBleHBsaWNpdGx5IHBvaW50cyBvdXQgdGhhdCBpdCYjMzk7cyB3cml0aW5nIHRvIHJlZ2lzdGVycywgYW5kIGl0JiMzOTtzIGRvaW5nIHNvICp2aWEgVVNCKi4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbiBJIG5lZWQgdG8gbWFrZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpbXBsaWVzIGEgbG93LWxldmVsIGludGVyYWN0aW9uOyBpdCBpc24mIzM5O3QgdXNpbmcgYSBoaWdoLWxldmVsIEFQSSBhYnN0cmFjdGlvbiBmb3IgdGhlIHRhc2suIEl0JiMzOTtzIHNlbmRpbmcgY29tbWFuZHMgZGlyZWN0bHkgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZSB0byBjb25maWd1cmUgdGhlIGRldmljZSYjMzk7cyBpbnRlcm5hbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGJhbmR3aWR0aCB1dGlsaXphdGlvbiwgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgZm9yIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbi9kZWJ1Z2dpbmcgY29uc2lkZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYnR2X3NldF9yZWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM9MTcyPXN0YXRpYyBpbnQgdXNidHZfYXVkaW9fc3RhcnQoc3RydWN0IHVzYnR2ICpjaGlwKVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjE1LVx0Lyogc3RhcnRpbmcgdGhlIHN0cmVhbSAqL1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYzoyMTY6XHR1c2J0dl9zZXRfcmVncyhjaGlwLCBzZXR1cCwgQVJSQVlfU0laRShzZXR1cCkpO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYy0yMTctXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYz0yMzE9c3RhdGljIGludCB1c2J0dl9hdWRpb19zdG9wKHN0cnVjdCB1c2J0diAqY2hpcClcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTI1MC1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM6MjUxOlx0dXNidHZfc2V0X3JlZ3MoY2hpcCwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjUyLVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy00Ni1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzo0NzppbnQgdXNidHZfc2V0X3JlZ3Moc3RydWN0IHVzYnR2ICp1c2J0diwgY29uc3QgdTE2IHJlZ3NbXVsyXSwgaW50IHNpemUpXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtNDgte1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9OTE9c3RhdGljIGludCB1c2J0dl9zZWxlY3RfaW5wdXQoc3RydWN0IHVzYnR2ICp1c2J0diwgaW50IGlucHV0KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTEyLVx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExMzpcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIGNvbXBvc2l0ZSwgQVJSQVlfU0laRShjb21wb3NpdGUpKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE0LVx0XHRicmVhaztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE1LVx0Y2FzZSBVU0JUVl9TVklERU9fSU5QVVQ6XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExNjpcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHN2aWRlbywgQVJSQVlfU0laRShzdmlkZW8pKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE3LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTE0OT1zdGF0aWMgaW50IHVzYnR2X3NlbGVjdF9ub3JtKHN0cnVjdCB1c2J0diAqdXNidHYsIHY0bDJfc3RkX2lkIG5vcm0pXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTMtXHRcdGlmIChub3JtIFx1MDAyNiBudHNjX21hc2spXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NDpcdFx0XHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgbnRzYywgQVJSQVlfU0laRShudHNjKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1NS1cdFx0ZWxzZSBpZiAobm9ybSBcdTAwMjYgcGFsX21hc2spXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NjpcdFx0XHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgcGFsLCBBUlJBWV9TSVpFKHBhbCkpO1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTctXHRcdGVsc2UgaWYgKG5vcm0gXHUwMDI2IFY0TDJfU1REX1NFQ0FNKVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNTg6XHRcdFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHNlY2FtLCBBUlJBWV9TSVpFKHNlY2FtKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1OS1cdFx0ZWxzZVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjY3LVx0XHR9O1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNjg6XHRcdHJldCA9IHVzYnR2X3NldF9yZWdzKHVzYnR2LCBjZmcsIEFSUkFZX1NJWkUoY2ZnKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI2OS1cdH1cbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTMzOS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQwOlx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIHNldHVwLCBBUlJBWV9TSVpFKHNldHVwKSk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTI5LVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzA6aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKTtcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4MgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHVzYnR2X3NldF9yZWdzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB1c2J0dl9zZXRfcmVnc2AuJiMzNDsgWWVwLCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBnbyBiYWNrIHRvIHRoZSBzb3VyY2UsIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgYmVpbmcgc2V0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXR1cC4gVGhpcyBmdW5jdGlvbiBpcyBib3VuZCB0byBiZSB0aGUga2V5IHRvIGFsbCB0aGUgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBNeSBleHBlcmllbmNlIHNheXMgdGhhdCB0aGlzIGlzIGEgZ3JlYXQgcG9pbnQgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NzpcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcbiAgNDg6XHR7XG4gIDQ5Olx0XHRpbnQgcmV0O1xuICA1MDpcdFx0aW50IHBpcGUgPSB1c2Jfc25kY3RybHBpcGUodXNidHYtXHUwMDNldWRldiwgMCk7XG4gIDUxOlx0XHRpbnQgaTtcbiAgNTI6XHRcbiAgNTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KSB7XG4gIDU0Olx0XHRcdHUxNiBpbmRleCA9IHJlZ3NbaV1bMF07XG4gIDU1Olx0XHRcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XG4gIDU2Olx0XG4gIDU3Olx0XHRcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cdTAwM2V1ZGV2LCBwaXBlLCBVU0JUVl9SRVFVRVNUX1JFRyxcbiAgNTg6XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4gIDU5Olx0XHRcdFx0dmFsdWUsIGluZGV4LCBOVUxMLCAwLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7XG4gIDYwOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDYxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNjI6XHRcdH1cbiAgNjM6XHRcbiAgNjQ6XHRcdHJldHVybiAwO1xuICA2NTpcdH1cbiAgNjY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4ODEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBVU0JUViBEcml2ZXIqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgdXNpbmcgYHVzYnR2LSZndDt1ZGV2YC4gUmlnaHQgYXdheSwgdGhlIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYgYmVjYXVzZSBpZiBgdXNidHYtJmd0O3VkZXZgIGlzIGV2ZXIgYE5VTExgLCB0aGVuIGNhbGxzIGxpa2UgYHVzYl9zbmRjdHJscGlwZWAgYXJlIGdvaW5nIHRvIHRyaWdnZXIgYSBjcmFzaC4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIGB1c2Jfc25kY3RybHBpcGVgIGlzIGp1c3QgYSBtYWNybywgcmlnaHQ/IEl0IGV4cGFuZHMgdG8gYSBjYWxjdWxhdGlvbiBpbnZvbHZpbmcgYF9fY3JlYXRlX3BpcGVgIHdoaWNoIGluIHR1cm4gdHJpZXMgdG8gYWNjZXNzIGAoZGV2KS0mZ3Q7ZGV2bnVtYC4gSWYgdGhhdCBgZGV2YCBpcyBudWxsLCBpdCYjMzk7cyBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgcGxhaW4gYW5kIHNpbXBsZS4KClNvLCAqZGVmaW5pdGVseSogYSBwcm9ibGVtIGlmIGB1c2J0di0mZ3Q7dWRldmAgaXMgTlVMTCB3aGVuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBJIHNlZSB0aGUgY29kZSBkZWxpYmVyYXRlbHkgc2V0dGluZyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMO2AgaW5zaWRlIGEgYG11dGV4X2xvY2soJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrKTtgLiBBbHJpZ2h0LCBnb3QgaXQuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkIGZyb20gYHVzYnR2X3NlbGVjdF9ub3JtYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgdXNidHZfc19zdGRgLiBBbmQgYHVzYnR2X3Nfc3RkYCBpcyBjYWxsZWQgYXMgYSBWNEwyIGlvY3RsLiBUaGUgVjRMMiBjb3JlLCBiZWluZyB3aGF0IGl0IGlzLCBhdXRvbWF0aWNhbGx5IGdyYWJzIHRoZSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AgYmVmb3JlIGNhbGxpbmcgYHVzYnR2X3Nfc3RkYCBiZWNhdXNlIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AuIFRoaXMgc2V0dXAgaXMgZXhwbGljaXRseSBwcmV2ZW50aW5nIGB1c2J0dl9zX3N0ZGAgZnJvbSBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBkaXNjb25uZWN0LgoKQnV0LCBhbmQgdGhpcyBpcyBhIGJpZyBidXQuLi5kb2VzIGB1c2J0dl9zX3N0ZGAgaXRzZWxmICpjaGVjayogaWYgYHVzYnR2LSZndDt1ZGV2YCBpcyBOVUxMIGJlZm9yZSBpdCB0cmllcyB0byBkbyBhbnl0aGluZyB3aXRoIGl0PyBUaGlzIGlzIGNydWNpYWwuIElmIGl0IGRvZXNuJiMzOTt0LCB0aGF0IGxvY2sgaXMgb25seSBwYXJ0aWFsbHkgZWZmZWN0aXZlISBJJiMzOTt2ZSBnb3R0YSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgdXNidHZfc19zdGRgIGFuZCBgdXNidHZfc2VsZWN0X25vcm1gLiBHb3R0YSBzZWUgaWYgdGhlcmUmIzM5O3MgYSBudWxsIGNoZWNrLCBvciBpZiB0aGV5IGp1c3QgYmxpdGhlbHkgYXNzdW1lIHRoYXQgYHVzYnR2LSZndDt1ZGV2YCB3aWxsIGFsd2F5cyBiZSB2YWxpZCwgd2hpY2ggZ2l2ZW4gdGhlIHByaW9yIGFzc2lnbm1lbnQsIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdHN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcbiAxNTA6XHR7XG4gMTUxOlx0XHRpbnQgcmV0O1xuIDE1MjpcdFx0LyogVGhlc2UgYXJlIHRoZSBzZXJpZXMgb2YgcmVnaXN0ZXIgdmFsdWVzIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuIDE1MzpcdFx0ICogZGVjb2RlciBmb3IgYSBzcGVjaWZpYyBzdGFuZGFyZC5cbiAxNTQ6XHRcdCAqIFRoZSBmaXJzdCAyMSByZWdpc3RlciB3cml0ZXMgYXJlIGNvcGllZCBmcm9tIHRoZVxuIDE1NTpcdFx0ICogU2V0dGluZ3NcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXG4gMTU2Olx0XHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXG4gMTU3Olx0XHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXG4gMTU4Olx0XHQgKi9cbiAxNTk6XHRcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XG4gMTYwOlx0XHRcdC8qIFwmIzM0O0FWUEFMXCYjMzQ7IHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xuIDE2MTpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMDAzLCAweDAwMDQgfSxcbiAxNjI6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDAxYSwgMHgwMDY4IH0sXG4gMTYzOlx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMDAsIDB4MDBkMyB9LFxuIDE2NDpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTBlLCAweDAwNzIgfSxcbiAxNjU6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDEwZiwgMHgwMGEyIH0sXG4gMTY2Olx0XHRcdHsgVVNCVFZfQkFTRSAmIzQzOyAweDAxMTIsIDB4MDBiMCB9LFxuIDE2NzpcdFx0XHR7IFVTQlRWX0JBU0UgJiM0MzsgMHgwMTE1LCAweDAwMTUgfSxcbiAxNjg6XHRcdFx0eyBVU0JUVl9CQVNFICYjNDM7IDB4MDExNywgMHgwMDAxIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjc1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIE51bGwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBgdXNidHZfc2V0X3JlZ3NgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20ganVzdCBxdWlja2x5IHRoaW5raW5nLCBpZiB0aGF0IGB1c2J0di0mZ3Q7dWRldmAgcG9pbnRlciBpcyBOVUxMLCBkb2VzIHRoZSBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uIGFjdHVhbGx5IGRvIGEgY2hlY2sgb24gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGhlcmUuIFRoaXMgaXMgYSBjbGFzc2ljIGFyZWEgZm9yIGlzc3VlcywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHJvYnVzdC4gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGB1c2J0dl9zZXRfcmVnc2AgZnVuY3Rpb24sIGp1c3QgdG8gYmUgc2FmZS4gTGV0JiMzOTtzIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHJldmlldyBpdHMgbG9naWMgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ3Olx0aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKVxuICA0ODpcdHtcbiAgNDk6XHRcdGludCByZXQ7XG4gIDUwOlx0XHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cdTAwM2V1ZGV2LCAwKTtcbiAgNTE6XHRcdGludCBpO1xuICA1MjpcdFxuICA1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiAgNTQ6XHRcdFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcbiAgNTU6XHRcdFx0dTE2IHZhbHVlID0gcmVnc1tpXVsxXTtcbiAgNTY6XHRcbiAgNTc6XHRcdFx0cmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnR2LVx1MDAzZXVkZXYsIHBpcGUsIFVTQlRWX1JFUVVFU1RfUkVHLFxuICA1ODpcdFx0XHRcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbiAgNTk6XHRcdFx0XHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcbiAgNjA6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAgNjE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuICA2MjpcdFx0fVxuICA2MzpcdFxuICA2NDpcdFx0cmV0dXJuIDA7XG4gIDY1Olx0fVxuICA2NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBTeW5jaHJvbml6YXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZpeC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXYWl0LCBgdXNidHZfc2V0X3JlZ3NgIGRvZXNuJiMzOTt0IGNoZWNrIGZvciBhIE5VTEwgYHVzYnR2LSZndDt1ZGV2YD8hIFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgdXNiX3NuZGN0cmxwaXBlYCEmIzM0Oy4gQnV0IHRoZW4gSSByZWFsaXplZCwgaWYgYHVzYnR2LSZndDt1ZGV2YCAqaXMqIE5VTEwsIGhvdyBkb2VzIHRoZSBwYXRjaCBhZGRyZXNzIHRoZSByYWNlIGNvbmRpdGlvbj8KClRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGB2NGwyX2xvY2tgLiBJZiBgdXNidHYtJmd0O3VkZXZgIGlzIHNldCB0byBOVUxMICp1bmRlciogdGhlIHByb3RlY3Rpb24gb2YgYHY0bDJfbG9ja2AsIHRoZW4gYW55IElPQ1RMIHRoYXQgcnVucyBhZnRlciBgdjRsMl9sb2NrYCBpcyByZWxlYXNlZCBzaG91bGQgc2VlIGB1c2J0di0mZ3Q7dWRldiA9PSBOVUxMYCwgYnV0IGV2ZW4gdGhlbiwgaXQgc2VlbXMgcHJvYmxlbWF0aWMuLi4KCkFoYSEgVGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIHRoZSBWNEwyIGNvcmUgdGhhdCByZWplY3RzIElPQ1RMcy4gSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGNoZWNrIGZvciBgdmlkZW9faXNfcmVnaXN0ZXJlZGAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB3aXRoaW4gdGhlIFY0TDIgY29yZS4gWWVzLCB0aGUgVjRMMiBjb3JlIGNoZWNrcyBgdmlkZW9faXNfcmVnaXN0ZXJlZCgpYCBiZWZvcmUgY2FsbGluZyBJT0NUTHMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuCgpgdXNidHZfdmlkZW9fZnJlZWAgY2FsbHMgYHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3VzYnR2LSZndDt2ZGV2KWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYC4gVGhpcyBjbGVhcnMgdGhlIGBWNEwyX0ZMX1JFR0lTVEVSRURgIGZsYWcuIEFueSBuZXcgSU9DVEwgaXMgcmVqZWN0ZWQgYnkgYHZpZGVvX2lvY3RsMmAgb3IgYHY0bDJfaW9jdGxgIGJlY2F1c2UgdGhlIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuCgpCdXQgd2hhdCBhYm91dCBhbiBJT0NUTCB0aGF0IGlzIEFMUkVBRFkgcnVubmluZz8gSWYgYW4gSU9DVEwgaXMgYWxyZWFkeSBydW5uaW5nLCBpdCBob2xkcyBgdjRsMl9sb2NrYC4gIGB1c2J0dl92aWRlb19mcmVlYCB3aWxsIGJsb2NrIG9uIGBtdXRleF9sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7YCB1bnRpbCB0aGUgSU9DVEwgZmluaXNoZXMuIFRoZW4gaXQgd2lsbCBzZXQgYHVzYnR2LSZndDt1ZGV2ID0gTlVMTDtgLiBTbyB0aGUgSU9DVEwgd2lsbCBmaW5pc2ggd2l0aCBgdXNidHYtJmd0O3VkZXZgIHN0aWxsIHZhbGlkLiBBZnRlciB0aGUgSU9DVEwgZmluaXNoZXMsIGB1c2J0dl92aWRlb19mcmVlYCBhY3F1aXJlcyB0aGUgbG9jaywgc2V0cyBgdXNidHYtJmd0O3VkZXYgPSBOVUxMYCwgYW5kIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQsIHNvIG5vIG5ldyBJT0NUTHMgY2FuIHN0YXJ0LiBUaGVyZWZvcmUgYHVzYnR2LSZndDt1ZGV2YCB3aWxsICpuZXZlciogYmUgTlVMTCB3aGlsZSBhbiBJT0NUTCBpcyBydW5uaW5nIQoKVGhhdCYjMzk7cyBpdCEgVGhpcyBwZXJmZWN0bHkgZml4ZXMgdGhlIHVzZS1hZnRlci1mcmVlIGlzc3VlIGZvciBgdXNidHYtJmd0O3VkZXZgLiBUaGUgVVNCIGNvcmUgZnJlZXMgYHVzYnR2LSZndDt1ZGV2YCBhZnRlciBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucy4gSWYgYHVzYnR2X2Rpc2Nvbm5lY3RgICpkaWRuJiMzOTt0KiB3YWl0IGZvciBJT0NUTHMgdG8gZmluaXNoLCBhbiBJT0NUTCBjb3VsZCBiZSBydW5uaW5nLCBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucywgdGhlIFVTQiBjb3JlIGZyZWVzIGB1ZGV2YCwgYW5kIEJPT00sIFVBRiEgQnkgYWNxdWlyaW5nIGB2NGwyX2xvY2tgIGluIGB1c2J0dl92aWRlb19mcmVlYCAod2hpY2ggaXMgY2FsbGVkIGZyb20gYHVzYnR2X2Rpc2Nvbm5lY3RgKSwgaXQgd2FpdHMgZm9yIGFsbCBjdXJyZW50bHkgcnVubmluZyBJT0NUTHMgdG8gZmluaXNoLiBBbmQgc2luY2UgYHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZWAgd2FzIGFscmVhZHkgY2FsbGVkLCBubyBuZXcgSU9DVExzIGNhbiBzdGFydC4gVGhpcyBpcyBhIGNsYXNzaWMgc3luY2hyb25pemF0aW9uIGZpeC4gSXQgcGVyZmVjdGx5IHByb3RlY3RzIHRoZSBVU0IgZGV2aWNlLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgotIGB1c2J0dl9kaXNjb25uZWN0YAotIGB1c2J0dl9wcm9iZWAKLSBgdXNidHZfc19zdGRgCi0gYHVzYnR2X3NfaW5wdXRgCi0gYHVzYnR2X3F1ZXJ5Y2FwYAotIGB1c2J0dl9lbnVtX2lucHV0YAotIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYAotIGB1c2J0dl9mbXRfdmlkX2NhcGAKLSBgdXNidHZfZ19zdGRgCi0gYHVzYnR2X2dfaW5wdXRgCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYHVzYnR2X2lvY3RsX29wc2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG4gNjk2Olx0XHQudmlkaW9jX3F1ZXJ5Y2FwID0gdXNidHZfcXVlcnljYXAsXG4gNjk3Olx0XHQudmlkaW9jX2VudW1faW5wdXQgPSB1c2J0dl9lbnVtX2lucHV0LFxuIDY5ODpcdFx0LnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gdXNidHZfZW51bV9mbXRfdmlkX2NhcCxcbiA2OTk6XHRcdC52aWRpb2NfZ19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMDpcdFx0LnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiA3MDE6XHRcdC52aWRpb2Nfc19mbXRfdmlkX2NhcCA9IHVzYnR2X2ZtdF92aWRfY2FwLFxuIDcwMjpcdFx0LnZpZGlvY19nX3N0ZCA9IHVzYnR2X2dfc3RkLFxuIDcwMzpcdFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxuIDcwNDpcdFx0LnZpZGlvY19nX2lucHV0ID0gdXNidHZfZ19pbnB1dCxcbiA3MDU6XHRcdC52aWRpb2Nfc19pbnB1dCA9IHVzYnR2X3NfaW5wdXQsXG4gNzA2Olx0XG4gNzA3Olx0XHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcbiA3MDg6XHRcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXG4gNzA5Olx0XHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxuIDcxMDpcdFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcbiA3MTE6XHRcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxuIDcxMjpcdFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcbiA3MTM6XHRcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXG4gNzE0Olx0XHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFVTQlRWIE1vZHVsZSBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2Ugc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIFVTQlRWIG1vZHVsZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGFuZCBgdXNidHZfZ19pbnB1dGAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBlc3NlbnRpYWwgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLgoKTm93LCBhIHF1aWNrIG5vdGUgdG8gc2VsZjogYHVzYnR2X3Byb2JlYCBpcyBjbGVhcmx5IGRlZmluZWQgd2l0aGluIGB1c2J0di1jb3JlLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2guIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW9jdGwgb3IgZmlsZSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdH07XG4gNzE2Olx0XG4gNzE3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1c2J0dl9mb3BzID0ge1xuIDcxODpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gNzE5Olx0XHQudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsXG4gNzIwOlx0XHQubW1hcCA9IHZiMl9mb3BfbW1hcCxcbiA3MjE6XHRcdC5vcGVuID0gdjRsMl9maF9vcGVuLFxuIDcyMjpcdFx0LnJlbGVhc2UgPSB2YjJfZm9wX3JlbGVhc2UsXG4gNzIzOlx0XHQucmVhZCA9IHZiMl9mb3BfcmVhZCxcbiA3MjQ6XHRcdC5wb2xsID0gdmIyX2ZvcF9wb2xsLFxuIDcyNTpcdH07XG4gNzI2Olx0XG4gNzI3Olx0c3RhdGljIGludCB1c2J0dl9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSxcbiA3Mjg6XHRcdHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsXG4gNzI5Olx0XHR1bnNpZ25lZCBpbnQgKm5wbGFuZXMsIHVuc2lnbmVkIGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDczMjpcdFx0dW5zaWduZWQgc2l6ZSA9IFVTQlRWX0NIVU5LICogdXNidHYtXHUwMDNlbl9jaHVua3MgKiAyICogc2l6ZW9mKHUzMik7XG4gNzMzOlx0XHR1bnNpZ25lZCBpbnQgcV9udW1fYnVmcyA9IHZiMl9nZXRfbnVtX2J1ZmZlcnModnEpO1xuIDczNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIFY0TDIgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zIGFyZSwgYXMgZXhwZWN0ZWQsIHVzaW5nIHRoZSBnZW5lcmljIFZpZGVvNExpbnV4MiBhbmQgVmlkZW8gQnVmZmVyIDIgaW50ZXJmYWNlcy4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgbWVhdCwgdGhlIHRoaW5ncyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhpcyBzcGVjaWZpYyBgdXNidHZgIGRldmljZSwgYXJlIGxpa2VseSBnb2luZyB0byBiZSBpbiB0aGUgcXVldWluZyBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgY29udHJvbHMgdGhlIGRhdGEgZmxvdywgYW5kIGhhbmRsZXMgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBxdWV1aW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBjcml0aWNhbCBwYXJ0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmIyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTc3ND1zdGF0aWMgdm9pZCB1c2J0dl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTc4MS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NzgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyB1c2J0dl92YjJfb3BzID0ge1xuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODMtXHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxuLS1cbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtODk5LVx0dXNidHYtXHUwMDNldmIycS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHVzYnR2X2J1Zik7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjkwMDpcdHVzYnR2LVx1MDAzZXZiMnEub3BzID0gXHUwMDI2dXNidHZfdmIyX29wcztcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTAxLVx0dXNidHYtXHUwMDNldmIycS5tZW1fb3BzID0gXHUwMDI2dmIyX3ZtYWxsb2NfbWVtb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGB1c2J0dl92YjJfb3BzYCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgdXNidHZfdmIyX29wc2Agc3RydWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBWaWRlbzRMaW51eDIgKFY0TDIpIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSBidWZmZXIgbWFuYWdlbWVudCBhc3BlY3QuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZyb20gdGhlIFVTQiBUViBkZXZpY2UsIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBmbG93cyBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUg4oCTIHRoZSBgcXVldWVfc2V0dXBgLCBgYnVmX2luaXRgLCBgYnVmX3ByZXBhcmVgLCBgYnVmX3F1ZXVlYCwgYGJ1Zl9yZWxlYXNlYCwgYW5kIHRoZSBvdGhlcnMuIEVhY2ggb25lJiMzOTtzIHB1cnBvc2UgaXMgY2xlYXI7IGBxdWV1ZV9zZXR1cGAgaXMgY3JpdGljYWwgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgY29uZmlndXJhdGlvbi4gVGhlbiB0aGVyZeKAmXMgaG93IGJ1ZmZlcnMgYXJlIHByZXBhcmVkLCBxdWV1ZWQsIGFuZCByZWxlYXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgYnVmZmVyIGFsbG9jYXRpb24sIG1lbW9yeSBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgRE1BIG9wZXJhdGlvbnMuIEkmIzM5O20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBVU0IgdHJhbnNmZXIsIGNvbnNpZGVyaW5nIGJhbmR3aWR0aCBsaW1pdGF0aW9ucywgYW5kIGlmIHRoZSBkcml2ZXIgZW1wbG95cyBhbnkgY2xldmVyIHRlY2huaXF1ZXMgbGlrZSBzY2F0dGVyL2dhdGhlciBsaXN0cyB0byBtYXhpbWl6ZSBlZmZpY2llbmN5LiBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIGhvdyB0aGlzIHN0cnVjdHVyZSBjb2xsYWJvcmF0ZXMgd2l0aCBvdGhlciBlbGVtZW50cyBvZiB0aGUgVjRMMiBzdGFjaywgbG9va2luZyBmb3IgYW55IHN1YnRsZSBoaW50cyBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBhZGhlcmVzIHRvIGJlc3QgcHJhY3RpY2VzIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyB0byBhZG1pcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHR9XG4gNzgxOlx0XG4gNzgyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XG4gNzgzOlx0XHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcbiA3ODQ6XHRcdC5idWZfcXVldWUgPSB1c2J0dl9idWZfcXVldWUsXG4gNzg1Olx0XHQuc3RhcnRfc3RyZWFtaW5nID0gdXNidHZfc3RhcnRfc3RyZWFtaW5nLFxuIDc4NjpcdFx0LnN0b3Bfc3RyZWFtaW5nID0gdXNidHZfc3RvcF9zdHJlYW1pbmcsXG4gNzg3Olx0fTtcbiA3ODg6XHRcbiA3ODk6XHRzdGF0aWMgaW50IHVzYnR2X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKVxuIDc5MDpcdHtcbiA3OTE6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSBjb250YWluZXJfb2YoY3RybC1cdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXG4gNzkyOlx0XHRcdFx0XHRcdFx0XHRcdGN0cmwpO1xuIDc5MzpcdFx0dTggKmRhdGE7XG4gNzk0Olx0XHR1MTYgaW5kZXgsIHNpemU7XG4gNzk1Olx0XHRpbnQgcmV0O1xuIDc5NjpcdFxuIDc5NzpcdFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRpZiAoIWRhdGEpXG4gNzk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAzNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIFBvdGVudGlhbCBDb2RlIEhvb2tzIGZvciBVU0IgVFYgRGV2aWNlIENvbnRyb2wqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBob29rIGludG8gdGhpcyBVU0IgVFYgZHJpdmVyLiBgdXNidHZfcXVldWVfc2V0dXBgLCBgdXNidHZfYnVmX3F1ZXVlYCwgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AsIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFsbCBsb29rIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbGxpbmcgdGhlIGRldmljZSYjMzk7cyBiZWhhdmlvci4gV2FpdCBhIHNlY29uZCwgYHVzYnR2X3NfY3RybGAuLi4gdGhhdCYjMzk7cyBhIFY0TDIgY29udHJvbCBoYW5kbGVyLCBpc24mIzM5O3QgaXQ/IElmIGl0JiMzOTtzIGEgVjRMMiBjb250cm9sIGhhbmRsZXIsIGl0JiMzOTtzIGxpa2VseSB1c2luZyBgdXNidHYtJmd0O3VkZXZgIHRvIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkZXZpY2UuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpZiBpdCYjMzk7cyBjb3JyZWN0LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdHtcbiA3OTE6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSBjb250YWluZXJfb2YoY3RybC1cdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXG4gNzkyOlx0XHRcdFx0XHRcdFx0XHRcdGN0cmwpO1xuIDc5MzpcdFx0dTggKmRhdGE7XG4gNzk0Olx0XHR1MTYgaW5kZXgsIHNpemU7XG4gNzk1Olx0XHRpbnQgcmV0O1xuIDc5NjpcdFxuIDc5NzpcdFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRpZiAoIWRhdGEpXG4gNzk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwMDpcdFxuIDgwMTpcdFx0LypcbiA4MDI6XHRcdCAqIFJlYWQgaW4gdGhlIGN1cnJlbnQgYnJpZ2h0bmVzcy9jb250cmFzdCByZWdpc3RlcnMuIFdlIG5lZWQgdGhlbVxuIDgwMzpcdFx0ICogYm90aCwgYmVjYXVzZSB0aGUgdmFsdWVzIGFyZSBmb3Igc29tZSByZWFzb24gaW50ZXJsZWF2ZWQuXG4gODA0Olx0XHQgKi9cbiA4MDU6XHRcdGlmIChjdHJsLVx1MDAzZWlkID09IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwgY3RybC1cdTAwM2VpZCA9PSBWNEwyX0NJRF9DT05UUkFTVCkge1xuIDgwNjpcdFx0XHRyZXQgPSB1c2JfY29udHJvbF9tc2codXNidHYtXHUwMDNldWRldixcbiA4MDc6XHRcdFx0XHR1c2JfcmN2Y3RybHBpcGUodXNidHYtXHUwMDNldWRldiwgMCksIFVTQlRWX0NPTlRST0xfUkVHLFxuIDgwODpcdFx0XHRcdFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuIDgwOTpcdFx0XHRcdDAsIFVTQlRWX0JBU0UgJiM0MzsgMHgwMjQ0LCAodm9pZCAqKWRhdGEsIDMsXG4gODEwOlx0XHRcdFx0VVNCX0NUUkxfR0VUX1RJTUVPVVQpO1xuIDgxMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgxMjpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gODEzOlx0XHR9XG4gODE0Olx0XG4gODE1Olx0XHRzd2l0Y2ggKGN0cmwtXHUwMDNlaWQpIHtcbiA4MTY6XHRcdGNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzpcbiA4MTc6XHRcdFx0aW5kZXggPSBVU0JUVl9CQVNFICYjNDM7IDB4MDI0NDtcbiA4MTg6XHRcdFx0c2l6ZSA9IDM7XG4gODE5Olx0XHRcdGRhdGFbMF0gXHUwMDI2PSAweGYwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgQ29udHJvbCBQYXRoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgZGlyZWN0bHkgYWNjZXNzZXMgYHVzYnR2LSZndDt1ZGV2YC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgb2JzZXJ2YXRpb24uIE5vdywgbGV0JiMzOTtzIGJhY2sgdXAgYSBiaXQuIFJpZ2h0LCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIGJ5IHRoZSBWNEwyIGNvcmUsIHNwZWNpZmljYWxseSB3aGVuIGEgY29udHJvbCBzZXR0aW5nIGlzIHRyaWdnZXJlZC4gQSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW1tZWRpYXRlbHk6IGRvZXMgdGhlIFY0TDIgY29yZSBob2xkIHRoZSBgdjRsMl9sb2NrYCB3aGVuIGl0IGNhbGxzIGB1c2J0dl9zX2N0cmxgPyBXZSAqbmVlZCogdG8ga25vdyB0aGlzIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBgdXNidHZfdmlkZW9faW5pdGAsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29udHJvbHMgYXJlIHJlZ2lzdGVyZWQuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjbHVlIGFib3V0IHRoZSBsb2NraW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Y0bDJfY3RybF9oYW5kbGVyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz04ODQ9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dilcbi0tXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTkxMC1cdC8qIGNvbnRyb2xzICovXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjkxMTpcdHY0bDJfY3RybF9oYW5kbGVyX2luaXQoXHUwMDI2dXNidHYtXHUwMDNlY3RybCwgNCk7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTkxMi1cdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMwOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHVzYnR2X3ZpZGVvX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCBteSBwcmlvciBleHBlcmllbmNlIHdpdGggVVNCIHZpZGVvIGNhcHR1cmUgZHJpdmVycywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB1c2J0dl92aWRlb19pbml0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDkxMC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB2aWRlbyBjYXB0dXJlIHBpcGVsaW5lIGJlZ2lucy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBkZXZpY2UgZW51bWVyYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24gKGxpa2UgZnJhbWUgYnVmZmVycywgRE1BIGNoYW5uZWxzIGlmIGl0JiMzOTtzIHRoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUpLCBhbmQgcG9zc2libHkgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBVU0IgdHJhbnNmZXIgZGVzY3JpcHRvcnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZHJpdmVyIHNldHRpbmcgdXAgaXRzIGVuZHBvaW50cyBhbmQgbmVnb3RpYXRpbmcgdGhlIHZpZGVvIGZvcm1hdCBzZXR0aW5ncyB3aXRoIHRoZSBkZXZpY2UuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbjsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIGRyaXZlciB3aWxsIGJlY29tZSBhcHBhcmVudC4gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGFueSBWNEwyIHN1YnN5c3RlbXMgaXQgbWlnaHQgYmUgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHR1c2J0di1cdTAwM2V2YjJxLm9wcyA9IFx1MDAyNnVzYnR2X3ZiMl9vcHM7XG4gOTAxOlx0XHR1c2J0di1cdTAwM2V2YjJxLm1lbV9vcHMgPSBcdTAwMjZ2YjJfdm1hbGxvY19tZW1vcHM7XG4gOTAyOlx0XHR1c2J0di1cdTAwM2V2YjJxLnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQztcbiA5MDM6XHRcdHVzYnR2LVx1MDAzZXZiMnEubG9jayA9IFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jaztcbiA5MDQ6XHRcdHJldCA9IHZiMl9xdWV1ZV9pbml0KFx1MDAyNnVzYnR2LVx1MDAzZXZiMnEpO1xuIDkwNTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDkwNjpcdFx0XHRkZXZfd2Fybih1c2J0di1cdTAwM2VkZXYsIFwmIzM0O0NvdWxkIG5vdCBpbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZVxcblwmIzM0Oyk7XG4gOTA3Olx0XHRcdHJldHVybiByZXQ7XG4gOTA4Olx0XHR9XG4gOTA5Olx0XG4gOTEwOlx0XHQvKiBjb250cm9scyAqL1xuIDkxMTpcdFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcdTAwMjZ1c2J0di1cdTAwM2VjdHJsLCA0KTtcbiA5MTI6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkxMzpcdFx0XHRcdFY0TDJfQ0lEX0NPTlRSQVNULCAwLCAweDNmZiwgMSwgMHgxZDApO1xuIDkxNDpcdFx0djRsMl9jdHJsX25ld19zdGQoXHUwMDI2dXNidHYtXHUwMDNlY3RybCwgXHUwMDI2dXNidHZfY3RybF9vcHMsXG4gOTE1Olx0XHRcdFx0VjRMMl9DSURfQlJJR0hUTkVTUywgMCwgMHgzZmYsIDEsIDB4MWMwKTtcbiA5MTY6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkxNzpcdFx0XHRcdFY0TDJfQ0lEX1NBVFVSQVRJT04sIDAsIDB4M2ZmLCAxLCAweDIwMCk7XG4gOTE4Olx0XHR2NGwyX2N0cmxfbmV3X3N0ZChcdTAwMjZ1c2J0di1cdTAwM2VjdHJsLCBcdTAwMjZ1c2J0dl9jdHJsX29wcyxcbiA5MTk6XHRcdFx0XHRWNEwyX0NJRF9IVUUsIC0weGRmZiwgMHhkZmYsIDEsIDB4MDAwKTtcbiA5MjA6XHRcdHY0bDJfY3RybF9uZXdfc3RkKFx1MDAyNnVzYnR2LVx1MDAzZWN0cmwsIFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxuIDkyMTpcdFx0XHRcdFY0TDJfQ0lEX1NIQVJQTkVTUywgMHgwLCAweGZmLCAxLCAweDYwKTtcbiA5MjI6XHRcdHJldCA9IHVzYnR2LVx1MDAzZWN0cmwuZXJyb3I7XG4gOTIzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gOTI0Olx0XHRcdGRldl93YXJuKHVzYnR2LVx1MDAzZWRldiwgXCYjMzQ7Q291bGQgbm90IGluaXRpYWxpemUgY29udHJvbHNcXG5cJiMzNDspO1xuIDkyNTpcdFx0XHRnb3RvIGN0cmxfZmFpbDtcbiA5MjY6XHRcdH1cbiA5Mjc6XHRcbiA5Mjg6XHRcdC8qIHY0bDIgc3RydWN0dXJlICovXG4gOTI5Olx0XHR1c2J0di1cdTAwM2V2NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSBcdTAwMjZ1c2J0di1cdTAwM2VjdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCVFYgTG9ja2luZyBhbmQgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXImIzM5O3MgbG9ja2luZyBtZWNoYW5pc20uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgYHVzYnR2LSZndDtjdHJsLmxvY2tgIG5vdCBiZWluZyBzZXQsIGltcGx5aW5nIHRoZSBkcml2ZXIgbWlnaHQgcmVseSBvbiBhbiBpbnRlcm5hbCBsb2NrLCByaWdodD8gQnV0IHRoZW4gSSBub3RpY2VkIGB1c2J0dl9zX2N0cmxgIGlzIGludm9rZWQgd2hlbiBgVklESU9DX1NfQ1RSTGAgb3IgYFZJRElPQ19TX0VYVF9DVFJMU2AgaXMgY2FsbGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYHY0bDJfaW9jdGxgIGhvbGQgYHVzYnR2LSZndDt2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGBWSURJT0NfU19DVFJMYD8gQWhhLCB5ZXMhIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AgY29uZmlybXMgdGhhdCBgdmlkZW9faW9jdGwyYCB3aWxsIGluZGVlZCBhY3F1aXJlIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCBiZWZvcmUgZGlzcGF0Y2hpbmcgKmFueSogaW9jdGwsIGluY2x1ZGluZyBgVklESU9DX1NfQ1RSTGAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2NrIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gUmlnaHQsIGB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHVzYnR2X3ZpZGVvX2luaXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9wcm9iZWAuIFNvIGB1c2J0dl9zX2N0cmxgIGlzIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2Agd2hlbiBjYWxsZWQgdmlhIGlvY3RsLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYHY0bDJfY3RybF9oYW5kbGVyX3NldHVwYCBkb2VzbiYjMzk7dCBob2xkIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgcHJvYmUsIHNvIHRoZXJlJiMzOTtzIG5vIHJhY2UuIExvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhpcy4KCk5vdywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIHJldmlldzogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFyZSBwcm90ZWN0ZWQgYnkgYHVzYnR2LSZndDt2YjJxX2xvY2tgLCBub3QgYHVzYnR2LSZndDt2NGwyX2xvY2tgLiBPa2F5LCBsZXQmIzM5O3MgcmV2aXNpdCBgdXNidHZfdmlkZW9faW5pdGAuICBZZXMsIGB1c2J0di0mZ3Q7dmIycS5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7dmIycV9sb2NrO2AuIFRoZXJlZm9yZSBgdmIyX2lvY3RsX3N0cmVhbW9uYCB3aWxsIGFjcXVpcmUgYHVzYnR2LSZndDt2YjJxX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgY29ycmVjdCBsb2NrIHVzYWdlIGluIHRoZSBzdHJlYW1pbmcgcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBpcyB1c2luZyBgdXNidHYtJmd0O3VkZXZgIGZvciBhbnkgcHVycG9zZSwgdGhpcyBtaWdodCBiZSBhIHBvaW50IG9mIGNvbmZsaWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdFx0c2l6ZXNbMF0gPSBzaXplO1xuIDc0MTpcdFxuIDc0MjpcdFx0cmV0dXJuIDA7XG4gNzQzOlx0fVxuIDc0NDpcdFxuIDc0NTpcdHN0YXRpYyB2b2lkIHVzYnR2X2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpXG4gNzQ2Olx0e1xuIDc0NzpcdFx0c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7XG4gNzQ4Olx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi1cdTAwM2V2YjJfcXVldWUpO1xuIDc0OTpcdFx0c3RydWN0IHVzYnR2X2J1ZiAqYnVmID0gY29udGFpbmVyX29mKHZidWYsIHN0cnVjdCB1c2J0dl9idWYsIHZiKTtcbiA3NTA6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gNzUxOlx0XG4gNzUyOlx0XHRpZiAodXNidHYtXHUwMDNldWRldiA9PSBOVUxMKSB7XG4gNzUzOlx0XHRcdHZiMl9idWZmZXJfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7XG4gNzU0Olx0XHRcdHJldHVybjtcbiA3NTU6XHRcdH1cbiA3NTY6XHRcbiA3NTc6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnVzYnR2LVx1MDAzZWJ1ZmxvY2ssIGZsYWdzKTtcbiA3NTg6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YnVmLVx1MDAzZWxpc3QsIFx1MDAyNnVzYnR2LVx1MDAzZWJ1ZnMpO1xuIDc1OTpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ1c2J0di1cdTAwM2VidWZsb2NrLCBmbGFncyk7XG4gNzYwOlx0fVxuIDc2MTpcdFxuIDc2MjpcdHN0YXRpYyBpbnQgdXNidHZfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gNzYzOlx0e1xuIDc2NDpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKHVzYnR2LVx1MDAzZXVkZXYgPT0gTlVMTClcbiA3Njc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzY4Olx0XG4gNzY5Olx0XHR1c2J0di1cdTAwM2VsYXN0X29kZCA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDE2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJiMzOTtzIExvY2tpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhcm91bmQgdGhlIGB1c2J0di0mZ3Q7dWRldmAgcG9pbnRlci4gIFRoZSBmdW5jdGlvbnMgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9idWZfcXVldWVgIGFyZSBjaGVja2luZyBpZiBgdXNidHYtJmd0O3VkZXYgPT0gTlVMTGAuIE15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O1VoIG9oLCBpcyB0aGlzIHByb3Blcmx5IHN5bmNocm9uaXplZD8mIzM0OyBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoYXQgdGhlIGNoZWNrIHdhcyBvbmx5IHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3ZiMnFfbG9ja2AsIG5vdCBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBzZXRzIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AsIHdoaWNoIHJhaXNlZCB0aGUgcXVlc3Rpb24gaWYgdGhlcmUmIzM5O3MgYSByYWNlIHdpdGggYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AuIFRoZW4gSSB0aG91Z2h0IGl0IHRocm91Z2guLi4gTGV0JiMzOTtzIHNlZTogYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgZ2V0cyBjYWxsZWQgYnkgYHZiMl9pb2N0bF9zdHJlYW1vbmAuIE9rYXksIGB2YjJfaW9jdGxfc3RyZWFtb25gIGlzIGFuIGlvY3RsLiBBaCwgYW5kIGB1c2J0di0mZ3Q7dmRldi5sb2NrID0gJmFtcDt1c2J0di0mZ3Q7djRsMl9sb2NrO2AuIFNvLCBgdmlkZW9faW9jdGwyYCBpcyBnb2luZyB0byBhY3F1aXJlIGB1c2J0di0mZ3Q7djRsMl9sb2NrYCBiZWZvcmUgY2FsbGluZyBgdmIyX2lvY3RsX3N0cmVhbW9uYCwgYW5kIFRIRU4sIGB2YjJfaW9jdGxfc3RyZWFtb25gIHdvdWxkIGFjcXVpcmUgYHVzYnR2LSZndDt2YjJxX2xvY2tgLiBTbywgYWN0dWFsbHksIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIElTIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuCgpPa2F5LCBidXQgd2hhdCBhYm91dCBgdXNidHZfYnVmX3F1ZXVlYD8gSXQmIzM5O3MgY2FsbGVkIGJ5IGB2YjJfaW9jdGxfcWJ1ZmAuIFNpbmNlIGB2YjJfaW9jdGxfcWJ1ZmAgaXMgYWxzbyBhbiBpb2N0bCwgdGhhdCBtZWFucyBpdCYjMzk7cyBhbHNvIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AhIFRoYXQmIzM5O3MgZ29vZC4KClNvLCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY29ycmVjdGx5IHN5bmNocm9uaXplcyB0aGUgdXNhZ2Ugb2YgYHVzYnR2LSZndDt1ZGV2YCwgZW5zdXJpbmcgaXQmIzM5O3Mgbm90IGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGZyZWVkIGluIGlvY3RsIGNhbGxzLiBUaGF0JiMzOTtzIGEgcmVsaWVmLiBJdCYjMzk7cyBwcm9wZXJseSBsb2NrZWQuCgpOb3csIHdhaXQuLi4gV2hhdCBhYm91dCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggYWxsIG9mIHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MDpcdFx0dXNidHYtXHUwMDNlc2VxdWVuY2UgPSAwO1xuIDc3MTpcdFx0cmV0dXJuIHVzYnR2X3N0YXJ0KHVzYnR2KTtcbiA3NzI6XHR9XG4gNzczOlx0XG4gNzc0Olx0c3RhdGljIHZvaWQgdXNidHZfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpXG4gNzc1Olx0e1xuIDc3NjpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xuIDc3NzpcdFxuIDc3ODpcdFx0aWYgKHVzYnR2LVx1MDAzZXVkZXYpXG4gNzc5Olx0XHRcdHVzYnR2X3N0b3AodXNidHYpO1xuIDc4MDpcdH1cbiA3ODE6XHRcbiA3ODI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgdXNidHZfdmIyX29wcyA9IHtcbiA3ODM6XHRcdC5xdWV1ZV9zZXR1cCA9IHVzYnR2X3F1ZXVlX3NldHVwLFxuIDc4NDpcdFx0LmJ1Zl9xdWV1ZSA9IHVzYnR2X2J1Zl9xdWV1ZSxcbiA3ODU6XHRcdC5zdGFydF9zdHJlYW1pbmcgPSB1c2J0dl9zdGFydF9zdHJlYW1pbmcsXG4gNzg2Olx0XHQuc3RvcF9zdHJlYW1pbmcgPSB1c2J0dl9zdG9wX3N0cmVhbWluZyxcbiA3ODc6XHR9O1xuIDc4ODpcdFxuIDc4OTpcdHN0YXRpYyBpbnQgdXNidHZfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjUxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gdGhlIFVTQlRWIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBoYXZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuIEl0IHNlZW1zIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgY2hlY2tzIGB1c2J0di0mZ3Q7dWRldmAsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlZCBhIHJlZCBmbGFnLiBJIGtub3cgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCBpcyBjYWxsZWQgdmlhIGB2YjJfaW9jdGxfc3RyZWFtb2ZmYCwgd2hpY2ggaXMgYW4gaW9jdGwsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIHByb3RlY3RlZCBieSBgdXNidHYtJmd0O3Y0bDJfbG9ja2AuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsc28gY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRocm91Z2ggYHZiMl9mb3BfcmVsZWFzZWAgd2hpY2ggZ29lcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGZ1bmN0aW9uIGNhbGxzOiBgdmIyX2ZvcF9yZWxlYXNlYCAtJmd0OyBgdmIyX2NvcmVfcXVldWVfcmVsZWFzZWAgLSZndDsgYF9fdmIyX3F1ZXVlX2NhbmNlbGAgLSZndDsgYHN0b3Bfc3RyZWFtaW5nYC4KCk15IGNvbmNlcm4gaXMgd2hldGhlciBgdmIyX2ZvcF9yZWxlYXNlYCBpdHNlbGYgaG9sZHMgYHVzYnR2LSZndDt2NGwyX2xvY2tgLiAgSXQgKmRvZXMqIGFjcXVpcmUgYHZxLSZndDtsb2NrYCB3aGljaCBpcyBgdXNidHYtJmd0O3ZiMnFfbG9ja2AsIGJ1dCBub3QgYHZkZXYtJmd0O2xvY2tgIHdoaWNoIGlzIGB1c2J0di0mZ3Q7djRsMl9sb2NrYC4gVGhpcyBpcyBhIHByb2JsZW0hICBUaGUgYHY0bDJfZmhfcmVsZWFzZWAgb3IgYHZiMl9mb3BfcmVsZWFzZWAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBob2xkIHRoZSBgdjRsMl9sb2NrYC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGB2YjJfZm9wX3JlbGVhc2VgIGRvZXNuJiMzOTt0IGtub3cgYWJvdXQgYHZkZXYtJmd0O2xvY2tgIGluIGBkcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuY2AgYW5kIGZvdW5kIHRoYXQgaXQgY2FsbHMgYG11dGV4X2xvY2sodnEtJmd0O2xvY2spYCAoIGB1c2J0di0mZ3Q7dmIycV9sb2NrYCkuICBTaW5jZSBgdXNidHZfZm9wcy5yZWxlYXNlYCBpcyBzZXQgdG8gYHZiMl9mb3BfcmVsZWFzZWAsIHRoaXMgY29uZmlybXMgbXkgd29ycnkgdGhhdCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIG1pZ2h0IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBgdXNidHZfZGlzY29ubmVjdGAuCgpUaGUgcG90ZW50aWFsIHJhY2UgaXMgdGhhdCBgdXNidHZfZGlzY29ubmVjdGAgY291bGQgc2V0IGB1c2J0di0mZ3Q7dWRldmAgdG8gYE5VTExgIHVuZGVyIGB2NGwyX2xvY2tgLCB3aGlsZSBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIG9ubHkgaG9sZHMgYHZiMnFfbG9ja2AuICBJZiB0aGlzIGhhcHBlbnMsIHRoZSBjaGVjayBgaWYgKHVzYnR2LSZndDt1ZGV2KWAgaW4gYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCB3b3VsZCBiZSB2dWxuZXJhYmxlLCBiZWNhdXNlIGl0IGlzIG5vdCBwcm90ZWN0ZWQgYnkgYHY0bDJfbG9ja2AuCgpOb3csIGlmIGB1c2J0dl9kaXNjb25uZWN0YCBmcmVlcyByZXNvdXJjZXMsIGluY2x1ZGluZyBwb3RlbnRpYWxseSBzZXR0aW5nIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgLCBhbmQgYSBmaWxlIGRlc2NyaXB0b3IgaXMgc3RpbGwgb3BlbiwgY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgY2FsbCBgdmIyX2ZvcF9yZWxlYXNlYCBhbmQgdGhlbiBgdXNidHZfc3RvcF9zdHJlYW1pbmdgLiAgSWYgdGhlIGNsb3NlIGhhcHBlbnMgKmFmdGVyKiBgdXNidHZfZGlzY29ubmVjdGAgcmV0dXJucywgdGhlbiBgdXNidHYtJmd0O3VkZXZgIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNoZWNrIGluIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agd2lsbCBiZSBoaXQgYW5kIGVmZmVjdGl2ZWx5IHByZXZlbnQgdGhlIGlzc3VlLiBIb3dldmVyLCBpZiB0aGUgY2xvc2UgaGFwcGVucyAqZHVyaW5nKiBgdXNidHZfZGlzY29ubmVjdGAgdGhlcmUgaXMgYW4gYWN0dWFsIHJhY2UhCgpJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB2aWRlb191bnJlZ2lzdGVyX2RldmljZWAuIElmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBvcGVuLCBpdCBpcyBwb3NzaWJsZSBmb3IgYHZiMl9mb3BfcmVsZWFzZWAgdG8gYmUgY2FsbGVkICphZnRlciogIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCBhbmQgYXQgdGhhdCBwb2ludCB0aGUgcmFjZSBpcyBhdmVydGVkIGJlY2F1c2UgYHVzYnR2LSZndDt1ZGV2YCB3aWxsIGFscmVhZHkgYmUgYE5VTExgLgoKSG93ZXZlciwgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFsc28gY2FsbHMgYHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3RgLiBJIG5lZWQgdG8gZW5zdXJlIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgaXMgc2FmZSBpbiBhbGwgdGhlc2Ugc2NlbmFyaW9zLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBhZGRzIGBtdXRleF9sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7IHVzYnR2LSZndDt1ZGV2ID0gTlVMTDsgbXV0ZXhfdW5sb2NrKCZhbXA7dXNidHYtJmd0O3Y0bDJfbG9jayk7YCBpbnNpZGUgYHVzYnR2X3ZpZGVvX2ZyZWVgLiAgVGhpcyBzaG91bGQgZml4IHRoZSByYWNlIGNvbmRpdGlvbiEgIEkgaGF2ZSB0byBub3RlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIEkgbmVlZCB0byBsaXN0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQ6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIGBWSURFT19VU0JUVmAuICBUaGUgYFZJREVPX1VTQlRWYCBjb25maWcgZGVwZW5kcyBvbiBgVklERU9fREVWICZhbXA7JmFtcDsgU05EYCBzbyBJIG5lZWQgdG8gaW5jbHVkZSBgVklERU9fREVWYCBhbmQgYFNORGAganVzdCB0byBiZSBzYWZlLiAgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCB0byBjb25maXJtLCBidXQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbi4gVGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBWSURFT19VU0JUVlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFZJREVPX0RFViBcdTAwMjZcdTAwMjYgU05EXG4gICA1Olx0XHRzZWxlY3QgU05EX1BDTVxuICAgNjpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gICA3Olx0XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0OTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQlRWIERyaXZlciYjMzk7cyBSZXNvdXJjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIFVTQlRWIGRyaXZlciwgYW5kIGl0IGxvb2tzIGxpa2UgaXRzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIG9uIGBWSURFT19ERVZgIGFuZCBgU05EYCBiZWluZyBlbmFibGVkIOKAkyBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgoKRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmFjdGluZy4gQWgsIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQsIGNyaXRpY2FsbHksIHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBsb2NrIGRvd24uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGxvY2tpbmcsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMuIERvZXMgYHVzYnR2X3ZpZGVvX2ZyZWVgIGhvbGQgdGhlIGB2NGwyX2xvY2tgPyBPa2F5LCBJIHNlZSBpdCBkb2VzIGFjcXVpcmUgdGhlIGB2NGwyX2xvY2tgIGl0c2VsZjsgc28gdGhlIG11dGV4IHByb3RlY3Rpb24gaXMgc291bmQuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgaXQuIEV4Y2VsbGVudCwgdGhhdCBwYXJ0IHNlZW1zIHJvYnVzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4uIExldCYjMzk7cyBjb25zaWRlciB0aGUgdjRsMiBtZXRob2RzLiBJIHNlZSBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfZW51bV9pbnB1dGAsIGB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwYCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X2dfc3RkYCwgYW5kIGB1c2J0dl9nX2lucHV0YC4gVGhleSBsb29rIGxpa2Ugc2ltcGxlIGdldHRlcnMsIHNvIEkgd291bGRuJiMzOTt0IGV4cGVjdCB0aGVtIHRvIGJlIHByb2JsZW1hdGljIHdpdGggcmVzcGVjdCB0byBgdXNidHYtJmd0O3VkZXZgLCBidXQgSSBiZXR0ZXIgY2hlY2suIFdhaXQuLi4gYHVzYnR2X3F1ZXJ5Y2FwYCAqZG9lcyogdXNlIGB1c2J0di0mZ3Q7dWRldmA/IEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcbiA1ODE6XHRcdHVzYnR2X2F1ZGlvX3Jlc3VtZSh1c2J0dik7XG4gNTgyOlx0XG4gNTgzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBVU0JUVl9JU09DX1RSQU5TRkVSUzsgaSYjNDM7JiM0MzspIHtcbiA1ODQ6XHRcdFx0c3RydWN0IHVyYiAqaXA7XG4gNTg1Olx0XG4gNTg2Olx0XHRcdGlwID0gdXNidHZfc2V0dXBfaXNvX3RyYW5zZmVyKHVzYnR2KTtcbiA1ODc6XHRcdFx0aWYgKGlwID09IE5VTEwpIHtcbiA1ODg6XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDU4OTpcdFx0XHRcdGdvdG8gc3RhcnRfZmFpbDtcbiA1OTA6XHRcdFx0fVxuIDU5MTpcdFx0XHR1c2J0di1cdTAwM2Vpc29jX3VyYnNbaV0gPSBpcDtcbiA1OTI6XHRcbiA1OTM6XHRcdFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoaXAsIEdGUF9LRVJORUwpO1xuIDU5NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDU5NTpcdFx0XHRcdGdvdG8gc3RhcnRfZmFpbDtcbiA1OTY6XHRcdH1cbiA1OTc6XHRcbiA1OTg6XHRcdHJldHVybiAwO1xuIDU5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgdXNidHZfcXVlcnljYXBgKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbXkgYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIHRvIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBxdWVyeWluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgVVNCIFRWIHR1bmVyIG9yIGNhcHR1cmUgZGV2aWNlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0OgoKKiAgICoqQ29udGV4dDoqKiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBzaXR1YXRpb24/IEFtIEkgZGVidWdnaW5nIGFuIGlzc3VlIHdpdGggdmlkZW8gY2FwdHVyZSwgdHJ5aW5nIHRvIGNvbmZpZ3VyZSBhIHNwZWNpZmljIGRldmljZSwgb3IgcGVyaGFwcyBidWlsZGluZyBhIG5ldyBkcml2ZXIgb3IgYXBwbGljYXRpb24gdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGVzZSB0eXBlcyBvZiBkZXZpY2VzPyBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aGlzIHF1ZXJ5IHdvdWxkIHNoYXBlIG15IGFwcHJvYWNoLgoqICAgKipQdXJwb3NlOioqIFdoYXQgc3BlY2lmaWNhbGx5IGFtIEkgdHJ5aW5nIHRvICpnZXQqIGZyb20gYHVzYnR2X3F1ZXJ5Y2FwYD8gQW0gSSBhZnRlciBzdXBwb3J0ZWQgdmlkZW8gZm9ybWF0cywgcmVzb2x1dGlvbnMsIGZyYW1lIHJhdGVzLCBhdWRpbyBjb2RlY3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB3aWxsIGRyaXZlIHRoZSBzdWJzZXF1ZW50IHN0ZXBzLgoqICAgKipJbXBsZW1lbnRhdGlvbjoqKiBJIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEdpdmVuIHRoZSBuYW1lLCB0aGlzIHByb2JhYmx5IGludm9sdmVzIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwgb3IgaW9jdGwgb3BlcmF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBvciBwb3RlbnRpYWxseSBhIGxpYnJhcnkgZnVuY3Rpb24gZm9yIFdpbmRvd3Mgb3IgbWFjT1MuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgQVBJIGlzIGNyaXRpY2FsIGhlcmUuCiogICAqKlRvb2xpbmc6KiogSSYjMzk7ZCBiZSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgSSYjMzk7ZCB1c2UuIFdvdWxkIEkgbmVlZCB0byB1c2UgYHN0cmFjZWAgb3IgYSBzaW1pbGFyIHRyYWNpbmcgdG9vbCB0byBzZWUgdGhlIHN5c3RlbSBjYWxscyBiZWluZyBtYWRlPyBQZXJoYXBzIEkmIzM5O2Qgc3RhcnQgd2l0aCBhIGJhc2ljIHRlc3QgcHJvZ3JhbSB0byBjYWxsIGB1c2J0dl9xdWVyeWNhcGAgZGlyZWN0bHksIG9yIGRlbHZlIGludG8gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbi4KKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiAoa2VybmVsIGhlYWRlcnMsIHVzZXItc3BhY2UgbGlicmFyeSBkb2N1bWVudGF0aW9uLCBldGMuKS4gSWYgSSYjMzk7bSBsdWNreSwgdGhlcmUmIzM5O3MgZ29vZCBkb2N1bWVudGF0aW9uIHRoYXQgZXhwbGFpbnMgdGhlIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCB0eXBpY2FsIHVzYWdlIG9mIGB1c2J0dl9xdWVyeWNhcGAuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0IGlzIGVzc2VudGlhbCB0byByZW1lbWJlciB0aGF0IGV2ZW4gdGhlIG1vc3Qgd2VsbC1iZWhhdmVkIHNvZnR3YXJlIHdpbGwgc29tZXRpbWVzIGZhaWwsIHNvIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBjb2Rlcz8KKiAgICoqVHJvdWJsZXNob290aW5nOioqIElmIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgc2l0dWF0aW9uLCBhbSBJIHJlY2VpdmluZyB1bmV4cGVjdGVkIHJlc3VsdHM/IFRoaXMgd291bGQgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXAsIGFzIHdlbGwgYXMgd2hlcmUgdG8gYmVnaW4gbXkgaW5zcGVjdGlvbiBvZiB0aGUgY29kZS4KCkluIGVzc2VuY2UsIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgbmFtZSwgcGxhY2luZyBpdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB2aWRlbyBjYXB0dXJlL1VTQiBkZXZpY2VzLCBhbmQgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGEgcGxhbiBvZiBhdHRhY2sgZm9yIGludmVzdGlnYXRpbmcgaXQuIE15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEgYWxsb3dzIG1lIHRvIHJhcGlkbHkgY29ubmVjdCB0aGUgZG90cyBhbmQgYW50aWNpcGF0ZSB0aGUgbGlrZWx5IGF2ZW51ZXMgb2YgaW5xdWlyeS4gTm93IGxldCYjMzk7cyBnZXQgaW50byBpdCwgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2J0dl9xdWVyeWNhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTU2Mj1zdGF0aWMgaW50IHVzYnR2X3N0YXJ0KHN0cnVjdCB1c2J0diAqdXNidHYpXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDQtXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjYwNTpzdGF0aWMgaW50IHVzYnR2X3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDYtXHRcdFx0XHRzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApXG4tLVxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjY5NjpcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk3LVx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0NDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHVzYnR2X3F1ZXJ5Y2FwYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdXNidHZfcXVlcnljYXBgKioKCkFscmlnaHQsIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBjbHVlLCBpc24mIzM5O3QgaXQ/IEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVVNCIHZpZGVvLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHdpdGggcXVlcnlpbmcgY2FwYWJpbGl0aWVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgdGVsbHMgbWUgd2hhdCBhIGNvbm5lY3RlZCBVU0IgVFYgdHVuZXIgKG9yIGNhcHR1cmUgZGV2aWNlLCBtb3JlIGJyb2FkbHkpICpjYW4qIGRvLiBUaGlzIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gZGlzY292ZXIgc3VwcG9ydGVkIHJlc29sdXRpb25zLCBmcmFtZSByYXRlcywgdmlkZW8gZm9ybWF0cywgYXVkaW8gb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gdGhpbmdzIGxpa2Ugc3VwcG9ydGVkIGNvbnRyb2xzIChicmlnaHRuZXNzLCBjb250cmFzdCwgZXRjLikuIAoKU28sIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgc3RydWN0dXJlZCBkYXRhIHJldHJpZXZhbC4gSXQmIzM5O3MgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBzZW5kaW5nIHNvbWUgc29ydCBvZiByZXF1ZXN0IHRvIHRoZSBkZXZpY2UsIG1heWJlIHVzaW5nIGEgc3BlY2lmaWMgVVNCIENvbnRyb2wgVHJhbnNmZXIsIGFuZCB0aGVuIGludGVycHJldGluZyB0aGUgcmVzcG9uc2UgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZi4gSSBiZXQgaXQgd2lsbCByZWx5IG9uIFVTQiBWaWRlbyBDbGFzcyAoVVZDKSBzdGFuZGFyZHMsIGFzIHRoYXQmIzM5O3MgdGhlIGNvbW1vbiBmcmFtZXdvcmsgZm9yIHZpZGVvIGRldmljZXMgb3ZlciBVU0IuIEkgd291bGRu4oCZdCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgY29kZSB0aGF0IHJlZmxlY3QgdGhlIFVWQyBmb3JtYXQgZGVmaW5pdGlvbnMuCgpUaGUgY29kZSBpdHNlbGYgaXMgZ29pbmcgdG8gcmV2ZWFsIHRoZSBzcGVjaWZpYyBxdWVyaWVzIG1hZGUsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIHJlc3BvbnNlcy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBob3cgZG9lcyBpdCBkZWFsIHdpdGggZGV2aWNlcyB0aGF0IGRvbiYjMzk7dCBzdXBwb3J0IGNlcnRhaW4gY2FwYWJpbGl0aWVzLCBvciBpZiBjb21tdW5pY2F0aW9uIGZhaWxzPyBEb2VzIGl0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNldHRpbmdzLCByZXBvcnQgYW4gZXJyb3IsIG9yIHNpbXBseSBza2lwIHVuc3VwcG9ydGVkIGZlYXR1cmVzPyBBbHNvLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgZGV0ZXJtaW5lcyAqd2hpY2gqIHNwZWNpZmljIFVWQyBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIHF1ZXJpZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc29ydCBvZiBpZGVudGlmaWVyLCBvciBwZXJoYXBzIGFuIGVudW1lcmF0ZWQgbGlzdCwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbi4KCkluIHRoZSBiYWNrIG9mIG15IG1pbmQsIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBjYWNoZSBhbnkgb2YgdGhpcyBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkIHF1ZXJpZXM/IE9yIG1heWJlIGl0IGNhbiBsZXZlcmFnZSBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHByZXZpb3VzIHF1ZXJpZXMuIEFuZCwgbGFzdGx5LCBhcyBhIGJvbnVzLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zIGhhbmRsZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIHRob3NlIGFkdmFuY2VkIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDU6XHRzdGF0aWMgaW50IHVzYnR2X3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxuIDYwNjpcdFx0XHRcdFx0c3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKVxuIDYwNzpcdHtcbiA2MDg6XHRcdHN0cnVjdCB1c2J0diAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2MDk6XHRcbiA2MTA6XHRcdHN0cnNjcHkoY2FwLVx1MDAzZWRyaXZlciwgXCYjMzQ7dXNidHZcJiMzNDssIHNpemVvZihjYXAtXHUwMDNlZHJpdmVyKSk7XG4gNjExOlx0XHRzdHJzY3B5KGNhcC1cdTAwM2VjYXJkLCBcJiMzNDt1c2J0dlwmIzM0Oywgc2l6ZW9mKGNhcC1cdTAwM2VjYXJkKSk7XG4gNjEyOlx0XHR1c2JfbWFrZV9wYXRoKGRldi1cdTAwM2V1ZGV2LCBjYXAtXHUwMDNlYnVzX2luZm8sIHNpemVvZihjYXAtXHUwMDNlYnVzX2luZm8pKTtcbiA2MTM6XHRcdHJldHVybiAwO1xuIDYxNDpcdH1cbiA2MTU6XHRcbiA2MTY6XHRzdGF0aWMgaW50IHVzYnR2X2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXG4gNjE3Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2lucHV0ICppKVxuIDYxODpcdHtcbiA2MTk6XHRcdHN0cnVjdCB1c2J0diAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2MjA6XHRcbiA2MjE6XHRcdHN3aXRjaCAoaS1cdTAwM2VpbmRleCkge1xuIDYyMjpcdFx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XG4gNjIzOlx0XHRcdHN0cnNjcHkoaS1cdTAwM2VuYW1lLCBcJiMzNDtDb21wb3NpdGVcJiMzNDssIHNpemVvZihpLVx1MDAzZW5hbWUpKTtcbiA2MjQ6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Mjc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBVU0IgQ2FwdHVyZSBEZXZpY2UgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdXNidHZfcXVlcnljYXBgIGZ1bmN0aW9uIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGZvdW5kIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGNvZGUgaXMgdXNpbmcgYGRldi0mZ3Q7dWRldmAgaGVyZSwgc3BlY2lmaWNhbGx5IGluIHRoaXMgYHVzYl9tYWtlX3BhdGhgIGNhbGwsIGB1c2JfbWFrZV9wYXRoKGRldi0mZ3Q7dWRldiwgY2FwLSZndDtidXNfaW5mbywgc2l6ZW9mKGNhcC0mZ3Q7YnVzX2luZm8pKTtgLiBJdCYjMzk7cyBzdGFydGluZyB0byBsb29rIGxpa2UgaWYgYGRldi0mZ3Q7dWRldmAgaXMgTlVMTCwgdGhlbiBgdXNiX21ha2VfcGF0aGAgd2lsbCBkZXJlZmVyZW5jZSB0aGF0IE5VTEwgcG9pbnRlciEgVGhhdCYjMzk7cyBiYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBsZXQgbWUgc2VlLi4uIEFoLCBoZXJlIGl0IGlzOgoKYGBgYwpzdGF0aWMgaW5saW5lIHZvaWQgdXNiX21ha2VfcGF0aChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBjaGFyICpidWYsIHNpemVfdCBzaXplKQp7CglpbnQgYWN0dWFsOwoJYWN0dWFsID0gc25wcmludGYoYnVmLCBzaXplLCAmIzM0O3VzYi0lcy0lcyYjMzQ7LCBkZXYtJmd0O2J1cy0mZ3Q7YnVzX25hbWUsCgkJCSAgZGV2LSZndDtkZXZwYXRoKTsKfQpgYGAKCk9rYXksIHRoZSBtb3JlIEkgbG9vayBhdCB0aGlzIHRoZSB3b3JzZSBpdCBnZXRzLiBJZiBgZGV2YCBpdHNlbGYgaXMgTlVMTCwgdGhlbiBgZGV2LSZndDtidXNgIHdpbGwgY2F1c2UgYSBjcmFzaCEgU28sIGl0JiMzOTtzIG5vdCBqdXN0IHRoZSBwb3RlbnRpYWwgTlVMTCBgZGV2LSZndDt1ZGV2YCBpc3N1ZSwgYnV0IGFsc28gYSBwb3RlbnRpYWwgTlVMTCBgZGV2YCBpc3N1ZSEgYHVzYnR2X3F1ZXJ5Y2FwYCBpcyBkZWZpbml0ZWx5IGEga2V5IGFyZWEgdG8gZm9jdXMgb24uCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGF0IHNvbWUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gc2VlIGlmIHRoaXMgcGF0dGVybiByZXBlYXRzIGl0c2VsZi4gSSYjMzk7bGwgY2hlY2sgYHVzYnR2X2VudW1faW5wdXRgLi4uIE5vcGUsIGRvZXNuJiMzOTt0IHVzZSBgZGV2LSZndDt1ZGV2YCBpbiB0aGF0IG9uZS4gV2hhdCBhYm91dCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGA/IE9rYXksIEkmIzM5O2xsIG1vdmUgb24gdG8gdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0fVxuIDYzNjpcdFxuIDYzNzpcdHN0YXRpYyBpbnQgdXNidHZfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsXG4gNjM4Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpXG4gNjM5Olx0e1xuIDY0MDpcdFx0aWYgKGYtXHUwMDNlaW5kZXggXHUwMDNlIDApXG4gNjQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDY0MjpcdFxuIDY0MzpcdFx0Zi1cdTAwM2VwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xuIDY0NDpcdFx0cmV0dXJuIDA7XG4gNjQ1Olx0fVxuIDY0NjpcdFxuIDY0NzpcdHN0YXRpYyBpbnQgdXNidHZfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXG4gNjQ4Olx0XHRcdFx0XHRcdHN0cnVjdCB2NGwyX2Zvcm1hdCAqZilcbiA2NDk6XHR7XG4gNjUwOlx0XHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcbiA2NTE6XHRcbiA2NTI6XHRcdGYtXHUwMDNlZm10LnBpeC53aWR0aCA9IHVzYnR2LVx1MDAzZXdpZHRoO1xuIDY1MzpcdFx0Zi1cdTAwM2VmbXQucGl4LmhlaWdodCA9IHVzYnR2LVx1MDAzZWhlaWdodDtcbiA2NTQ6XHRcdGYtXHUwMDNlZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjI1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ29uc2lkZXJpbmcgVVNCIEdhZGdldCBEcml2ZXJzIGZvciBhIFN5c3RlbSoqCgpSaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgKm5vKiBgdWRldmAgZm9yIHRoaXMgcGFydGljdWxhciBhcHBsaWNhdGlvbi4gVGhhdCYjMzk7cyBhIGNvbnN0cmFpbnQgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGxldCYjMzk7cyBleHBsb3JlIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgdXNidHZfZ19zdGRgIGlzIGEgdmlhYmxlIGRyaXZlciB0byBhY2hpZXZlIG15IGdvYWxzLiBJdCBpcyBhIHBvc3NpYmlsaXR5IGFuZCBJIG11c3QgY29uc2lkZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRyZXR1cm4gMDtcbiA2NjE6XHR9XG4gNjYyOlx0XG4gNjYzOlx0c3RhdGljIGludCB1c2J0dl9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pXG4gNjY0Olx0e1xuIDY2NTpcdFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XG4gNjY2Olx0XHQqbm9ybSA9IHVzYnR2LVx1MDAzZW5vcm07XG4gNjY3Olx0XHRyZXR1cm4gMDtcbiA2Njg6XHR9XG4gNjY5Olx0XG4gNjcwOlx0c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiA2NzM6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY3NDpcdFxuIDY3NTpcdFx0aWYgKG5vcm0gXHUwMDI2IFVTQlRWX1RWX1NURClcbiA2NzY6XHRcdFx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIG5vcm0pO1xuIDY3NzpcdFxuIDY3ODpcdFx0cmV0dXJuIHJldDtcbiA2Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzMxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB1c2J0dl9nX3N0ZGAgTW9kdWxlJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgdXNidHZfZ19zdGRgIGNvZGUuIEZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhlIGFic2VuY2Ugb2YgYHVkZXZgIHVzYWdlIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIG5hcnJvd3MgZG93biB3aGVyZSB0byBsb29rIGlmIHRoZXJlIGFyZSBgdWRldmAtcmVsYXRlZCBpc3N1ZXMuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gcGF5IGF0dGVudGlvbiB0byBoZXJlIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfcXVlcnljYXBgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLiBUaGVzZSBhcmUgdGhlIHRvdWNocG9pbnRzLCB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGRldmljZSBhbmQgdmlkZW8gY2FwdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNhcmVmdWxseSBmb3IgYW55IGxvZ2ljIGVycm9ycyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCldhaXQgYSBtaW51dGUuLi4gSSBoYXZlIHRvIGRvdWJsZSBjaGVjazogYHVzYnR2X3NfaW5wdXRgIGlzIHVzaW5nIGB1ZGV2YCwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFxuIDY4MTpcdHN0YXRpYyBpbnQgdXNidHZfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKVxuIDY4MjpcdHtcbiA2ODM6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY4NDpcdFx0KmkgPSB1c2J0di1cdTAwM2VpbnB1dDtcbiA2ODU6XHRcdHJldHVybiAwO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxuIDY4OTpcdHtcbiA2OTA6XHRcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xuIDY5MTpcdFxuIDY5MjpcdFx0cmV0dXJuIHVzYnR2X3NlbGVjdF9pbnB1dCh1c2J0diwgaSk7XG4gNjkzOlx0fVxuIDY5NDpcdFxuIDY5NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xuIDY5NjpcdFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxuIDY5NzpcdFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcbiA2OTg6XHRcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXG4gNjk5Olx0XHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1MjgKCQkJCQkJCW91dHB1dDogMjc1CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBVU0JUViBEcml2ZXIgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXIgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEl0IGxvb2tzIGxpa2UgYHVzYnR2X3NlbGVjdF9pbnB1dGAgY2FsbHMgYHVzYnR2X3NldF9yZWdzYCwgd2hpY2ggdGhlbiB1c2VzIGB1ZGV2YC4gVGhhdCB0ZWxscyBtZSB0aGF0IGB1c2J0dl9zX2lucHV0YCBpcyBhbm90aGVyIGtleSBzeW1ib2wgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byB0aWdodGVuIHVwIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgSSYjMzk7bSByZWFsbHkgaGl0dGluZyB0aGUga2V5IGFyZWFzIHJlbGF0ZWQgdG8gdGhlIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkLgoKSGVyZSYjMzk7cyBteSByZWZpbmVkIGxpc3Q6CgoqICAgYHVzYnR2X2Rpc2Nvbm5lY3RgCiogICBgdXNidHZfcHJvYmVgCiogICBgdXNidHZfc19zdGRgCiogICBgdXNidHZfc19pbnB1dGAKKiAgIGB1c2J0dl9zX2N0cmxgCiogICBgdXNidHZfcXVlcnljYXBgCiogICBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYAoqICAgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYAoqICAgYHVzYnR2X2J1Zl9xdWV1ZWAKClllYWgsIHRoaXMgbG9va3Mgc29saWQuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgdXNiX2RldmljZWAgcG9pbnRlciBpcyBhY2Nlc3NlZCBhZnRlciBpdCYjMzk7cyBiZWVuIGZyZWVkLiBCeSBzZXR0aW5nIGB1c2J0di0mZ3Q7dWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGlzY29ubmVjdCwgdGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBjb25jdXJyZW50IFY0TDIgaW9jdGxzIGZyb20gYWNjZXNzaW5nIGJhZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYSBVU0IgZHJpdmVyIGV4cG9zaW5nIGEgVjRMMiBpbnRlcmZhY2UsIGZ1enppbmcgdmlhIGJvdGggVVNCIGFuZCBWNEwyIGZ1enppbmcgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHRoYXQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBpbiBwbGFjZSwgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyYXRpb25zIGxpa2U6CgoqICAgYFZJREVPX1VTQlRWYAoqICAgYE1FRElBX1NVUFBPUlRgCiogICBgTUVESUFfVVNCX1NVUFBPUlRgCiogICBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgCiogICBgVklERU9fREVWYAoqICAgYFNORGAKCkkmIzM5O2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIFllcCwgaXQgZGVwZW5kcyBvbiBgVklERU9fREVWICZhbXA7JmFtcDsgU05EYCwgYHNlbGVjdHMgU05EX1BDTWAsIGFuZCBgc2VsZWN0cyBWSURFT0JVRjJfVk1BTExPQ2AsIHNvIG15IGN1cnJlbnQgbGlzdCBpcyBnb29kLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MgYW5kIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHY0bDJfbG9ja2AgbXV0ZXggZHVyaW5nIGRldmljZSBkaXNjb25uZWN0LiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgVjRMMiBpb2N0bHMgKGxpa2UgYFZJRElPQ19RVUVSWUNBUGAsIGBWSURJT0NfU19TVERgLCBgVklESU9DX1NfQ1RSTGAsIGV0Yy4pIGZyb20gYWNjZXNzaW5nIHRoZSBmcmVlZCBgdXNiX2RldmljZWAgcG9pbnRlci4gU2luY2UgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXggaW4gYSBVU0IgZHJpdmVyIHRoYXQgZXhwb3NlcyBhIFY0TDIgaW50ZXJmYWNlLCBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdmlhIFVTQiBhbmQgVjRMMiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSURFT19VU0JUViYjMzQ7LAogICAgJiMzNDtNRURJQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX1VTQl9TVVBQT1JUJiMzNDssCiAgICAmIzM0O01FRElBX0NBTUVSQV9TVVBQT1JUJiMzNDssCiAgICAmIzM0O1ZJREVPX0RFViYjMzQ7LAogICAgJiMzNDtTTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2J0dl9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3VzYnR2X3Byb2JlJiMzNDssCiAgICAmIzM0O3VzYnR2X3Nfc3RkJiMzNDssCiAgICAmIzM0O3VzYnR2X3NfaW5wdXQmIzM0OywKICAgICYjMzQ7dXNidHZfc19jdHJsJiMzNDssCiAgICAmIzM0O3VzYnR2X3F1ZXJ5Y2FwJiMzNDssCiAgICAmIzM0O3VzYnR2X3N0YXJ0X3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9zdG9wX3N0cmVhbWluZyYjMzQ7LAogICAgJiMzNDt1c2J0dl9idWZfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHY0bDJfbG9ja2AgbXV0ZXggZHVyaW5nIGRldmljZSBkaXNjb25uZWN0LiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgVjRMMiBpb2N0bHMgKGxpa2UgYFZJRElPQ19RVUVSWUNBUGAsIGBWSURJT0NfU19TVERgLCBgVklESU9DX1NfQ1RSTGAsIGV0Yy4pIGZyb20gYWNjZXNzaW5nIHRoZSBmcmVlZCBgdXNiX2RldmljZWAgcG9pbnRlci4gU2luY2UgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBmaXggaW4gYSBVU0IgZHJpdmVyIHRoYXQgZXhwb3NlcyBhIFY0TDIgaW50ZXJmYWNlLCBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdmlhIFVTQiBhbmQgVjRMMiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY3NDRlMzdkZTliYjJkOTNmZDI2MWQwNWU4ODRhMGIzNGVmODdiNzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDoyNTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYwppbmRleCA2YzRmYWNmNGY0MWE3Li5iMzNiNTRmZGJkNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jCkBAIC0xMzYsOCAmIzQzOzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJdXNidHZfYXVkaW9fZnJlZSh1c2J0dik7CiAJdXNidHZfdmlkZW9fZnJlZSh1c2J0dik7CiAKLQl1c2J0di0mZ3Q7dWRldiA9IE5VTEw7Ci0KIAkvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmUKIAkgICBkb25lIHVzaW5nIGl0ICovCiAJdjRsMl9kZXZpY2VfcHV0KCZhbXA7dXNidHYtJmd0O3Y0bDJfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jCmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYwpAQCAtOTY4LDUgJiM0Mzs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dikKIAl2YjJfdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmFtcDt1c2J0di0mZ3Q7dmRldik7CiAJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3VzYnR2LSZndDt2NGwyX2xvY2spOwomIzQzOwl1c2J0di0mZ3Q7dWRldiA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3VzYnR2LSZndDt2NGwyX2xvY2spOwomIzQzOwogCXY0bDJfZGV2aWNlX3B1dCgmYW1wO3VzYnR2LSZndDt2NGwyX2Rldik7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGJ5IG1vdmluZyB0aGUgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO2AgYXNzaWdubWVudCBpbnRvIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgcHJvdGVjdGluZyBpdCB3aXRoIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI1OjU1LjI1NDg4MDc2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTMwNzMwOTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUgYnkgbW92aW5nIHRoZSBgdXNidHYtXFx1MDAzZXVkZXYgPSBOVUxMO2AgYXNzaWdubWVudCBpbnRvIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgcHJvdGVjdGluZyBpdCB3aXRoIGB1c2J0di1cXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Rpb24uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MjU6NTUuMjU0ODg2MTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM1NTc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjI1OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xcbmluZGV4IDZjNGZhY2Y0ZjQxYTcuLmIzM2I1NGZkYmQ2MjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXFxuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXFxuQEAgLTEzNiw4ICsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiBcXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcXG4gXFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XFxuIFxcbi1cXHR1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7XFxuLVxcbiBcXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcXG4gXFx0ICAgZG9uZSB1c2luZyBpdCAqL1xcbiBcXHR2NGwyX2RldmljZV9wdXQoXFx1MDAyNnVzYnR2LVxcdTAwM2V2NGwyX2Rldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXFxuaW5kZXggZGUwMzI4MTAwYTYwZC4uZWYwNjZkZjcxMjQ2OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXFxuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xcbkBAIC05NjgsNSArOTY4LDkgQEAgdm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuIFxcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcXHUwMDI2dXNidHYtXFx1MDAzZXZkZXYpO1xcbiBcXHR2NGwyX2RldmljZV9kaXNjb25uZWN0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9kZXYpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfbG9jayk7XFxuK1xcdHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG4rXFxuIFxcdHY0bDJfZGV2aWNlX3B1dChcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfZGV2KTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNTo1NS42NjkxNzg0MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzY0NTMzNTkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklERU9fVVNCVFZcIixcbiAgICBcIk1FRElBX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX1VTQl9TVVBQT1JUXCIsXG4gICAgXCJNRURJQV9DQU1FUkFfU1VQUE9SVFwiLFxuICAgIFwiVklERU9fREVWXCIsXG4gICAgXCJTTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2J0dl9kaXNjb25uZWN0XCIsXG4gICAgXCJ1c2J0dl9wcm9iZVwiLFxuICAgIFwidXNidHZfc19zdGRcIixcbiAgICBcInVzYnR2X3NfaW5wdXRcIixcbiAgICBcInVzYnR2X3NfY3RybFwiLFxuICAgIFwidXNidHZfcXVlcnljYXBcIixcbiAgICBcInVzYnR2X3N0YXJ0X3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfc3RvcF9zdHJlYW1pbmdcIixcbiAgICBcInVzYnR2X2J1Zl9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFVTQlRWIGRyaXZlciBieSBzZXR0aW5nIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3QuIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBWNEwyIGlvY3RscyAobGlrZSBgVklESU9DX1FVRVJZQ0FQYCwgYFZJRElPQ19TX1NURGAsIGBWSURJT0NfU19DVFJMYCwgZXRjLikgZnJvbSBhY2Nlc3NpbmcgdGhlIGZyZWVkIGB1c2JfZGV2aWNlYCBwb2ludGVyLiBTaW5jZSB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIGZpeCBpbiBhIFVTQiBkcml2ZXIgdGhhdCBleHBvc2VzIGEgVjRMMiBpbnRlcmZhY2UsIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB2aWEgVVNCIGFuZCBWNEwyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3NDRlMzdkZTliYjJkOTNmZDI2MWQwNWU4ODRhMGIzNGVmODdiNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDoyNTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuaW5kZXggNmM0ZmFjZjRmNDFhNy4uYjMzYjU0ZmRiZDYyMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXG5AQCAtMTM2LDggKzEzNiw2IEBAIHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcbiBcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xuIFxuLVx0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4tXG4gXHQvKiB0aGUgdXNidHYgc3RydWN0dXJlIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB2NGwyIHdpbGwgYmVcbiBcdCAgIGRvbmUgdXNpbmcgaXQgKi9cbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcbmluZGV4IGRlMDMyODEwMGE2MGQuLmVmMDY2ZGY3MTI0NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG4rKysgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5AQCAtOTY4LDUgKzk2OCw5IEBAIHZvaWQgdXNidHZfdmlkZW9fZnJlZShzdHJ1Y3QgdXNidHYgKnVzYnR2KVxuIFx0dmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnVzYnR2LVx1MDAzZXZkZXYpO1xuIFx0djRsMl9kZXZpY2VfZGlzY29ubmVjdChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfbG9jayk7XG4rXHR1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuK1xuIFx0djRsMl9kZXZpY2VfcHV0KFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfZGV2KTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNTo1NS42NjkxODAzMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI0NjgzNjEwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIERyaXZlciBQYXRjaCBmb3IgV29ydGhGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGB1c2J0di1jb3JlLmNgIGFuZCBgdXNidHYtdmlkZW8uY2AsIHNwZWNpZmljYWxseSBtb3ZpbmcgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO2AgZnJvbSBgdXNidHZfZGlzY29ubmVjdGAgdG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCB3cmFwcGluZyBpdCBpbiBhIG11dGV4LiBUaGF0IHNjcmVhbXMgXCJ1c2UtYWZ0ZXItZnJlZVwiIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggdG8gbWUg4oCTIGNvbW1vbiBpbiB0aGlzIGtpbmQgb2YgZHJpdmVyIGNvZGUuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgcHJvbXB0LiBJdCdzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgXCJ0ZWFyZG93biBjYWxsYmFja3NcIiBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZC4gSG9sZCBvbiwgYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGEgVVNCIGRyaXZlciBkaXNjb25uZWN0IGNhbGxiYWNrLi4uIHRoYXQncyBzaW1pbGFyISBJdOKAmXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgdW5wbHVnZ2VkIG9yIHRoZSBkcml2ZXIgaXMgdW5ib3VuZCwgbGlrZSBhIGAucmVtb3ZlYCBmdW5jdGlvbiBmb3IgUENJLlxuXG5UaGUgdHJpY2sgbm93IGlzIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIGlzIGNhbGxlZCAqZnJvbSogYHVzYnR2X2Rpc2Nvbm5lY3RgLiBTbywgbGV0J3MgZGlnIGludG8gYHVzYnR2X2Rpc2Nvbm5lY3RgIGFuZCBgdXNidHZfdmlkZW9fZnJlZWAgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzozOC4xMzc1NDQ0ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3NDUzNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz02Nz1zdGF0aWMgaW50IHVzYnR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyNi1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTI3OnN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEyOC17XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9MTU2PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0dl91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTE1OS1cXHQucHJvYmUgPSB1c2J0dl9wcm9iZSxcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTYwOlxcdC5kaXNjb25uZWN0ID0gdXNidHZfZGlzY29ubmVjdCxcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTYxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI3OjM4LjUzNTAwODQ1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Nzg4MTE0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXNzZWN0aW5nIHRoZSBVU0IgVFYgRHJpdmVyIERpc2Nvbm5lY3QqKlxuXG5SaWdodCwgc28gYHVzYnR2X2Rpc2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgdGhlIGAuZGlzY29ubmVjdGAgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aGluIHRoZSBgdXNiX2RyaXZlcmAgc3RydWN0dXJlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgZm9jdXNlZCBzb2xlbHkgb24gdGhlIHRlYXJkb3duIHByb2Nlc3Mg4oCTIHNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgdGhlIGxvZ2ljIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGAgaXRzZWxmIGFuZCwgaW1wb3J0YW50bHksIHRoZSBmdW5jdGlvbiBgdXNidHZfdmlkZW9fZnJlZWAgd2hpY2ggYHVzYnR2X2Rpc2Nvbm5lY3RgIGNhbGxzLlxuXG5Ob3cgSSBuZWVkIHRvIHBhdXNlIGFuZCBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJ4oCZbSBzdGFydGluZyB0byBnZXQgdGhhdCBuaWdnbGluZyBmZWVsaW5nLiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBgdXNidHZfdmlkZW9fZnJlZWAgYWN0dWFsbHkgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgdXNidHZfZGlzY29ubmVjdGA/IEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQuIElmIGl0J3MgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzLCB0aGlzIGNoYW5nZSBjb3VsZCBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zIHRoYW4gdGhlIHBhdGNoIGluaXRpYWxseSBzdWdnZXN0cywgYW5kIHRoYXTigJlzIGdvaW5nIHRvIGltcGFjdCBteSByZXZpZXcgb2YgdGhpcyBwYXRjaC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI3OjQyLjIxMzgyMjEyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyOTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2J0dl92aWRlb19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM9Njc9c3RhdGljIGludCB1c2J0dl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMTctXFx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjExODpcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE5LVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTEyNz1zdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTEzNi1cXHR1c2J0dl9hdWRpb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmM6MTM3OlxcdHVzYnR2X3ZpZGVvX2ZyZWUodXNidHYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzgtXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05NjUtXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5NjY6dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy05Njcte1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD0xMzI9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzM6dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtMTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo0Mi4yNTg0NTgwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzI0OTg5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIHVzYnR2IERyaXZlcjogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXNidHZgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9wcm9iZWAgKHNwZWNpZmljYWxseSBvbiB0aGUgZXJyb3IgcGF0aCkgYW5kIGB1c2J0dl9kaXNjb25uZWN0YC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD9cIiBUaGUgcHJvbXB0IEknbSBmb2xsb3dpbmcgZGlyZWN0cyBtZSB0byBza2lwIHBhdGNoZXMgaWYgdGhleSBwcmltYXJpbHkgaW52b2x2ZSB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAgdGhhdCBhcmUgKm9ubHkqIGV4ZWN1dGVkIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kcy5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBhICpVU0IqIGRyaXZlciwgbm90IFBDSSEgVGhlIGJlYXV0eSBvZiBVU0IgaXMgdGhlIGhvdC11bnBsdWcgY2FwYWJpbGl0aWVzIGFyZSBlYXNpbHkgZXhwbG9pdGVkIHVzaW5nIHN5emthbGxlciBhbmQgaXRzIGBkdW1teV9oY2RgLCBhbmQgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgL2BzeXpfdXNiX2Rpc2Nvbm5lY3RgIHN5c3RlbSBjYWxscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGUgcHJvbXB0J3MgcmVmZXJlbmNlIHRvICdQQ0kgaG90LXVucGx1ZycgKmltcGxpY2l0bHkqIGV4Y2x1ZGUgVVNCIGhvdC11bnBsdWc/XCIgXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgd29yZGluZzogXCJEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKSB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXCIgIEFoYSEgVGhlIHByb21wdCBpcyBzcGVjaWZpYyBhYm91dCBcIlBDSSBob3QtdW5wbHVnXCIuIEdpdmVuIHRoZSBleHRlbnNpdmUgVVNCIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXIsIGFuZCBnaXZlbiB0aGF0IFVTQiBob3QtdW5wbHVnIGlzIGV4cGxpY2l0bHkgZXhwbG9pdGVkIGJ5IHN5emthbGxlciB2aWEgbWVjaGFuaXNtcyBsaWtlIHZoY2kvZHVtbXlfaGNkLCBJJ20gbGVhbmluZyB0b3dhcmQgKmRlZmluaXRlbHkqIGZ1enppbmcgdGhpcy5cblxuVGhlcmUncyBhbm90aGVyIHBpZWNlIG9mIHRoZSBwdXp6bGU6IGB1c2J0dl92aWRlb19mcmVlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZSBgdXNidHZfcHJvYmVgIGVycm9yIHBhdGguIFNvIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29tcGxldGUgYHVzYnR2X3Byb2JlYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo1Ny45ODM0NDk5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfdmlkZW9fZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jPTY3PXN0YXRpYyBpbnQgdXNidHZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTE3LVxcdC8qIHRoaXMgd2lsbCB1bmRvIHRoZSB2NGwyX2RldmljZV9nZXQoKSAqL1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzoxMTg6XFx0dXNidHZfdmlkZW9fZnJlZSh1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYz0xMjc9c3RhdGljIHZvaWQgdXNidHZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYy0xMzYtXFx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jOjEzNzpcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMtMTM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyNzo1OC4wMjgxODMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTAxMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1c2J0dl9wcm9iZWAncyBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgZXJyb3IgcGF0aCB3aXRoaW4gYHVzYnR2X3Byb2JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3JvbmcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIFVTQiBUViBkZXZpY2UuIEknbSBnb2luZyB0byBtYXAgb3V0IGVhY2ggcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUsIHRoZSBlcnJvciBjb2RlcyByZXR1cm5lZCwgYW5kIGhvdyB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIHJlY292ZXIgb3IsIHVsdGltYXRlbHksIGNsZWFuIHVwLiBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCB0b28sIGhvdyBpdCByZWxlYXNlcyBhbGxvY2F0ZWQgbWVtb3J5LCBoYW5kbGVzIGRldmljZSBkZXJlZ2lzdHJhdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjbGVhbnVwIHRoYXQgYXJlIGxpa2VseSBvciBsZXNzIHNvLiBJJ2xsIGZvY3VzIG9uIHRoZSBkaWZmZXJlbnQgZXhpdCBwb2ludHMgYW5kIGVuc3VyZSB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIG9yIGhhbmRsZWQgYXMgdGhleSBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODowMS4yMzkxOTg5NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRyZXQgPSB1c2J0dl92aWRlb19pbml0KHVzYnR2KTtcXG4gMTAxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMDI6XFx0XFx0XFx0Z290byB1c2J0dl92aWRlb19mYWlsO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRyZXQgPSB1c2J0dl9hdWRpb19pbml0KHVzYnR2KTtcXG4gMTA1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMDY6XFx0XFx0XFx0Z290byB1c2J0dl9hdWRpb19mYWlsO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHQvKiBmb3Igc2ltcGxpY2l0eSB3ZSBleHBsb2l0IHRoZSB2NGwyX2RldmljZSByZWZlcmVuY2UgY291bnRpbmcgKi9cXG4gMTA5OlxcdFxcdHY0bDJfZGV2aWNlX2dldChcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfZGV2KTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiRnVzaGljYWkgVVNCVFYwMDcgQXVkaW8tVmlkZW8gR3JhYmJlclxcXFxuXFxcIik7XFxuIDExMjpcXHRcXHRyZXR1cm4gMDtcXG4gMTEzOlxcdFxcbiAxMTQ6XFx0dXNidHZfYXVkaW9fZmFpbDpcXG4gMTE1OlxcdFxcdC8qIHdlIG11c3Qgbm90IGZyZWUgYXQgdGhpcyBwb2ludCAqL1xcbiAxMTY6XFx0XFx0djRsMl9kZXZpY2VfZ2V0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9kZXYpO1xcbiAxMTc6XFx0XFx0LyogdGhpcyB3aWxsIHVuZG8gdGhlIHY0bDJfZGV2aWNlX2dldCgpICovXFxuIDExODpcXHRcXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0dXNidHZfdmlkZW9fZmFpbDpcXG4gMTIxOlxcdFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7XFxuIDEyMjpcXHRcXHRrZnJlZSh1c2J0dik7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdHJldHVybiByZXQ7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkIHVzYnR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDEyODpcXHR7XFxuIDEyOTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6Mjg6MDEuMjM5MjcyMDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzM5Njg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCVFYgRHJpdmVyIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdXNidHZgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSB0d28gZGlzdGluY3QgcGxhY2VzOiBhbiBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgICh3aGljaCBpcyBhbHJlYWR5IGEgcmVkIGZsYWcgZm9yIHBvdGVudGlhbCBpc3N1ZXMpIGFuZCB0aGUgbW9yZSBwcmVkaWN0YWJsZSBgdXNidHZfZGlzY29ubmVjdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZWxvY2F0aW9uIG9mIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgIGZyb20ganVzdCBgdXNidHZfZGlzY29ubmVjdGAgdG8gYWxzbyBiZWluZyBleGVjdXRlZCB3aXRoaW4gYHVzYnR2X3ZpZGVvX2ZyZWVgLiBBbmQgY3J1Y2lhbGx5LCBpdCdzIG5vdyBndWFyZGVkIGJ5IGBtdXRleF9sb2NrKFx1MDAyNnVzYnR2LVx1MDAzZXY0bDJfbG9jaylgLlxuXG5UaGUgb2xkIGJlaGF2aW9yLCB3aXRoIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgICpvbmx5KiB3aXRoaW4gYHVzYnR2X2Rpc2Nvbm5lY3RgLCBzZWVtcyBpbmhlcmVudGx5IHByb2JsZW1hdGljLiBOb3csIHdpdGggaXQgYWxzbyBpbiBgdXNidHZfdmlkZW9fZnJlZWAsIGl0IGlzIGFsc28gZXhlY3V0ZWQgb24gdGhlIHByb2JlIGVycm9yIHBhdGguIFRoaXMgc2lnbmFscyBhbiBhdHRlbXB0IHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGB1ZGV2YCBwb2ludGVyLlxuXG5NeSBpbnR1aXRpb24gc2F5cyB0aGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSBpbnZvbHZpbmcgY29uY3VycmVudCBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSByZXNvbHZpbmcgYSByYWNlIGJldHdlZW4gYSBkaXNjb25uZWN0IGV2ZW50IGFuZCBzb21lIG90aGVyIFY0TDIgb3BlcmF0aW9uLiBUaGUgYG11dGV4X2xvY2tgIGhpbnRzIGF0IGEgVjRMMiBpb2N0bCBvciBzaW1pbGFyIGFjY2Vzcy4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBJdCdzIGEgcmFjZSBjb25kaXRpb24gaW4gYSBVU0IgZHJpdmVyLCBhbmQgc3l6a2FsbGVyIGlzICpwZXJmZWN0KiBmb3IgdGhpcyBraW5kIG9mIHNjZW5hcmlvLiBTeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6IFVTQiBkZXZpY2VzIGFuZCBWNEwyIGlvY3RscyBjb25jdXJyZW50bHksIHRyaWdnZXJpbmcgdGhpcyByYWNlIGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyB0aGUgdW5kZXJseWluZyBidWcuIExldCdzIG1ha2Ugc3VyZSB0aGUgVVNCVFYgY29uZmlnIGlzIGNvcnJlY3QgYW5kIGdldCB0aGlzIHRoaW5nIGZ1enplZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTgzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjI4OjA4LjExMzI0Mjg5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3NDIyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJREVPX1VTQlRWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZzoyOmNvbmZpZyBWSURFT19VU0JUVlxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVVNCVFYwMDcgdmlkZW8gY2FwdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODowOC4xNTk5OTAwODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDc5NDUwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIFZJREVPX1VTQlRWKipcblxuT2theSwgdGltZSB0byBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBWSURFT19VU0JUVmAuIEkgbmVlZCB0byBlbnN1cmUgYSBzdGFibGUgYW5kIHBlcmZvcm1hbnQgcmVsZWFzZSwgc28gYSBtZXRpY3Vsb3VzIGNoZWNrIGlzIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB3ZSBzdGFydD9cIiBQcm9iYWJseSB3aXRoIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMg4oCTIGFyZSB0aGVyZSBhbnkgcmVjZW50IGxpYnJhcnkgdXBkYXRlcyB0aGF0IGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucz8gSGFzIHRoZXJlIGJlZW4gYW55IHJlY2VudCB3b3JrIGluIHJlbGF0ZWQgcHJvamVjdHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IG1pZ2h0IHRvdWNoIHRoZSBVU0Igc3RhY2sgb3IgdmlkZW8gcHJvY2Vzc2luZyBwaXBlbGluZXMsIHRoYXQgY291bGQgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcz9cblxuSSdtIHRoaW5raW5nOiAqTGV0J3MgbG9vayBhdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdC4qIFRoZW4sIEknbGwgbmVlZCB0byB3b3JrIG91dHdhcmRzIHRvIHRoZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcywgYmVjYXVzZSB0aG9zZSBhcmUgb2Z0ZW4gdGhlIHNuZWFreSBjdWxwcml0cy4gSSdsbCBuZWVkIHRvIG1lbnRhbGx5IG1hcCB0aGUgY2FsbCBncmFwaCB0byBhbnRpY2lwYXRlIHBvdGVudGlhbCBjb25mbGljdHMgb3IgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYFZJREVPX1VTQlRWYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIGNhcHR1cmUsIGVuY29kaW5nLCBhbmQgVVNCIGRldmljZSBoYW5kbGluZy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHZlcnNpb24gY29tcGF0aWJpbGl0eS4gQXJlIHdlIHBlZ2dlZCB0byBzcGVjaWZpYyB2ZXJzaW9ucz8gQXJlIHdlIHVzaW5nIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2VzLCBvciBhcmUgd2Ugc3R1Y2sgb24gb2xkZXIgdmVyc2lvbnMgdGhhdCBtaWdodCBoYXZlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBrbm93biBidWdzPyBJIG5lZWQgdG8gcmV2aWV3IGNoYW5nZSBsb2dzLCBpc3N1ZSB0cmFja2VycywgYW5kIG1heWJlIGV2ZW4gcHVsbCBkb3duIHRoZSBzb3VyY2UgY29kZSBmb3Iga2V5IGRlcGVuZGVuY2llcyB0byBjaGVjayB0aGUgYWN0dWFsIGNvZGUuXG5cbipGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQqLiBJcyB0aGlzIGEgY3Jvc3MtcGxhdGZvcm0gcHJvamVjdD8gSWYgc28sIEkgbmVlZCB0byB0aGluayBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBhIHBhcnRpY3VsYXIgT1Mgb3IgaGFyZHdhcmUgY29tYmluYXRpb24/IFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IGBWSURFT19VU0JUVmAgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgZXNwZWNpYWxseSB0aGUga2VybmVsLCBkaXNwbGF5IGRyaXZlcnMgYW5kIG90aGVyIGhhcmR3YXJlIHBlcmlwaGVyYWxzLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY3JlYXRlIGEgcm9idXN0IGRlcGVuZGVuY3kgbWFwLiBJJ2xsIHByb2JhYmx5IGJ1aWxkIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIOKAkyBtYXliZSBhIGdyYXBoIG9yIGRpYWdyYW0g4oCTIHRvIGNsZWFybHkgY29tbXVuaWNhdGUgdGhlIGRlcGVuZGVuY2llcyB0byB0aGUgdGVhbS4gVGhlIGVuZCBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHdlJ3JlIHVzaW5nIHRoZSByaWdodCB2ZXJzaW9ucywgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByaXNrcywgYW5kIHRoYXQgd2UgaGF2ZSBhIHBsYW4gZm9yIGRlYWxpbmcgd2l0aCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcywgYW5kIEkgY2FuJ3QgYWZmb3JkIHRvIG92ZXJsb29rIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6Mjg6NDAuMzA3OTM3OTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBWSURFT19VU0JUVlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gVklERU9fREVWIFxcdTAwMjZcXHUwMDI2IFNORFxcbiAgIDU6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gICA2OlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfVk1BTExPQ1xcbiAgIDc6XFx0XFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciBVU0JUVjAwNyBiYXNlZCB2aWRlbyBjYXB0dXJlIGRldmljZXMuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2J0dlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDoyODo0MC4zMDgwMDYwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQxMTU0MTUxOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb21wb25lbnQgRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byB0aGUgbmVlZCBmb3IgdGhlc2UgY29yZSBjb21wb25lbnRzOiBgVklERU9fVVNCVFZgLCBgVklERU9fREVWYCwgYW5kIGBTTkRgLiBNYWtlcyBzZW5zZSBzbyBmYXIuIFRoZW4sIGEgZmxhZyB3ZW50IHVwLiBJIGp1c3QgcmVtZW1iZXJlZCB0aGF0IGBWSURFT19ERVZgIGlzIG9mdGVuIG5lc3RlZCB3aXRoaW4gYE1FRElBX1NVUFBPUlRgLiBTbywgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIG9mIGBWSURFT19ERVZgLCBqdXN0IHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBgTUVESUFfU1VQUE9SVGAgZWNvc3lzdGVtLiBHb3R0YSBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IHRoZSBpbmNsdXNpb24gb2YgYE1FRElBX1NVUFBPUlRgIG1pZ2h0IGludHJvZHVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDEuNDYyMTYxODE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEzNjIzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJREVPX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL0tjb25maWc9MTU3PW1lbnUgXFxcIk1lZGlhIGNvcmUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0xNTktXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjE2MDpjb25maWcgVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTE2MS1cXHR0cmlzdGF0ZSBcXFwiVmlkZW80TGludXggY29yZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDIuMDIzNTMxMjM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg4NzUwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDaGVja2luZyBWSURFT19ERVYgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBWSURFT19ERVZgIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIGxvb2sgaW4gdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcy4gR2l2ZW4gdGhhdCBgVklERU9fREVWYCBzb3VuZHMgbGlrZSBpdCBwZXJ0YWlucyB0byB2aWRlbyBkZXZpY2VzLCBgZHJpdmVycy9tZWRpYS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZWZpbml0aW9uIHJpZ2h0LCBiZWZvcmUgSSBzdGFydCB3b3JraW5nIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgaXMgbGlrZWx5IHRoZSByb290IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0NS4zOTI0MTA2NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugc29tZSB2aXJ0dWFsIHRlc3QgZHJpdmVyLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQgIEluIGNhc2Ugb2YgZG91YnRzLCBzYXkgTi5cXG4gMTUzOlxcdFxcdCAgU2F5IFkgd2hlbiB5b3UgaGF2ZSBhIHNvZnR3YXJlIGRlZmluZWQgcmFkaW8gZGV2aWNlLlxcbiAxNTQ6XFx0ZW5kbWVudSAjIG1lZGlhIGRldmljZSB0eXBlc1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXG4gMTU3OlxcdG1lbnUgXFxcIk1lZGlhIGNvcmUgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdHZpc2libGUgaWYgIU1FRElBX1NVUFBPUlRfRklMVEVSXFxuIDE1OTpcXHRcXG4gMTYwOlxcdGNvbmZpZyBWSURFT19ERVZcXG4gMTYxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaWRlbzRMaW51eCBjb3JlXFxcIlxcbiAxNjI6XFx0XFx0ZGVmYXVsdCBNRURJQV9DQU1FUkFfU1VQUE9SVCB8fCBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVCB8fCBNRURJQV9SQURJT19TVVBQT1JUIHx8IE1FRElBX1NEUl9TVVBQT1JUIHx8IE1FRElBX1BMQVRGT1JNX1NVUFBPUlQgfHwgTUVESUFfVEVTVF9TVVBQT1JUXFxuIDE2MzpcXHRcXHRkZXBlbmRzIG9uIChJMkMgfHwgSTJDPW4pXFxuIDE2NDpcXHRcXHRzZWxlY3QgUkFUSU9OQUxcXG4gMTY1OlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfVjRMMiBpZiBWSURFT0JVRjJfQ09SRVxcbiAxNjY6XFx0XFx0aGVscFxcbiAxNjc6XFx0XFx0ICBFbmFibGVzIHRoZSBWNEwyIEFQSSwgdXNlZCBieSBjYW1lcmFzLCBhbmFsb2cgVFYsIHZpZGVvIGdyYWJiZXJzLFxcbiAxNjg6XFx0XFx0ICByYWRpbyBkZXZpY2VzIGFuZCBieSBzb21lIGlucHV0IGRldmljZXMuXFxuIDE2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NDUuMzkyNTQ3MTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTkwMzc0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBWSURFT1xcX1VTQlRWIGFuZCBNRURJQVxcX1NVUFBPUlQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgVklERU9fVVNCVFZgIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgY29yZSBzZXR0aW5nIEkgbmVlZCB0byBmb2N1cyBvbi4gQnV0LCBob2xkIG9uLi4uIGl0J3MgYWxzbyB3b3J0aCBhIHF1aWNrIHJldmlldyBvZiB0aGUgYE1FRElBX1NVUFBPUlRgIGZsYWcuIEV2ZW4gdGhvdWdoIGBWSURFT19VU0JUVmAgaXMgdGhlIG1haW4gY29uZmlnLCBJIGNhbid0IGRpc21pc3MgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiBgTUVESUFfU1VQUE9SVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB3aGF0ZXZlciBkZWNpc2lvbnMgSSBtYWtlIHJlZ2FyZGluZyBgVklERU9fVVNCVFZgLCB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgY29uZmxpY3Qgb3IgbGltaXQgdGhlIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCBieSBgTUVESUFfU1VQUE9SVGAuIFRpbWUgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d2/igKYgYSBtb3JlIGNvbXByZWhlbnNpdmUgcmV2aWV3IGlzIG5lZWRlZCB0byBlbnN1cmUgZnVsbCBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0OS4wOTE1OTYyNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg2OTQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVESUFfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL0tjb25maWc9MTA9c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL2NlYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MTI6bWVudWNvbmZpZyBNRURJQV9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNdWx0aW1lZGlhIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc9MjM9aWYgTUVESUFfU1VQUE9SVFxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL21lZGlhL0tjb25maWc6MjU6Y29uZmlnIE1FRElBX1NVUFBPUlRfRklMVEVSXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnLTI2LVxcdGJvb2wgXFxcIkZpbHRlciBtZWRpYSBkcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo0OS4yMjE0OTUwNTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDUyNTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBNZWRpYSBTdXBwb3J0IENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaGluZ2VzIG9uIHByb3BlciBtZWRpYSBzdXBwb3J0LiBUaGF0J3MgYSBnaXZlbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc3BlY2lmaWNhbGx5IGludmVzdGlnYXRlIGBNRURJQV9VU0JfU1VQUE9SVGAuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHBsYWNlIGZvciBVU0ItYmFzZWQgbWVkaWEgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYW5kIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo1Mi45NDIwMjMxMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTU0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRURJQV9VU0JfU1VQUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZz0zPWlmIFVTQiBcXHUwMDI2XFx1MDAyNiBNRURJQV9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy00LVxcbmRyaXZlcnMvbWVkaWEvdXNiL0tjb25maWc6NTptZW51Y29uZmlnIE1FRElBX1VTQl9TVVBQT1JUXFxuZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1lZGlhIFVTQiBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NTMuMDE4NTgyNzk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQzMTEyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVTQiBNZWRpYSBEcml2ZXIgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBNRURJQV9VU0JfU1VQUE9SVGAgZW5hYmxlZCBhcyB3ZWxsLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIExldCdzIG5vdCBqdXN0IGFzc3VtZSBpdCdzIGFjdGl2YXRlZCwgdGhvdWdoLiBMZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGluIHRoZSBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2AgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZSBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIHdoZW4gZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcyBpbiB0aGVzZSBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzI6NTYuODMyODk4NjY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGlmIFVTQiBcXHUwMDI2XFx1MDAyNiBNRURJQV9TVVBQT1JUXFxuICAgNDpcXHRcXG4gICA1OlxcdG1lbnVjb25maWcgTUVESUFfVVNCX1NVUFBPUlRcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk1lZGlhIFVTQiBBZGFwdGVyc1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgRW5hYmxlIG1lZGlhIGRyaXZlcnMgZm9yIFVTQiBidXMuXFxuICAgOTpcXHRcXHQgIElmIHlvdSBoYXZlIHN1Y2ggZGV2aWNlcywgc2F5IFkuXFxuICAxMDpcXHRcXG4gIDExOlxcdGlmIE1FRElBX1VTQl9TVVBQT1JUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXFxuICAxNDpcXHRcXHRjb21tZW50IFxcXCJXZWJjYW0gZGV2aWNlc1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXFxcIlxcbiAgMTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9wd2MvS2NvbmZpZ1xcXCJcXG4gIDE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZ1xcXCJcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXZjL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMyOjU2LjgzMzAwOTU4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYyNTExMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCVFYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgYHVzYnR2YCByZWFsbHkgbmVzdGVkIHVuZGVyIGBNRURJQV9DQU1FUkFfU1VQUE9SVGA/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcy4gWWVwLCB0aGVyZSBpdCBpczogYGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYHVzYnR2YCBpcyBjbGVhcmx5IGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAuIFRpbWUgdG8ganVtcCBpbnRvIGBkcml2ZXJzL21lZGlhL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFzIEkgZXhwZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMjo1OS43OTU1MjMxOTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTA4MDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVESUFfQ0FNRVJBX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS9LY29uZmlnPTYyPW1lbnUgXFxcIk1lZGlhIGRldmljZSB0eXBlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02Ni0jXFxuZHJpdmVycy9tZWRpYS9LY29uZmlnOjY3OmNvbmZpZyBNRURJQV9DQU1FUkFfU1VQUE9SVFxcbmRyaXZlcnMvbWVkaWEvS2NvbmZpZy02OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMyOjU5Ljk4NjYxMjEwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA0Nzk0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDaGVja2luZyBmb3IgQ2FtZXJhIFN1cHBvcnQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbDogaXMgY2FtZXJhIHN1cHBvcnQgZXZlbiBlbmFibGVkIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgY29uZmlndXJhdGlvbj8gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvbWVkaWEvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBtZWRpYSBkZXZpY2VzIGFyZSBkZWZpbmVkLiBTbywgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBmaWxlIGFuZCBzZWUgaWYgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkIGV4aXN0cyBhbmQgd2hhdCBpdHMgc3RhdHVzIGlzLiBUaGlzIHdpbGwgZGljdGF0ZSB3aGV0aGVyIEkgbmVlZCB0byBib3RoZXIgbG9va2luZyBmdXJ0aGVyIGludG8gY2FtZXJhLXJlbGF0ZWQgY29kZSBhdCBhbGwsIG9yIGlmIHRoaXMgd2hvbGUgYXJlYSBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZCBmb3IgdGhpcyBidWlsZC4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjA0Ljk5MTQxMDMzMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAgSWYgdW5zdXJlIHNheSBZLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRtZW51IFxcXCJNZWRpYSBkZXZpY2UgdHlwZXNcXFwiXFxuICA2MzpcXHRcXG4gIDY0OlxcdCNcXG4gIDY1OlxcdCMgTXVsdGltZWRpYSBzdXBwb3J0IC0gYXV0b21hdGljYWxseSBlbmFibGUgVjRMMiBhbmQgRFZCIGNvcmVcXG4gIDY2OlxcdCNcXG4gIDY3OlxcdGNvbmZpZyBNRURJQV9DQU1FUkFfU1VQUE9SVFxcbiAgNjg6XFx0XFx0Ym9vbFxcbiAgNjk6XFx0XFx0cHJvbXB0IFxcXCJDYW1lcmFzIGFuZCB2aWRlbyBncmFiYmVyc1xcXCIgaWYgTUVESUFfU1VQUE9SVF9GSUxURVJcXG4gIDcwOlxcdFxcdGRlZmF1bHQgeSBpZiAhTUVESUFfU1VQUE9SVF9GSUxURVJcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHdlYmNhbXMgYW5kIHZpZGVvIGdyYWJiZXJzLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIFNheSBZIHdoZW4geW91IGhhdmUgYSB3ZWJjYW0gb3IgYSB2aWRlbyBjYXB0dXJlIGdyYWJiZXIgYm9hcmQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVFxcbiAgNzc6XFx0XFx0Ym9vbFxcbiAgNzg6XFx0XFx0cHJvbXB0IFxcXCJBbmFsb2cgVFZcXFwiIGlmIE1FRElBX1NVUFBPUlRfRklMVEVSXFxuICA3OTpcXHRcXHRkZWZhdWx0IHkgaWYgIU1FRElBX1NVUFBPUlRfRklMVEVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjA0Ljk5MTU1MjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODA2MjM0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFVTQlRWIFN1cHBvcnQgd2l0aGluIHRoZSBLZXJuZWwgTWVkaWEgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIGNsZWFyIHRoYXQgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCBpcyBhIHJlcXVpcmVtZW50LiBOb3csIGhvbGQgb24sIEkgc2VlIGBNRURJQV9BTkFMT0dfVFZfU1VQUE9SVGAgbWVudGlvbmVkLCBhbmQgdGhhdCdzIGdvdCBtZSB0aGlua2luZy4gVGhlIGB1c2J0dmAgZHJpdmVyIGlzIGRlc2NyaWJlZCBhcyBcIlVTQlRWMDA3IHZpZGVvIGNhcHR1cmUgc3VwcG9ydCxcIiBhbmQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGxvZ2ljYWxseSBmYWxscyB1bmRlciB0aGUgY2FtZXJhIHN1cHBvcnQgdW1icmVsbGEuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBBaCwgaGVyZSB3ZSBnbywgbGluZSAxMyBhbmQgb253YXJkIHRlbGxzIHRoZSB0YWxlOlxuXG5gYGBcbmlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXG4gICAgY29tbWVudCBcIldlYmNhbSBkZXZpY2VzXCJcblxuICAgIHNvdXJjZSBcImRyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL0tjb25maWdcIlxuICAgIHNvdXJjZSBcImRyaXZlcnMvbWVkaWEvdXNiL3B3Yy9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi9zMjI1NS9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi91dmMvS2NvbmZpZ1wiXG4gICAgc291cmNlIFwiZHJpdmVycy9tZWRpYS91c2IvenIzNjR4eC9LY29uZmlnXCJcbiAgICBzb3VyY2UgXCJkcml2ZXJzL21lZGlhL3VzYi9zdGt3ZWJjYW0vS2NvbmZpZ1wiXG4gICAgc291cmNlIFwiZHJpdmVycy9tZWRpYS91c2IvY3BpYTIvS2NvbmZpZ1wiXG5lbmRpZlxuYGBgXG5cbkJpbmdvISBgdXNidHZgIGlzIGV4cGxpY2l0bHkgKmluc2lkZSogdGhhdCBgaWYgTUVESUFfQ0FNRVJBX1NVUFBPUlRgIGJsb2NrLiBTbywgdGhlcmUgaXQgaXMg4oCTIFVTQlRWIHN1cHBvcnQgaXMgaW5kZWVkIGNvbnRpbmdlbnQgb24gYE1FRElBX0NBTUVSQV9TVVBQT1JUYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZyYW1ld29yayBpcyBzdHJ1Y3R1cmVkLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggbXkgdGFzaywga25vd2luZyB0aGF0IGRlcGVuZGVuY3kgaXMgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozMzoyNS43OTc3OTA3NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXG4gIDExOlxcdGlmIE1FRElBX1VTQl9TVVBQT1JUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIE1FRElBX0NBTUVSQV9TVVBQT1JUXFxuICAxNDpcXHRcXHRjb21tZW50IFxcXCJXZWJjYW0gZGV2aWNlc1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnXFxcIlxcbiAgMTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL21lZGlhL3VzYi9wd2MvS2NvbmZpZ1xcXCJcXG4gIDE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvczIyNTUvS2NvbmZpZ1xcXCJcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ1xcXCJcXG4gIDIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvdXZjL0tjb25maWdcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdGVuZGlmXFxuICAyMzpcXHRcXG4gIDI0OlxcdGlmIE1FRElBX0FOQUxPR19UVl9TVVBQT1JUXFxuICAyNTpcXHRcXHRjb21tZW50IFxcXCJBbmFsb2cgVFYgVVNCIGRldmljZXNcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9tZWRpYS91c2IvZ283MDA3L0tjb25maWdcXFwiXFxuICAyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWVkaWEvdXNiL2hkcHZyL0tjb25maWdcXFwiXFxuICAyOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MjUuNzk3ODU1ODQyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQ4MDEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0JUViBEcml2ZXIncyBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBjb25maXJtaW5nIGl0J3Mgb25seSBpbmNsdWRlZCB3aGVuIGBNRURJQV9DQU1FUkFfU1VQUE9SVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGxvb2tzIGxpa2U6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIHNwZWNpZmljYWxseSBgVklERU9fVVNCVFZgLiBJIHJlY2FsbCB0aGF0IGBWSURFT19VU0JUVmAgaXRzZWxmIGRlcGVuZHMgb24gYFZJREVPX0RFVmAgYW5kIGBTTkRgLiBGb3J0dW5hdGVseSwgYFZJREVPX0RFVmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgIGlzLCBzbyB0aGF0J3MgaGFuZGxlZC4gYFNORGAgaXMgdGhlIHNvdW5kIHN1YnN5c3RlbSwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSB2aWRlbyBkcml2ZXIuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB3aGVyZSB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgc2VlIGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgLiBgdXNidHZfdmlkZW9fZnJlZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgdXNidHZfZGlzY29ubmVjdGAgYW5kIGB1c2J0dl9wcm9iZWAuIEEga2V5IGRldGFpbCBoZXJlIGlzIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIGlzIG5vdCBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIGZvciB0ZWFyaW5nIGRvd24gdGhlIGhhcmR3YXJlLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIGhpZ2gtcGVyZm9ybWFuY2UgcGF0aC4gSG93ZXZlciwgdGhlIHJhY2UgY29uZGl0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgYmV0d2VlbiBgdXNidHZfZGlzY29ubmVjdGAgYW5kIHNvbWV0aGluZyBlbHNlLCBtYXliZSBWNEwyIGlvY3RscyBvciByZWd1bGFyIGZpbGUgb3BlcmF0aW9ucy5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhhdCdzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjMxLjk2MjY2MDkyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzODUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidjRsMl9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVzYnR2LVxcdTAwM2VidWZsb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjg5MTpcXHRtdXRleF9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTg5Mi1cXHRtdXRleF9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldmIycV9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTQ0LVxcdHVzYnR2LVxcdTAwM2V2ZGV2LnF1ZXVlID0gXFx1MDAyNnVzYnR2LVxcdTAwM2V2YjJxO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTQ1OlxcdHVzYnR2LVxcdTAwM2V2ZGV2LmxvY2sgPSBcXHUwMDI2dXNidHYtXFx1MDAzZXY0bDJfbG9jaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk0Ni1cXHR1c2J0di1cXHUwMDNldmRldi5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEUgfFxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz05NjY9dm9pZCB1c2J0dl92aWRlb19mcmVlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3MC1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjk3MTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3Mi1cXHR1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5NzM6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1c2J0di1cXHUwMDNldjRsMl9sb2NrKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTk3NC1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg9ODc9c3RydWN0IHVzYnR2IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LmgtOTUtXFx0c3RydWN0IHZiMl9xdWV1ZSB2YjJxO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2Lmg6OTY6XFx0c3RydWN0IG11dGV4IHY0bDJfbG9jaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oLTk3LVxcdHN0cnVjdCBtdXRleCB2YjJxX2xvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjMyLjAyMzA1MDExOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg0OTU4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJ3MgQ29uY3VycmVuY3kqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AgdGVsbHMgbWUgdGhhdCB0aGUgYHY0bDJfbG9ja2AgaXMgdGhlIHByaW1hcnkgbG9jayBwcm90ZWN0aW5nIHRoZSBWNEwyIGRldmljZS4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhlIFY0TDIgY29yZSB3aWxsIGhhbmRsZSBhY3F1aXJpbmcgdGhpcyBsb2NrIGZvciBhbnkgaW9jdGwgY2FsbHMuIFRoaXMgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGxpZXMgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQgdGhlc2UgVjRMMiBpb2N0bHMuIEkgbmVlZCB0byBkZWVwbHkgc2NydXRpbml6ZSBgdXNidHZfZGlzY29ubmVjdGAgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGVkLiBBbHNvLCBgdXNidHZfcHJvYmVgLCBzaW5jZSBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiwgaXMgYWxzbyBvZiBpbnRlcmVzdC4gQWRkaXRpb25hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgVjRMMiBpb2N0bHMgaW4gYHVzYnR2LXZpZGVvLmNgLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBhdCB0aGUgdGltZSB0aGUgZGV2aWNlIGlzIHVucGx1Z2dlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGVzZSBpb2N0bHMgYXJlIGJlaW5nIHByb3Blcmx5IHN5bmNocm9uaXplZCB3aXRoIHRoZSBkaXNjb25uZWN0IHJvdXRpbmUuIFRoaXMgd2lsbCByZXF1aXJlIGEgY2xvc2UgbG9vayBhdCB0aGUgbG9jayB1c2FnZSB3aXRoaW4gdGhlc2UgaW9jdGwgaGFuZGxlcnMuIExldCBtZSBkaWcgaW50byB0aGF0IGB1c2J0di12aWRlby5jYCBmaWxlIGFuZCBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaW4gdGVybXMgb2YgVjRMMiBpb2N0bCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzYuNzA4MDEwODgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTE5NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2NGwyX2lvY3RsX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02ODg9c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk0LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6Njk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk2LVxcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzYuNzc3MjE2Nzg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTE5OTE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBgdXNidHZfaW9jdGxfb3BzYDpcblxuKipBbmFseXppbmcgYHVzYnR2X2lvY3RsX29wc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGlzIGB1c2J0dl9pb2N0bF9vcHNgIHN0cnVjdHVyZS4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyIHNwYWNlIGFuZCB0aGUgVVNCIFRWIGRyaXZlciBoYXBwZW5zLCByaWdodD8gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGRyaXZlciBkZWZpbmVzIGl0cyBzcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMsIHRoZSBjb21tYW5kcyB1c2Vyc3BhY2UgY2FuIHNlbmQgaXQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIHRvIHNlZSB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDb21tYW5kcyBmb3IgdmlkZW8gY2FwdHVyZToqKiBBcmUgdGhlcmUgYGlvY3RsYCBjb21tYW5kcyB0byBzdGFydCwgc3RvcCwgY29uZmlndXJlIHRoZSB2aWRlbyBzdHJlYW0/IFRoaW5rIHNldHRpbmcgZnJhbWUgcmF0ZXMsIHJlc29sdXRpb25zLCBjb2RlY3M/IFRoYXQncyB0aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgYSBVU0IgVFYgdHVuZXIuXG4qICAgKipBdWRpbyBjb250cm9sPyoqIEhvcGVmdWxseSwgdGhlcmUncyBhIGNvcnJlc3BvbmRpbmcgc2V0IGZvciBhdWRpbyBzZXR0aW5ncyB0b28uIEV2ZW4gaWYgaXQncyBqdXN0IHBhc3NpbmcgaXQgb2ZmIHRvIHRoZSBBTFNBIGxheWVyIGl0J3MgaW1wb3J0YW50IHRvIHNlZSB3aGF0IGlzIHN1cHBvcnRlZC5cbiogICAqKlR1bmluZyBhbmQgQ2hhbm5lbCBjb250cm9sOioqIFRoaXMgaXMgY3J1Y2lhbC4gSG93IGRvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhlIGFjdHVhbCB0dW5pbmcgb2YgdGhlIGhhcmR3YXJlPyBJcyBpdCB1c2luZyBhIHNpbXBsZSBmcmVxdWVuY3kgc2V0dGluZywgb3IgYXJlIHRoZXJlIG1vcmUgYWR2YW5jZWQgQVBJcyBmb3Igc2Nhbm5pbmcgYW5kIG1hbmFnaW5nIGNoYW5uZWxzP1xuKiAgICoqRGVtdXhpbmcgYW5kIERhdGEgSGFuZGxpbmc6KiogSSdtIGN1cmlvdXMgaWYgdGhlIGBpb2N0bGAgb3BzIHJldmVhbCBhbnkgZGV0YWlscyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBNUEVHIHN0cmVhbXMgb3Igb3RoZXIgdHJhbnNwb3J0IHN0cmVhbXMuIElzIGl0IGRvaW5nIGFueSBkZW11eGluZyBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBzZW5kaW5nIHRoZSByYXcgZGF0YSB1cCB0byB1c2Vyc3BhY2U/IFRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHRoZSBkcml2ZXIgZGVzaWduLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSBuZWVkIHRvIGtub3cgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBlcnJvcnMgYW5kIGFueSByZWxldmFudCBlcnJvciBjb2Rlcy5cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdsbCBleHBlY3QgdG8gc2VlIG1lY2hhbmlzbXMgZm9yIHJlc2VydmluZywgcmVsZWFzaW5nLCBhbmQgbWFuYWdpbmcgaGFyZHdhcmUgcmVzb3VyY2VzLlxuKiAgICoqVmVyc2lvbmluZzoqKiBBbHdheXMgd29ydGggYSBwZWVrLiBJZiB0aGVyZSdzIGEgdmVyc2lvbmluZyBzY2hlbWUsIGhvdyBhcmUgdGhleSBoYW5kbGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eT9cblxuVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlc2UgYGlvY3RsYCBvcGVyYXRpb25zIGlzIGdvaW5nIHRvIGJlIHRoZSBrZXkgdG8gZGlzc2VjdGluZyBob3cgdGhpcyBVU0IgVFYgZGV2aWNlIGNvbW11bmljYXRlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NDEuMTY5MjEzNTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTtcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0cmV0dXJuIHVzYnR2X3NlbGVjdF9pbnB1dCh1c2J0diwgaSk7XFxuIDY5MzpcXHR9XFxuIDY5NDpcXHRcXG4gNjk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbiA2OTY6XFx0XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbiA2OTc6XFx0XFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcXG4gNjk4OlxcdFxcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXFxuIDY5OTpcXHRcXHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAwOlxcdFxcdC52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuIDcwMTpcXHRcXHQudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAyOlxcdFxcdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcXG4gNzAzOlxcdFxcdC52aWRpb2Nfc19zdGQgPSB1c2J0dl9zX3N0ZCxcXG4gNzA0OlxcdFxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuIDcwNTpcXHRcXHQudmlkaW9jX3NfaW5wdXQgPSB1c2J0dl9zX2lucHV0LFxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcXG4gNzA4OlxcdFxcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXFxuIDcwOTpcXHRcXHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxcbiA3MTA6XFx0XFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcXG4gNzExOlxcdFxcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxcbiA3MTI6XFx0XFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcXG4gNzEzOlxcdFxcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXFxuIDcxNDpcXHRcXHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXFxuIDcxNTpcXHR9O1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHVzYnR2X2ZvcHMgPSB7XFxuIDcxODpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gNzE5OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NDEuMTY5NDM4MTQyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwOTA1MzM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVVNCVFYgRGV2aWNlIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIGZ1bmN0aW9ucywgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9nX2lucHV0YCwgYW5kIGB1c2J0dl9zX2lucHV0YCwgdGhleSdyZSBkZWZpbml0ZWx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhleSBzZWVtIHRvIGJlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoaXMgVVNCVFYgZGV2aWNlLiBJJ20gYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBkZXZpY2UgaXMgY29udHJvbGxlZCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGtleS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zX2lucHV0YC4gVGhleSBzZWVtIGxpa2UgdGhleSAqbWlnaHQqIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGB1c2J0di1cdTAwM2V1ZGV2YCBvYmplY3QsIHdoaWNoIHdvdWxkIGJlIHJlYWxseSBpbXBvcnRhbnQuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYHVzYnR2X3Nfc3RkYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBhbSBpbmNsdWRpbmcgYWxsIG9mIHRoZSByZWxldmFudCBzeW1ib2xzIGZvciBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg5NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjQ5LjI1OTk3NjM5NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NTgwNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYnR2X3Nfc3RkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTY2Mz1zdGF0aWMgaW50IHVzYnR2X2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjY5LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NjcwOnN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzEte1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTcwMi1cXHQudmlkaW9jX2dfc3RkID0gdXNidHZfZ19zdGQsXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo3MDM6XFx0LnZpZGlvY19zX3N0ZCA9IHVzYnR2X3Nfc3RkLFxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNzA0LVxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjQ5LjcxNDU2MTExOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1NDQyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB1c2J0dl9zX3N0ZGAgU291cmNlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gVGhlIGltbWVkaWF0ZSBpbXB1bHNlIGlzIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGB1c2J0dl9zX3N0ZGAuIEknbSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBrZXkgYXJlYXMgSSdsbCBuZWVkIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIGFzcGVjdHMuIElzIGl0IGEgbW9kdWxhciBkZXNpZ24/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgdG8gaGFuZGxlIHRoZSB2aWRlbyBzdHJlYW0gZGF0YSBhbmQgaXRzIHByb2Nlc3Npbmc/IEFyZSB0aGV5IHVzaW5nIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnM/IEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGZvbGxvd3MgYSBsb2dpY2FsIHN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHRoaXMgY2FuIGJyaW5nIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBzdGFuZGFyZCBhc3BlY3RzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkndmUgaGFuZGxlZCBwb3RlbnRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjUyLjk0MDAwNjMyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0c3RhdGljIGludCB1c2J0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgbm9ybSlcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiA2NzM6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY3NDpcXHRcXG4gNjc1OlxcdFxcdGlmIChub3JtIFxcdTAwMjYgVVNCVFZfVFZfU1REKVxcbiA2NzY6XFx0XFx0XFx0cmV0ID0gdXNidHZfc2VsZWN0X25vcm0odXNidHYsIG5vcm0pO1xcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Nzk6XFx0fVxcbiA2ODA6XFx0XFxuIDY4MTpcXHRzdGF0aWMgaW50IHVzYnR2X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSlcXG4gNjgyOlxcdHtcXG4gNjgzOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2ODQ6XFx0XFx0KmkgPSB1c2J0di1cXHUwMDNlaW5wdXQ7XFxuIDY4NTpcXHRcXHRyZXR1cm4gMDtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RhdGljIGludCB1c2J0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSlcXG4gNjg5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NTIuOTQwMTMxNDk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjU4NTg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVzYnR2X3NlbGVjdF9ub3JtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIFVTQiB2aWRlbyBwaXBlbGluZS4gSXMgaXQgcmVsYXRlZCB0byBzdGFuZGFyZCBzZWxlY3Rpb24g4oCTIE5UU0MsIFBBTCwgU0VDQU0sIG9yIHNvbWUgc3BlY2lmaWMgcmVnaW9uYWwgdmFyaWFudD8gT3IgaXMgaXQgbW9yZSBncmFudWxhciwgZGVhbGluZyB3aXRoIGxpbmUgcmF0ZXMsIGZyYW1lIHJhdGVzLCBhbmQgcGl4ZWwgY2xvY2sgc2V0dGluZ3M/IEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBnb2luZyBhbnkgZGVlcGVyLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBpbmRpY2F0b3JzIOKAkyB2YXJpYWJsZSBuYW1lcyB0aGF0IGhpbnQgYXQgdGhlIHRhcmdldGVkIHN0YW5kYXJkLCBiaXRmaWVsZHMgdGhhdCBtaWdodCBlbmNvZGUgdGhlIHNlbGVjdGlvbiwgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCdzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIGlmIGl0J3Mgb3BlcmF0aW5nIGF0IGEgaGlnaGVyIGxldmVsLCBwb3RlbnRpYWxseSB1c2luZyBzb21lIGFic3RyYWN0aW9uIGxheWVyIGxpa2UgYSBWaWRlbzRMaW51eCAoVjRMKSBkcml2ZXIuXG5cbklmIGl0ICppcyogZGVhbGluZyB3aXRoIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiwgdGltaW5nIGNvbnN0cmFpbnRzLCBhbmQgcG90ZW50aWFsIHNpZGUtZWZmZWN0cy4gQXJlIHRoZXJlIGFueSBrbm93biBlcnJhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHNldHRpbmdzIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmU/IEknbGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gSG93IHJvYnVzdCBpcyB0aGlzIHNlbGVjdGlvbiBtZWNoYW5pc20/IEFyZSB0aGVyZSBmYWxsYmFjayBtZWNoYW5pc21zIGlmIGEgcGFydGljdWxhciBzdGFuZGFyZCBpcyBub3Qgc3VwcG9ydGVkPyBXaGF0IGhhcHBlbnMgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQ/XG5cbkVzc2VudGlhbGx5LCBJJ20gYWltaW5nIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gYXNzZXNzIGhvdyB3ZWxsIGl0J3MgaW50ZWdyYXRlZCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6NTkuMTA1OTkxODU3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NTk1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfc2VsZWN0X25vcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9MTI4PXN0YXRpYyB1aW50MTZfdCB1c2J0dl9ub3JtX3RvXzE2Zl9yZWcodjRsMl9zdGRfaWQgbm9ybSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTQ4LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MTQ5OnN0YXRpYyBpbnQgdXNidHZfc2VsZWN0X25vcm0oc3RydWN0IHVzYnR2ICp1c2J0diwgdjRsMl9zdGRfaWQgbm9ybSlcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTE1MC17XFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTI3ND1zdGF0aWMgaW50IHVzYnR2X3NldHVwX2NhcHR1cmUoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMzQzLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MzQ0OlxcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCB1c2J0di1cXHUwMDNlbm9ybSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0zNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NjcwPXN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTY3NS1cXHRpZiAobm9ybSBcXHUwMDI2IFVTQlRWX1RWX1NURClcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjY3NjpcXHRcXHRyZXQgPSB1c2J0dl9zZWxlY3Rfbm9ybSh1c2J0diwgbm9ybSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02NzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjU5LjIxNzY2MTI4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDU5NTIzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHRoaXMgVVNCIHZpZGVvIHByb2plY3Q6XG5cbioqQW5hbHl6aW5nIHRoZSBgdXNidHZfc2VsZWN0X25vcm1gIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdXNidHZfc2VsZWN0X25vcm1gIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IG5hbWUuIEl0J3Mgb2J2aW91c2x5IHRpZWQgdG8gc2VsZWN0aW5nIHRoZSB2aWRlbyBzdGFuZGFyZCBvciAnbm9ybScgZm9yIGEgVVNCIFRWIGRldmljZSDigJMgTlRTQywgUEFMLCBTRUNBTSwgdGhhdCBraW5kIG9mIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNlbGVjdGlvbj8gSXMgaXQganVzdCBhIGhhcmR3YXJlIHNldHRpbmcsIG9yIGRvZXMgaXQgdHJpZ2dlciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIHBpeGVsIGNsb2NrLCBjb2xvciBzcGFjZSwgb3IgZXZlbiBETUEgc2V0dGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYWZ0ZXIgdGhpcyBwb2ludCwgYW5kIGhvdyBpdCBlZmZlY3RzIHRoaXMgY2hvaWNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcG9zc2libGUgZGVwZW5kZW5jaWVzLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGNvbmRpdGlvbnMgdG8gYmUgYXdhcmUgb2YuLi4gbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMuLi4gb3IgZXZlbiwgd29yc2UsIGEgYnVmZmVyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBrZWVwIHRoZXNlIHRoaW5ncyBpbiBtaW5kLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjA2LjI3NzE5MDQ4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdC8qIFRoZXNlIGFyZSB0aGUgc2VyaWVzIG9mIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGVcXG4gMTUzOlxcdFxcdCAqIGRlY29kZXIgZm9yIGEgc3BlY2lmaWMgc3RhbmRhcmQuXFxuIDE1NDpcXHRcXHQgKiBUaGUgZmlyc3QgMjEgcmVnaXN0ZXIgd3JpdGVzIGFyZSBjb3BpZWQgZnJvbSB0aGVcXG4gMTU1OlxcdFxcdCAqIFNldHRpbmdzXFxcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXFxuIDE1NjpcXHRcXHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXFxuIDE1NzpcXHRcXHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XFxuIDE2MDpcXHRcXHRcXHQvKiBcXFwiQVZQQUxcXFwiIHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xcbiAxNjE6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMDAzLCAweDAwMDQgfSxcXG4gMTYyOlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDAxYSwgMHgwMDY4IH0sXFxuIDE2MzpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMDAsIDB4MDBkMyB9LFxcbiAxNjQ6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTBlLCAweDAwNzIgfSxcXG4gMTY1OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDEwZiwgMHgwMGEyIH0sXFxuIDE2NjpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMTIsIDB4MDBiMCB9LFxcbiAxNjc6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTE1LCAweDAwMTUgfSxcXG4gMTY4OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDExNywgMHgwMDAxIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjA2LjI3NzM1OTc2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTYzOTIyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB1c2J0dl9zZWxlY3Rfbm9ybWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHVzYnR2X3NlbGVjdF9ub3JtYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWUsIHByZXN1bWFibHkgc2VsZWN0cyBhIHZpZGVvIHN0YW5kYXJkLiBCdXQgd2hhdCdzIHJlYWxseSBpbXBvcnRhbnQgaXMgKmhvdyogaXQncyBkb2luZyB0aGlzIHNlbGVjdGlvbi4gVGhlIHRleHQgZXhwbGljaXRseSBwb2ludHMgb3V0IHRoYXQgaXQncyB3cml0aW5nIHRvIHJlZ2lzdGVycywgYW5kIGl0J3MgZG9pbmcgc28gKnZpYSBVU0IqLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24gSSBuZWVkIHRvIG1ha2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaW1wbGllcyBhIGxvdy1sZXZlbCBpbnRlcmFjdGlvbjsgaXQgaXNuJ3QgdXNpbmcgYSBoaWdoLWxldmVsIEFQSSBhYnN0cmFjdGlvbiBmb3IgdGhlIHRhc2suIEl0J3Mgc2VuZGluZyBjb21tYW5kcyBkaXJlY3RseSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgaW50ZXJuYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCByZWdpc3RlciB3cml0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGluZ3MgbGlrZSBiYW5kd2lkdGggdXRpbGl6YXRpb24sIGxhdGVuY3ksIGFuZCBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24vZGVidWdnaW5nIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNDQxMjg2MDM0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM3NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2J0dl9zZXRfcmVnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYz0xNzI9c3RhdGljIGludCB1c2J0dl9hdWRpb19zdGFydChzdHJ1Y3QgdXNidHYgKmNoaXApXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTIxNS1cXHQvKiBzdGFydGluZyB0aGUgc3RyZWFtICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtYXVkaW8uYzoyMTY6XFx0dXNidHZfc2V0X3JlZ3MoY2hpcCwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTIxNy1cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmM9MjMxPXN0YXRpYyBpbnQgdXNidHZfYXVkaW9fc3RvcChzdHJ1Y3QgdXNidHYgKmNoaXApXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jLTI1MC1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1hdWRpby5jOjI1MTpcXHR1c2J0dl9zZXRfcmVncyhjaGlwLCBzZXR1cCwgQVJSQVlfU0laRShzZXR1cCkpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWF1ZGlvLmMtMjUyLVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTQ2LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuYzo0NzppbnQgdXNidHZfc2V0X3JlZ3Moc3RydWN0IHVzYnR2ICp1c2J0diwgY29uc3QgdTE2IHJlZ3NbXVsyXSwgaW50IHNpemUpXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9OTE9c3RhdGljIGludCB1c2J0dl9zZWxlY3RfaW5wdXQoc3RydWN0IHVzYnR2ICp1c2J0diwgaW50IGlucHV0KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0xMTItXFx0Y2FzZSBVU0JUVl9DT01QT1NJVEVfSU5QVVQ6XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoxMTM6XFx0XFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIGNvbXBvc2l0ZSwgQVJSQVlfU0laRShjb21wb3NpdGUpKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTExNC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTExNS1cXHRjYXNlIFVTQlRWX1NWSURFT19JTlBVVDpcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjExNjpcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc3ZpZGVvLCBBUlJBWV9TSVpFKHN2aWRlbykpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMTE3LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz0xNDk9c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNTMtXFx0XFx0aWYgKG5vcm0gXFx1MDAyNiBudHNjX21hc2spXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzoyNTQ6XFx0XFx0XFx0cmV0ID0gdXNidHZfc2V0X3JlZ3ModXNidHYsIG50c2MsIEFSUkFZX1NJWkUobnRzYykpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjU1LVxcdFxcdGVsc2UgaWYgKG5vcm0gXFx1MDAyNiBwYWxfbWFzaylcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1NjpcXHRcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgcGFsLCBBUlJBWV9TSVpFKHBhbCkpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtMjU3LVxcdFxcdGVsc2UgaWYgKG5vcm0gXFx1MDAyNiBWNEwyX1NURF9TRUNBTSlcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjI1ODpcXHRcXHRcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc2VjYW0sIEFSUkFZX1NJWkUoc2VjYW0pKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI1OS1cXHRcXHRlbHNlXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTI2Ny1cXHRcXHR9O1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6MjY4OlxcdFxcdHJldCA9IHVzYnR2X3NldF9yZWdzKHVzYnR2LCBjZmcsIEFSUkFZX1NJWkUoY2ZnKSk7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy0yNjktXFx0fVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz0yNzQ9c3RhdGljIGludCB1c2J0dl9zZXR1cF9jYXB0dXJlKHN0cnVjdCB1c2J0diAqdXNidHYpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTMzOS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jOjM0MDpcXHRyZXQgPSB1c2J0dl9zZXRfcmVncyh1c2J0diwgc2V0dXAsIEFSUkFZX1NJWkUoc2V0dXApKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jLTM0MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaD04Nz1zdHJ1Y3QgdXNidHYge1xcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaC0xMjktXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYuaDoxMzA6aW50IHVzYnR2X3NldF9yZWdzKHN0cnVjdCB1c2J0diAqdXNidHYsIGNvbnN0IHUxNiByZWdzW11bMl0sIGludCBzaXplKTtcXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di5oLTEzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNTA5NjY3MTA3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTQ0NjE2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgdXNidHZfc2V0X3JlZ3NgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGB1c2J0dl9zZXRfcmVnc2AuXCIgWWVwLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBiZWluZyBzZXQuIEl0J3MgdGhlIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgc2V0dXAuIFRoaXMgZnVuY3Rpb24gaXMgYm91bmQgdG8gYmUgdGhlIGtleSB0byBhbGwgdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuIE15IGV4cGVyaWVuY2Ugc2F5cyB0aGF0IHRoaXMgaXMgYSBncmVhdCBwb2ludCB0byBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDoxNi41NjQxMzE5NFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ3OlxcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCk7XFxuICA1MTpcXHRcXHRpbnQgaTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiAgNTQ6XFx0XFx0XFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcXG4gIDU1OlxcdFxcdFxcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldiwgcGlwZSwgVVNCVFZfUkVRVUVTVF9SRUcsXFxuICA1ODpcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuICA1OTpcXHRcXHRcXHRcXHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcXG4gIDYwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIDA7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTYuNTY0MjQ1OTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4NzY2MTIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb24gaW4gdGhlIFVTQlRWIERyaXZlcioqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIEknbSBsb29raW5nIGF0IHRoaXMgYHVzYnR2X3NldF9yZWdzYCBmdW5jdGlvbiwgYW5kIGl0J3MgdXNpbmcgYHVzYnR2LVx1MDAzZXVkZXZgLiBSaWdodCBhd2F5LCB0aGUgYWxhcm0gYmVsbHMgYXJlIGdvaW5nIG9mZiBiZWNhdXNlIGlmIGB1c2J0di1cdTAwM2V1ZGV2YCBpcyBldmVyIGBOVUxMYCwgdGhlbiBjYWxscyBsaWtlIGB1c2Jfc25kY3RybHBpcGVgIGFyZSBnb2luZyB0byB0cmlnZ2VyIGEgY3Jhc2guIEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBgdXNiX3NuZGN0cmxwaXBlYCBpcyBqdXN0IGEgbWFjcm8sIHJpZ2h0PyBJdCBleHBhbmRzIHRvIGEgY2FsY3VsYXRpb24gaW52b2x2aW5nIGBfX2NyZWF0ZV9waXBlYCB3aGljaCBpbiB0dXJuIHRyaWVzIHRvIGFjY2VzcyBgKGRldiktXHUwMDNlZGV2bnVtYC4gSWYgdGhhdCBgZGV2YCBpcyBudWxsLCBpdCdzIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBwbGFpbiBhbmQgc2ltcGxlLlxuXG5TbywgKmRlZmluaXRlbHkqIGEgcHJvYmxlbSBpZiBgdXNidHYtXHUwMDNldWRldmAgaXMgTlVMTCB3aGVuIGB1c2J0dl9zZXRfcmVnc2AgaXMgY2FsbGVkLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBJIHNlZSB0aGUgY29kZSBkZWxpYmVyYXRlbHkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7YCBpbnNpZGUgYSBgbXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AuIEFscmlnaHQsIGdvdCBpdC4gYHVzYnR2X3NldF9yZWdzYCBpcyBjYWxsZWQgZnJvbSBgdXNidHZfc2VsZWN0X25vcm1gLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9zX3N0ZGAuIEFuZCBgdXNidHZfc19zdGRgIGlzIGNhbGxlZCBhcyBhIFY0TDIgaW9jdGwuIFRoZSBWNEwyIGNvcmUsIGJlaW5nIHdoYXQgaXQgaXMsIGF1dG9tYXRpY2FsbHkgZ3JhYnMgdGhlIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGB1c2J0dl9zX3N0ZGAgYmVjYXVzZSBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AuIFRoaXMgc2V0dXAgaXMgZXhwbGljaXRseSBwcmV2ZW50aW5nIGB1c2J0dl9zX3N0ZGAgZnJvbSBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBkaXNjb25uZWN0LlxuXG5CdXQsIGFuZCB0aGlzIGlzIGEgYmlnIGJ1dC4uLmRvZXMgYHVzYnR2X3Nfc3RkYCBpdHNlbGYgKmNoZWNrKiBpZiBgdXNidHYtXHUwMDNldWRldmAgaXMgTlVMTCBiZWZvcmUgaXQgdHJpZXMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdD8gVGhpcyBpcyBjcnVjaWFsLiBJZiBpdCBkb2Vzbid0LCB0aGF0IGxvY2sgaXMgb25seSBwYXJ0aWFsbHkgZWZmZWN0aXZlISBJJ3ZlIGdvdHRhIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGB1c2J0dl9zX3N0ZGAgYW5kIGB1c2J0dl9zZWxlY3Rfbm9ybWAuIEdvdHRhIHNlZSBpZiB0aGVyZSdzIGEgbnVsbCBjaGVjaywgb3IgaWYgdGhleSBqdXN0IGJsaXRoZWx5IGFzc3VtZSB0aGF0IGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsIGFsd2F5cyBiZSB2YWxpZCwgd2hpY2ggZ2l2ZW4gdGhlIHByaW9yIGFzc2lnbm1lbnQsIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjIzLjk1MTkxMTQ2NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0c3RhdGljIGludCB1c2J0dl9zZWxlY3Rfbm9ybShzdHJ1Y3QgdXNidHYgKnVzYnR2LCB2NGwyX3N0ZF9pZCBub3JtKVxcbiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0aW50IHJldDtcXG4gMTUyOlxcdFxcdC8qIFRoZXNlIGFyZSB0aGUgc2VyaWVzIG9mIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGVcXG4gMTUzOlxcdFxcdCAqIGRlY29kZXIgZm9yIGEgc3BlY2lmaWMgc3RhbmRhcmQuXFxuIDE1NDpcXHRcXHQgKiBUaGUgZmlyc3QgMjEgcmVnaXN0ZXIgd3JpdGVzIGFyZSBjb3BpZWQgZnJvbSB0aGVcXG4gMTU1OlxcdFxcdCAqIFNldHRpbmdzXFxcXERlY29kZXJEZWZhdWx0cyByZWdpc3RyeSBrZXlzIHByZXNlbnQgaW4gdGhlIFdpbmRvd3MgZHJpdmVyXFxuIDE1NjpcXHRcXHQgKiAuSU5GIGZpbGUsIGFuZCBjb250cm9sIHZhcmlvdXMgaW1hZ2UgdHVuaW5nIHBhcmFtZXRlcnMgKGNvbG9yXFxuIDE1NzpcXHRcXHQgKiBjb3JyZWN0aW9uLCBzaGFycG5lc3MsIC4uLikuXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdHN0YXRpYyBjb25zdCB1MTYgcGFsW11bMl0gPSB7XFxuIDE2MDpcXHRcXHRcXHQvKiBcXFwiQVZQQUxcXFwiIHR1bmluZyBzZXF1ZW5jZSBmcm9tIC5JTkYgZmlsZSAqL1xcbiAxNjE6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMDAzLCAweDAwMDQgfSxcXG4gMTYyOlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDAxYSwgMHgwMDY4IH0sXFxuIDE2MzpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMDAsIDB4MDBkMyB9LFxcbiAxNjQ6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTBlLCAweDAwNzIgfSxcXG4gMTY1OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDEwZiwgMHgwMGEyIH0sXFxuIDE2NjpcXHRcXHRcXHR7IFVTQlRWX0JBU0UgKyAweDAxMTIsIDB4MDBiMCB9LFxcbiAxNjc6XFx0XFx0XFx0eyBVU0JUVl9CQVNFICsgMHgwMTE1LCAweDAwMTUgfSxcXG4gMTY4OlxcdFxcdFxcdHsgVVNCVFZfQkFTRSArIDB4MDExNywgMHgwMDAxIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjIzLjk1MjA5MDYxNloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA4OTE5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlIGluIGB1c2J0dl9zZXRfcmVnc2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJ20ganVzdCBxdWlja2x5IHRoaW5raW5nLCBpZiB0aGF0IGB1c2J0di1cdTAwM2V1ZGV2YCBwb2ludGVyIGlzIE5VTEwsIGRvZXMgdGhlIGB1c2J0dl9zZXRfcmVnc2AgZnVuY3Rpb24gYWN0dWFsbHkgZG8gYSBjaGVjayBvbiBpdD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBoZXJlLiBUaGlzIGlzIGEgY2xhc3NpYyBhcmVhIGZvciBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyByb2J1c3QuIEJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBgdXNidHZfc2V0X3JlZ3NgIGZ1bmN0aW9uLCBqdXN0IHRvIGJlIHNhZmUuIExldCdzIGdldCBiYWNrIGludG8gdGhlIGNvZGUgYW5kIHJldmlldyBpdHMgbG9naWMgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjI3Ljk2MTAxMzUzMVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ3OlxcdGludCB1c2J0dl9zZXRfcmVncyhzdHJ1Y3QgdXNidHYgKnVzYnR2LCBjb25zdCB1MTYgcmVnc1tdWzJdLCBpbnQgc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXHRpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCk7XFxuICA1MTpcXHRcXHRpbnQgaTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiAgNTQ6XFx0XFx0XFx0dTE2IGluZGV4ID0gcmVnc1tpXVswXTtcXG4gIDU1OlxcdFxcdFxcdHUxNiB2YWx1ZSA9IHJlZ3NbaV1bMV07XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldiwgcGlwZSwgVVNCVFZfUkVRVUVTVF9SRUcsXFxuICA1ODpcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuICA1OTpcXHRcXHRcXHRcXHR2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcXG4gIDYwOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIDA7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MjcuOTYxMTM0NzExWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDA1OTk5OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCVFYgRHJpdmVyJ3MgU3luY2hyb25pemF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVzYnR2YCBkcml2ZXIgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoaXMgZml4LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIldhaXQsIGB1c2J0dl9zZXRfcmVnc2AgZG9lc24ndCBjaGVjayBmb3IgYSBOVUxMIGB1c2J0di1cdTAwM2V1ZGV2YD8hIFRoYXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgdXNiX3NuZGN0cmxwaXBlYCFcIi4gQnV0IHRoZW4gSSByZWFsaXplZCwgaWYgYHVzYnR2LVx1MDAzZXVkZXZgICppcyogTlVMTCwgaG93IGRvZXMgdGhlIHBhdGNoIGFkZHJlc3MgdGhlIHJhY2UgY29uZGl0aW9uP1xuXG5UaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgdjRsMl9sb2NrYC4gSWYgYHVzYnR2LVx1MDAzZXVkZXZgIGlzIHNldCB0byBOVUxMICp1bmRlciogdGhlIHByb3RlY3Rpb24gb2YgYHY0bDJfbG9ja2AsIHRoZW4gYW55IElPQ1RMIHRoYXQgcnVucyBhZnRlciBgdjRsMl9sb2NrYCBpcyByZWxlYXNlZCBzaG91bGQgc2VlIGB1c2J0di1cdTAwM2V1ZGV2ID09IE5VTExgLCBidXQgZXZlbiB0aGVuLCBpdCBzZWVtcyBwcm9ibGVtYXRpYy4uLlxuXG5BaGEhIFRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBWNEwyIGNvcmUgdGhhdCByZWplY3RzIElPQ1RMcy4gSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGNoZWNrIGZvciBgdmlkZW9faXNfcmVnaXN0ZXJlZGAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB3aXRoaW4gdGhlIFY0TDIgY29yZS4gWWVzLCB0aGUgVjRMMiBjb3JlIGNoZWNrcyBgdmlkZW9faXNfcmVnaXN0ZXJlZCgpYCBiZWZvcmUgY2FsbGluZyBJT0NUTHMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuXG5cbmB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnVzYnR2LVx1MDAzZXZkZXYpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VgLiBUaGlzIGNsZWFycyB0aGUgYFY0TDJfRkxfUkVHSVNURVJFRGAgZmxhZy4gQW55IG5ldyBJT0NUTCBpcyByZWplY3RlZCBieSBgdmlkZW9faW9jdGwyYCBvciBgdjRsMl9pb2N0bGAgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC5cblxuQnV0IHdoYXQgYWJvdXQgYW4gSU9DVEwgdGhhdCBpcyBBTFJFQURZIHJ1bm5pbmc/IElmIGFuIElPQ1RMIGlzIGFscmVhZHkgcnVubmluZywgaXQgaG9sZHMgYHY0bDJfbG9ja2AuICBgdXNidHZfdmlkZW9fZnJlZWAgd2lsbCBibG9jayBvbiBgbXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AgdW50aWwgdGhlIElPQ1RMIGZpbmlzaGVzLiBUaGVuIGl0IHdpbGwgc2V0IGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTDtgLiBTbyB0aGUgSU9DVEwgd2lsbCBmaW5pc2ggd2l0aCBgdXNidHYtXHUwMDNldWRldmAgc3RpbGwgdmFsaWQuIEFmdGVyIHRoZSBJT0NUTCBmaW5pc2hlcywgYHVzYnR2X3ZpZGVvX2ZyZWVgIGFjcXVpcmVzIHRoZSBsb2NrLCBzZXRzIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTGAsIGFuZCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgdW5yZWdpc3RlcmVkLCBzbyBubyBuZXcgSU9DVExzIGNhbiBzdGFydC4gVGhlcmVmb3JlIGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsICpuZXZlciogYmUgTlVMTCB3aGlsZSBhbiBJT0NUTCBpcyBydW5uaW5nIVxuXG5UaGF0J3MgaXQhIFRoaXMgcGVyZmVjdGx5IGZpeGVzIHRoZSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBmb3IgYHVzYnR2LVx1MDAzZXVkZXZgLiBUaGUgVVNCIGNvcmUgZnJlZXMgYHVzYnR2LVx1MDAzZXVkZXZgIGFmdGVyIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLiBJZiBgdXNidHZfZGlzY29ubmVjdGAgKmRpZG4ndCogd2FpdCBmb3IgSU9DVExzIHRvIGZpbmlzaCwgYW4gSU9DVEwgY291bGQgYmUgcnVubmluZywgYHVzYnR2X2Rpc2Nvbm5lY3RgIHJldHVybnMsIHRoZSBVU0IgY29yZSBmcmVlcyBgdWRldmAsIGFuZCBCT09NLCBVQUYhIEJ5IGFjcXVpcmluZyBgdjRsMl9sb2NrYCBpbiBgdXNidHZfdmlkZW9fZnJlZWAgKHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB1c2J0dl9kaXNjb25uZWN0YCksIGl0IHdhaXRzIGZvciBhbGwgY3VycmVudGx5IHJ1bm5pbmcgSU9DVExzIHRvIGZpbmlzaC4gQW5kIHNpbmNlIGB2YjJfdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VgIHdhcyBhbHJlYWR5IGNhbGxlZCwgbm8gbmV3IElPQ1RMcyBjYW4gc3RhcnQuIFRoaXMgaXMgYSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBmaXguIEl0IHBlcmZlY3RseSBwcm90ZWN0cyB0aGUgVVNCIGRldmljZS5cblxuU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuLSBgdXNidHZfZGlzY29ubmVjdGBcbi0gYHVzYnR2X3Byb2JlYFxuLSBgdXNidHZfc19zdGRgXG4tIGB1c2J0dl9zX2lucHV0YFxuLSBgdXNidHZfcXVlcnljYXBgXG4tIGB1c2J0dl9lbnVtX2lucHV0YFxuLSBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGBcbi0gYHVzYnR2X2ZtdF92aWRfY2FwYFxuLSBgdXNidHZfZ19zdGRgXG4tIGB1c2J0dl9nX2lucHV0YFxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYHVzYnR2X2lvY3RsX29wc2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MzkuMzY3MTM5MzRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidHZfaW9jdGxfb3BzID0ge1xcbiA2OTY6XFx0XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbiA2OTc6XFx0XFx0LnZpZGlvY19lbnVtX2lucHV0ID0gdXNidHZfZW51bV9pbnB1dCxcXG4gNjk4OlxcdFxcdC52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHVzYnR2X2VudW1fZm10X3ZpZF9jYXAsXFxuIDY5OTpcXHRcXHQudmlkaW9jX2dfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAwOlxcdFxcdC52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuIDcwMTpcXHRcXHQudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB1c2J0dl9mbXRfdmlkX2NhcCxcXG4gNzAyOlxcdFxcdC52aWRpb2NfZ19zdGQgPSB1c2J0dl9nX3N0ZCxcXG4gNzAzOlxcdFxcdC52aWRpb2Nfc19zdGQgPSB1c2J0dl9zX3N0ZCxcXG4gNzA0OlxcdFxcdC52aWRpb2NfZ19pbnB1dCA9IHVzYnR2X2dfaW5wdXQsXFxuIDcwNTpcXHRcXHQudmlkaW9jX3NfaW5wdXQgPSB1c2J0dl9zX2lucHV0LFxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHQudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcyxcXG4gNzA4OlxcdFxcdC52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsXFxuIDcwOTpcXHRcXHQudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5YnVmLFxcbiA3MTA6XFx0XFx0LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcyxcXG4gNzExOlxcdFxcdC52aWRpb2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLFxcbiA3MTI6XFx0XFx0LnZpZGlvY19kcWJ1ZiA9IHZiMl9pb2N0bF9kcWJ1ZixcXG4gNzEzOlxcdFxcdC52aWRpb2Nfc3RyZWFtb24gPSB2YjJfaW9jdGxfc3RyZWFtb24sXFxuIDcxNDpcXHRcXHQudmlkaW9jX3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjM5LjM2NzI5OTk0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzM0Nzg0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVVNCVFYgTW9kdWxlIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhlc2Ugc3ltYm9scy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIFVTQlRWIG1vZHVsZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X2ZtdF92aWRfY2FwYCwgYHVzYnR2X3F1ZXJ5Y2FwYCwgYHVzYnR2X2VudW1faW5wdXRgLCBgdXNidHZfZW51bV9mbXRfdmlkX2NhcGAsIGB1c2J0dl9nX3N0ZGAsIGFuZCBgdXNidHZfZ19pbnB1dGAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBlc3NlbnRpYWwgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlLlxuXG5Ob3csIGEgcXVpY2sgbm90ZSB0byBzZWxmOiBgdXNidHZfcHJvYmVgIGlzIGNsZWFybHkgZGVmaW5lZCB3aXRoaW4gYHVzYnR2LWNvcmUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB0aGUgaW52ZXN0aWdhdGlvbi5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2VhcmNoLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGlvY3RsIG9yIGZpbGUgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBnaXZlbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgY29kZS4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjQ3Ljk0MDc4MTgxMloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0fTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1c2J0dl9mb3BzID0ge1xcbiA3MTg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDcxOTpcXHRcXHQudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsXFxuIDcyMDpcXHRcXHQubW1hcCA9IHZiMl9mb3BfbW1hcCxcXG4gNzIxOlxcdFxcdC5vcGVuID0gdjRsMl9maF9vcGVuLFxcbiA3MjI6XFx0XFx0LnJlbGVhc2UgPSB2YjJfZm9wX3JlbGVhc2UsXFxuIDcyMzpcXHRcXHQucmVhZCA9IHZiMl9mb3BfcmVhZCxcXG4gNzI0OlxcdFxcdC5wb2xsID0gdmIyX2ZvcF9wb2xsLFxcbiA3MjU6XFx0fTtcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0c3RhdGljIGludCB1c2J0dl9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSxcXG4gNzI4OlxcdFxcdHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsXFxuIDcyOTpcXHRcXHR1bnNpZ25lZCBpbnQgKm5wbGFuZXMsIHVuc2lnbmVkIGludCBzaXplc1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7XFxuIDczMjpcXHRcXHR1bnNpZ25lZCBzaXplID0gVVNCVFZfQ0hVTksgKiB1c2J0di1cXHUwMDNlbl9jaHVua3MgKiAyICogc2l6ZW9mKHUzMik7XFxuIDczMzpcXHRcXHR1bnNpZ25lZCBpbnQgcV9udW1fYnVmcyA9IHZiMl9nZXRfbnVtX2J1ZmZlcnModnEpO1xcbiA3MzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjQ3Ljk0MDkyNzEwMloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE1MjAyMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlcidzIFY0TDIgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucyBhcmUsIGFzIGV4cGVjdGVkLCB1c2luZyB0aGUgZ2VuZXJpYyBWaWRlbzRMaW51eDIgYW5kIFZpZGVvIEJ1ZmZlciAyIGludGVyZmFjZXMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IHRoZSByZWFsIG1lYXQsIHRoZSB0aGluZ3MgdGhhdCBhcmUgdW5pcXVlIHRvIHRoaXMgc3BlY2lmaWMgYHVzYnR2YCBkZXZpY2UsIGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgaW4gdGhlIHF1ZXVpbmcgb3BlcmF0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGUgZHJpdmVyIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgY29udHJvbHMgdGhlIGRhdGEgZmxvdywgYW5kIGhhbmRsZXMgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBxdWV1aW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBjcml0aWNhbCBwYXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjUyLjI1NjEzMjYyNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MTMxNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZiMl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9Nzc0PXN0YXRpYyB2b2lkIHVzYnR2X3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODEtXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo3ODI6c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy03ODMtXFx0LnF1ZXVlX3NldHVwID0gdXNidHZfcXVldWVfc2V0dXAsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jPTg4ND1pbnQgdXNidHZfdmlkZW9faW5pdChzdHJ1Y3QgdXNidHYgKnVzYnR2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy04OTktXFx0dXNidHYtXFx1MDAzZXZiMnEuYnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB1c2J0dl9idWYpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6OTAwOlxcdHVzYnR2LVxcdTAwM2V2YjJxLm9wcyA9IFxcdTAwMjZ1c2J0dl92YjJfb3BzO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTAxLVxcdHVzYnR2LVxcdTAwM2V2YjJxLm1lbV9vcHMgPSBcXHUwMDI2dmIyX3ZtYWxsb2NfbWVtb3BzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo1Mi44MDAyNjkzNTlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1ODkxNTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGB1c2J0dl92YjJfb3BzYCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGB1c2J0dl92YjJfb3BzYCBzdHJ1Y3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFZpZGVvNExpbnV4MiAoVjRMMikgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGFzcGVjdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGF0YSBmcm9tIHRoZSBVU0IgVFYgZGV2aWNlLCB3aGF0ZXZlciBpdCBtaWdodCBiZSwgZmxvd3MgaW50byB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUg4oCTIHRoZSBgcXVldWVfc2V0dXBgLCBgYnVmX2luaXRgLCBgYnVmX3ByZXBhcmVgLCBgYnVmX3F1ZXVlYCwgYGJ1Zl9yZWxlYXNlYCwgYW5kIHRoZSBvdGhlcnMuIEVhY2ggb25lJ3MgcHVycG9zZSBpcyBjbGVhcjsgYHF1ZXVlX3NldHVwYCBpcyBjcml0aWNhbCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBjb25maWd1cmF0aW9uLiBUaGVuIHRoZXJl4oCZcyBob3cgYnVmZmVycyBhcmUgcHJlcGFyZWQsIHF1ZXVlZCwgYW5kIHJlbGVhc2VkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlciBhbGxvY2F0aW9uLCBtZW1vcnkgbWFwcGluZywgYW5kIHBvdGVudGlhbGx5IERNQSBvcGVyYXRpb25zLiBJJ20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBVU0IgdHJhbnNmZXIsIGNvbnNpZGVyaW5nIGJhbmR3aWR0aCBsaW1pdGF0aW9ucywgYW5kIGlmIHRoZSBkcml2ZXIgZW1wbG95cyBhbnkgY2xldmVyIHRlY2huaXF1ZXMgbGlrZSBzY2F0dGVyL2dhdGhlciBsaXN0cyB0byBtYXhpbWl6ZSBlZmZpY2llbmN5LiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgaG93IHRoaXMgc3RydWN0dXJlIGNvbGxhYm9yYXRlcyB3aXRoIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBWNEwyIHN0YWNrLCBsb29raW5nIGZvciBhbnkgc3VidGxlIGhpbnRzIG9uIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSBpZiB0aGlzIGNvZGUgYWRoZXJlcyB0byBiZXN0IHByYWN0aWNlcyBhbmQgaWYgdGhlcmUncyBhbnkgY2xldmVybmVzcyB0byBhZG1pcmUuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo1OC40NTkxODg4NjVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdH1cXG4gNzgxOlxcdFxcbiA3ODI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHVzYnR2X3ZiMl9vcHMgPSB7XFxuIDc4MzpcXHRcXHQucXVldWVfc2V0dXAgPSB1c2J0dl9xdWV1ZV9zZXR1cCxcXG4gNzg0OlxcdFxcdC5idWZfcXVldWUgPSB1c2J0dl9idWZfcXVldWUsXFxuIDc4NTpcXHRcXHQuc3RhcnRfc3RyZWFtaW5nID0gdXNidHZfc3RhcnRfc3RyZWFtaW5nLFxcbiA3ODY6XFx0XFx0LnN0b3Bfc3RyZWFtaW5nID0gdXNidHZfc3RvcF9zdHJlYW1pbmcsXFxuIDc4NzpcXHR9O1xcbiA3ODg6XFx0XFxuIDc4OTpcXHRzdGF0aWMgaW50IHVzYnR2X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKVxcbiA3OTA6XFx0e1xcbiA3OTE6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IGNvbnRhaW5lcl9vZihjdHJsLVxcdTAwM2VoYW5kbGVyLCBzdHJ1Y3QgdXNidHYsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHJsKTtcXG4gNzkzOlxcdFxcdHU4ICpkYXRhO1xcbiA3OTQ6XFx0XFx0dTE2IGluZGV4LCBzaXplO1xcbiA3OTU6XFx0XFx0aW50IHJldDtcXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZGF0YSA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7XFxuIDc5ODpcXHRcXHRpZiAoIWRhdGEpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NTguNDU5OTMxMjE1WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTY1MTcxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIENvZGUgSG9va3MgZm9yIFVTQiBUViBEZXZpY2UgQ29udHJvbCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBob29rIGludG8gdGhpcyBVU0IgVFYgZHJpdmVyLiBgdXNidHZfcXVldWVfc2V0dXBgLCBgdXNidHZfYnVmX3F1ZXVlYCwgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AsIGFuZCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGFsbCBsb29rIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBmb3IgY29udHJvbGxpbmcgdGhlIGRldmljZSdzIGJlaGF2aW9yLiBXYWl0IGEgc2Vjb25kLCBgdXNidHZfc19jdHJsYC4uLiB0aGF0J3MgYSBWNEwyIGNvbnRyb2wgaGFuZGxlciwgaXNuJ3QgaXQ/IElmIGl0J3MgYSBWNEwyIGNvbnRyb2wgaGFuZGxlciwgaXQncyBsaWtlbHkgdXNpbmcgYHVzYnR2LVx1MDAzZXVkZXZgIHRvIGludGVyZmFjZSB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBkZXZpY2UuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpZiBpdCdzIGNvcnJlY3QsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQncyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAzNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6MDEuNzc2NDUzNzYyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHR7XFxuIDc5MTpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gY29udGFpbmVyX29mKGN0cmwtXFx1MDAzZWhhbmRsZXIsIHN0cnVjdCB1c2J0dixcXG4gNzkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGN0cmwpO1xcbiA3OTM6XFx0XFx0dTggKmRhdGE7XFxuIDc5NDpcXHRcXHR1MTYgaW5kZXgsIHNpemU7XFxuIDc5NTpcXHRcXHRpbnQgcmV0O1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRkYXRhID0ga21hbGxvYygzLCBHRlBfS0VSTkVMKTtcXG4gNzk4OlxcdFxcdGlmICghZGF0YSlcXG4gNzk5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4MDA6XFx0XFxuIDgwMTpcXHRcXHQvKlxcbiA4MDI6XFx0XFx0ICogUmVhZCBpbiB0aGUgY3VycmVudCBicmlnaHRuZXNzL2NvbnRyYXN0IHJlZ2lzdGVycy4gV2UgbmVlZCB0aGVtXFxuIDgwMzpcXHRcXHQgKiBib3RoLCBiZWNhdXNlIHRoZSB2YWx1ZXMgYXJlIGZvciBzb21lIHJlYXNvbiBpbnRlcmxlYXZlZC5cXG4gODA0OlxcdFxcdCAqL1xcbiA4MDU6XFx0XFx0aWYgKGN0cmwtXFx1MDAzZWlkID09IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwgY3RybC1cXHUwMDNlaWQgPT0gVjRMMl9DSURfQ09OVFJBU1QpIHtcXG4gODA2OlxcdFxcdFxcdHJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0di1cXHUwMDNldWRldixcXG4gODA3OlxcdFxcdFxcdFxcdHVzYl9yY3ZjdHJscGlwZSh1c2J0di1cXHUwMDNldWRldiwgMCksIFVTQlRWX0NPTlRST0xfUkVHLFxcbiA4MDg6XFx0XFx0XFx0XFx0VVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuIDgwOTpcXHRcXHRcXHRcXHQwLCBVU0JUVl9CQVNFICsgMHgwMjQ0LCAodm9pZCAqKWRhdGEsIDMsXFxuIDgxMDpcXHRcXHRcXHRcXHRVU0JfQ1RSTF9HRVRfVElNRU9VVCk7XFxuIDgxMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gODEyOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDgxMzpcXHRcXHR9XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdHN3aXRjaCAoY3RybC1cXHUwMDNlaWQpIHtcXG4gODE2OlxcdFxcdGNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzpcXG4gODE3OlxcdFxcdFxcdGluZGV4ID0gVVNCVFZfQkFTRSArIDB4MDI0NDtcXG4gODE4OlxcdFxcdFxcdHNpemUgPSAzO1xcbiA4MTk6XFx0XFx0XFx0ZGF0YVswXSBcXHUwMDI2PSAweGYwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTowMS43NzY2NDA2MDJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxNDIyODYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQlRWIENvbnRyb2wgUGF0aCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgZGlyZWN0bHkgYWNjZXNzZXMgYHVzYnR2LVx1MDAzZXVkZXZgLiBUaGF0J3MgdGhlIGZpcnN0IG9ic2VydmF0aW9uLiBOb3csIGxldCdzIGJhY2sgdXAgYSBiaXQuIFJpZ2h0LCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIGJ5IHRoZSBWNEwyIGNvcmUsIHNwZWNpZmljYWxseSB3aGVuIGEgY29udHJvbCBzZXR0aW5nIGlzIHRyaWdnZXJlZC4gQSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXAgaW1tZWRpYXRlbHk6IGRvZXMgdGhlIFY0TDIgY29yZSBob2xkIHRoZSBgdjRsMl9sb2NrYCB3aGVuIGl0IGNhbGxzIGB1c2J0dl9zX2N0cmxgPyBXZSAqbmVlZCogdG8ga25vdyB0aGlzIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQsIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGB1c2J0dl92aWRlb19pbml0YCwgdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSBjb250cm9scyBhcmUgcmVnaXN0ZXJlZC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNsdWUgYWJvdXQgdGhlIGxvY2tpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEwLjE5MDg3MzM4MVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NzQ0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidjRsMl9jdHJsX2hhbmRsZXJfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz04ODQ9aW50IHVzYnR2X3ZpZGVvX2luaXQoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTEwLVxcdC8qIGNvbnRyb2xzICovXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo5MTE6XFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIDQpO1xcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtOTEyLVxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNToxMC4yNjU4NTQ3MzNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NzI2OTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdXNidHZfdmlkZW9faW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGNvZGUncyBzdHJ1Y3R1cmUgYW5kIG15IHByaW9yIGV4cGVyaWVuY2Ugd2l0aCBVU0IgdmlkZW8gY2FwdHVyZSBkcml2ZXJzLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgdXNidHZfdmlkZW9faW5pdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MTAuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpZGVvIGNhcHR1cmUgcGlwZWxpbmUgYmVnaW5zLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZGV2aWNlIGVudW1lcmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIChsaWtlIGZyYW1lIGJ1ZmZlcnMsIERNQSBjaGFubmVscyBpZiBpdCdzIHRoYXQga2luZCBvZiBhcmNoaXRlY3R1cmUpLCBhbmQgcG9zc2libHkgc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBVU0IgdHJhbnNmZXIgZGVzY3JpcHRvcnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZHJpdmVyIHNldHRpbmcgdXAgaXRzIGVuZHBvaW50cyBhbmQgbmVnb3RpYXRpbmcgdGhlIHZpZGVvIGZvcm1hdCBzZXR0aW5ncyB3aXRoIHRoZSBkZXZpY2UuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBkcml2ZXIgd2lsbCBiZWNvbWUgYXBwYXJlbnQuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBhbnkgVjRMMiBzdWJzeXN0ZW1zIGl0IG1pZ2h0IGJlIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMwOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEzLjgxMzEyNzgzN1oiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0dXNidHYtXFx1MDAzZXZiMnEub3BzID0gXFx1MDAyNnVzYnR2X3ZiMl9vcHM7XFxuIDkwMTpcXHRcXHR1c2J0di1cXHUwMDNldmIycS5tZW1fb3BzID0gXFx1MDAyNnZiMl92bWFsbG9jX21lbW9wcztcXG4gOTAyOlxcdFxcdHVzYnR2LVxcdTAwM2V2YjJxLnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQztcXG4gOTAzOlxcdFxcdHVzYnR2LVxcdTAwM2V2YjJxLmxvY2sgPSBcXHUwMDI2dXNidHYtXFx1MDAzZXZiMnFfbG9jaztcXG4gOTA0OlxcdFxcdHJldCA9IHZiMl9xdWV1ZV9pbml0KFxcdTAwMjZ1c2J0di1cXHUwMDNldmIycSk7XFxuIDkwNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA5MDY6XFx0XFx0XFx0ZGV2X3dhcm4odXNidHYtXFx1MDAzZWRldiwgXFxcIkNvdWxkIG5vdCBpbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZVxcXFxuXFxcIik7XFxuIDkwNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5MDg6XFx0XFx0fVxcbiA5MDk6XFx0XFxuIDkxMDpcXHRcXHQvKiBjb250cm9scyAqL1xcbiA5MTE6XFx0XFx0djRsMl9jdHJsX2hhbmRsZXJfaW5pdChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIDQpO1xcbiA5MTI6XFx0XFx0djRsMl9jdHJsX25ld19zdGQoXFx1MDAyNnVzYnR2LVxcdTAwM2VjdHJsLCBcXHUwMDI2dXNidHZfY3RybF9vcHMsXFxuIDkxMzpcXHRcXHRcXHRcXHRWNEwyX0NJRF9DT05UUkFTVCwgMCwgMHgzZmYsIDEsIDB4MWQwKTtcXG4gOTE0OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTU6XFx0XFx0XFx0XFx0VjRMMl9DSURfQlJJR0hUTkVTUywgMCwgMHgzZmYsIDEsIDB4MWMwKTtcXG4gOTE2OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTc6XFx0XFx0XFx0XFx0VjRMMl9DSURfU0FUVVJBVElPTiwgMCwgMHgzZmYsIDEsIDB4MjAwKTtcXG4gOTE4OlxcdFxcdHY0bDJfY3RybF9uZXdfc3RkKFxcdTAwMjZ1c2J0di1cXHUwMDNlY3RybCwgXFx1MDAyNnVzYnR2X2N0cmxfb3BzLFxcbiA5MTk6XFx0XFx0XFx0XFx0VjRMMl9DSURfSFVFLCAtMHhkZmYsIDB4ZGZmLCAxLCAweDAwMCk7XFxuIDkyMDpcXHRcXHR2NGwyX2N0cmxfbmV3X3N0ZChcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmwsIFxcdTAwMjZ1c2J0dl9jdHJsX29wcyxcXG4gOTIxOlxcdFxcdFxcdFxcdFY0TDJfQ0lEX1NIQVJQTkVTUywgMHgwLCAweGZmLCAxLCAweDYwKTtcXG4gOTIyOlxcdFxcdHJldCA9IHVzYnR2LVxcdTAwM2VjdHJsLmVycm9yO1xcbiA5MjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gOTI0OlxcdFxcdFxcdGRldl93YXJuKHVzYnR2LVxcdTAwM2VkZXYsIFxcXCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xcXFxuXFxcIik7XFxuIDkyNTpcXHRcXHRcXHRnb3RvIGN0cmxfZmFpbDtcXG4gOTI2OlxcdFxcdH1cXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0LyogdjRsMiBzdHJ1Y3R1cmUgKi9cXG4gOTI5OlxcdFxcdHVzYnR2LVxcdTAwM2V2NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSBcXHUwMDI2dXNidHYtXFx1MDAzZWN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjEzLjgxMzI2NzQ2N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDAwNDM5NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVU0JUViBMb2NraW5nIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVU0JUViBkcml2ZXIncyBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBgdXNidHYtXHUwMDNlY3RybC5sb2NrYCBub3QgYmVpbmcgc2V0LCBpbXBseWluZyB0aGUgZHJpdmVyIG1pZ2h0IHJlbHkgb24gYW4gaW50ZXJuYWwgbG9jaywgcmlnaHQ/IEJ1dCB0aGVuIEkgbm90aWNlZCBgdXNidHZfc19jdHJsYCBpcyBpbnZva2VkIHdoZW4gYFZJRElPQ19TX0NUUkxgIG9yIGBWSURJT0NfU19FWFRfQ1RSTFNgIGlzIGNhbGxlZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGB2NGwyX2lvY3RsYCBob2xkIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGBWSURJT0NfU19DVFJMYD8gQWhhLCB5ZXMhIGB1c2J0di1cdTAwM2V2ZGV2LmxvY2sgPSBcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2s7YCBjb25maXJtcyB0aGF0IGB2aWRlb19pb2N0bDJgIHdpbGwgaW5kZWVkIGFjcXVpcmUgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AgYmVmb3JlIGRpc3BhdGNoaW5nICphbnkqIGlvY3RsLCBpbmNsdWRpbmcgYFZJRElPQ19TX0NUUkxgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2NrIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBMZXQncyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHY0bDJfY3RybF9oYW5kbGVyX3NldHVwYCBpcyBjYWxsZWQgZnJvbSBgdXNidHZfdmlkZW9faW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHVzYnR2X3Byb2JlYC4gU28gYHVzYnR2X3NfY3RybGAgaXMgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIHdoZW4gY2FsbGVkIHZpYSBpb2N0bC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cGAgZG9lc24ndCBob2xkIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLCBidXQgaXQncyBjYWxsZWQgZHVyaW5nIHByb2JlLCBzbyB0aGVyZSdzIG5vIHJhY2UuIExvb2tzIGxpa2UgYHVzYnR2X3NfY3RybGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIGFzc2Vzc2luZyB0aGlzLlxuXG5Ob3csIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIHJldmlldzogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX2N0cmxgLCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCwgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCwgYHVzYnR2X3F1ZXVlX3NldHVwYCwgYW5kIGB1c2J0dl9idWZfcXVldWVgLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgYXJlIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldmIycV9sb2NrYCwgbm90IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBPa2F5LCBsZXQncyByZXZpc2l0IGB1c2J0dl92aWRlb19pbml0YC4gIFllcywgYHVzYnR2LVx1MDAzZXZiMnEubG9jayA9IFx1MDAyNnVzYnR2LVx1MDAzZXZiMnFfbG9jaztgLiBUaGVyZWZvcmUgYHZiMl9pb2N0bF9zdHJlYW1vbmAgd2lsbCBhY3F1aXJlIGB1c2J0di1cdTAwM2V2YjJxX2xvY2tgLiBUaGlzIGlzIGltcG9ydGFudCB0byB2ZXJpZnkgY29ycmVjdCBsb2NrIHVzYWdlIGluIHRoZSBzdHJlYW1pbmcgcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBpcyB1c2luZyBgdXNidHYtXHUwMDNldWRldmAgZm9yIGFueSBwdXJwb3NlLCB0aGlzIG1pZ2h0IGJlIGEgcG9pbnQgb2YgY29uZmxpY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzMwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6MjEuODEzNzA5MTY5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc0MDpcXHRcXHRzaXplc1swXSA9IHNpemU7XFxuIDc0MTpcXHRcXG4gNzQyOlxcdFxcdHJldHVybiAwO1xcbiA3NDM6XFx0fVxcbiA3NDQ6XFx0XFxuIDc0NTpcXHRzdGF0aWMgdm9pZCB1c2J0dl9idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKVxcbiA3NDY6XFx0e1xcbiA3NDc6XFx0XFx0c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7XFxuIDc0ODpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi1cXHUwMDNldmIyX3F1ZXVlKTtcXG4gNzQ5OlxcdFxcdHN0cnVjdCB1c2J0dl9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1Y3QgdXNidHZfYnVmLCB2Yik7XFxuIDc1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRpZiAodXNidHYtXFx1MDAzZXVkZXYgPT0gTlVMTCkge1xcbiA3NTM6XFx0XFx0XFx0dmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTtcXG4gNzU0OlxcdFxcdFxcdHJldHVybjtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnVzYnR2LVxcdTAwM2VidWZsb2NrLCBmbGFncyk7XFxuIDc1ODpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZidWYtXFx1MDAzZWxpc3QsIFxcdTAwMjZ1c2J0di1cXHUwMDNlYnVmcyk7XFxuIDc1OTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ1c2J0di1cXHUwMDNlYnVmbG9jaywgZmxhZ3MpO1xcbiA3NjA6XFx0fVxcbiA3NjE6XFx0XFxuIDc2MjpcXHRzdGF0aWMgaW50IHVzYnR2X3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNvdW50KVxcbiA3NjM6XFx0e1xcbiA3NjQ6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAodXNidHYtXFx1MDAzZXVkZXYgPT0gTlVMTClcXG4gNzY3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHR1c2J0di1cXHUwMDNlbGFzdF9vZGQgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNToyMS44MTM4MTQ5NTlaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MDMwNjIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQlRWIERyaXZlcidzIExvY2tpbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21lIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYXJvdW5kIHRoZSBgdXNidHYtXHUwMDNldWRldmAgcG9pbnRlci4gIFRoZSBmdW5jdGlvbnMgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2AgYW5kIGB1c2J0dl9idWZfcXVldWVgIGFyZSBjaGVja2luZyBpZiBgdXNidHYtXHUwMDNldWRldiA9PSBOVUxMYC4gTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiVWggb2gsIGlzIHRoaXMgcHJvcGVybHkgc3luY2hyb25pemVkP1wiIE15IGluaXRpYWwgY29uY2VybiB3YXMgdGhhdCB0aGUgY2hlY2sgd2FzIG9ubHkgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2YjJxX2xvY2tgLCBub3QgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYHVzYnR2X3ZpZGVvX2ZyZWVgIHNldHMgYHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMYCB1bmRlciB0aGUgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AsIHdoaWNoIHJhaXNlZCB0aGUgcXVlc3Rpb24gaWYgdGhlcmUncyBhIHJhY2Ugd2l0aCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYC4gVGhlbiBJIHRob3VnaHQgaXQgdGhyb3VnaC4uLiBMZXQncyBzZWU6IGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgIGdldHMgY2FsbGVkIGJ5IGB2YjJfaW9jdGxfc3RyZWFtb25gLiBPa2F5LCBgdmIyX2lvY3RsX3N0cmVhbW9uYCBpcyBhbiBpb2N0bC4gQWgsIGFuZCBgdXNidHYtXHUwMDNldmRldi5sb2NrID0gXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrO2AuIFNvLCBgdmlkZW9faW9jdGwyYCBpcyBnb2luZyB0byBhY3F1aXJlIGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgIGJlZm9yZSBjYWxsaW5nIGB2YjJfaW9jdGxfc3RyZWFtb25gLCBhbmQgVEhFTiwgYHZiMl9pb2N0bF9zdHJlYW1vbmAgd291bGQgYWNxdWlyZSBgdXNidHYtXHUwMDNldmIycV9sb2NrYC4gU28sIGFjdHVhbGx5LCBgdXNidHZfc3RhcnRfc3RyZWFtaW5nYCBJUyBwcm90ZWN0ZWQgYnkgYHVzYnR2LVx1MDAzZXY0bDJfbG9ja2AuXG5cbk9rYXksIGJ1dCB3aGF0IGFib3V0IGB1c2J0dl9idWZfcXVldWVgPyBJdCdzIGNhbGxlZCBieSBgdmIyX2lvY3RsX3FidWZgLiBTaW5jZSBgdmIyX2lvY3RsX3FidWZgIGlzIGFsc28gYW4gaW9jdGwsIHRoYXQgbWVhbnMgaXQncyBhbHNvIHByb3RlY3RlZCBieSBgdXNidHYtXHUwMDNldjRsMl9sb2NrYCEgVGhhdCdzIGdvb2QuXG5cblNvLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0bHkgc3luY2hyb25pemVzIHRoZSB1c2FnZSBvZiBgdXNidHYtXHUwMDNldWRldmAsIGVuc3VyaW5nIGl0J3Mgbm90IGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGZyZWVkIGluIGlvY3RsIGNhbGxzLiBUaGF0J3MgYSByZWxpZWYuIEl0J3MgcHJvcGVybHkgbG9ja2VkLlxuXG5Ob3csIHdhaXQuLi4gV2hhdCBhYm91dCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGFuZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggYWxsIG9mIHRoZXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAxNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjI4LjQ4NDEyNTQ2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHR1c2J0di1cXHUwMDNlc2VxdWVuY2UgPSAwO1xcbiA3NzE6XFx0XFx0cmV0dXJuIHVzYnR2X3N0YXJ0KHVzYnR2KTtcXG4gNzcyOlxcdH1cXG4gNzczOlxcdFxcbiA3NzQ6XFx0c3RhdGljIHZvaWQgdXNidHZfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpXFxuIDc3NTpcXHR7XFxuIDc3NjpcXHRcXHRzdHJ1Y3QgdXNidHYgKnVzYnR2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdGlmICh1c2J0di1cXHUwMDNldWRldilcXG4gNzc5OlxcdFxcdFxcdHVzYnR2X3N0b3AodXNidHYpO1xcbiA3ODA6XFx0fVxcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgdXNidHZfdmIyX29wcyA9IHtcXG4gNzgzOlxcdFxcdC5xdWV1ZV9zZXR1cCA9IHVzYnR2X3F1ZXVlX3NldHVwLFxcbiA3ODQ6XFx0XFx0LmJ1Zl9xdWV1ZSA9IHVzYnR2X2J1Zl9xdWV1ZSxcXG4gNzg1OlxcdFxcdC5zdGFydF9zdHJlYW1pbmcgPSB1c2J0dl9zdGFydF9zdHJlYW1pbmcsXFxuIDc4NjpcXHRcXHQuc3RvcF9zdHJlYW1pbmcgPSB1c2J0dl9zdG9wX3N0cmVhbWluZyxcXG4gNzg3OlxcdH07XFxuIDc4ODpcXHRcXG4gNzg5OlxcdHN0YXRpYyBpbnQgdXNidHZfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjI4LjQ4NDI3NzYxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTg3MTM4NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiB0aGUgVVNCVFYgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB1c2J0dmAgZHJpdmVyIGFuZCBoYXZlIGlkZW50aWZpZWQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuIEl0IHNlZW1zIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AgY2hlY2tzIGB1c2J0di1cdTAwM2V1ZGV2YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VkIGEgcmVkIGZsYWcuIEkga25vdyBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGlzIGNhbGxlZCB2aWEgYHZiMl9pb2N0bF9zdHJlYW1vZmZgLCB3aGljaCBpcyBhbiBpb2N0bCwgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IGB1c2J0di1cdTAwM2V2NGwyX2xvY2tgLiBIb3dldmVyLCBpdCdzIGFsc28gY2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRocm91Z2ggYHZiMl9mb3BfcmVsZWFzZWAgd2hpY2ggZ29lcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGZ1bmN0aW9uIGNhbGxzOiBgdmIyX2ZvcF9yZWxlYXNlYCAtXHUwMDNlIGB2YjJfY29yZV9xdWV1ZV9yZWxlYXNlYCAtXHUwMDNlIGBfX3ZiMl9xdWV1ZV9jYW5jZWxgIC1cdTAwM2UgYHN0b3Bfc3RyZWFtaW5nYC5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIGB2YjJfZm9wX3JlbGVhc2VgIGl0c2VsZiBob2xkcyBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gIEl0ICpkb2VzKiBhY3F1aXJlIGB2cS1cdTAwM2Vsb2NrYCB3aGljaCBpcyBgdXNidHYtXHUwMDNldmIycV9sb2NrYCwgYnV0IG5vdCBgdmRldi1cdTAwM2Vsb2NrYCB3aGljaCBpcyBgdXNidHYtXHUwMDNldjRsMl9sb2NrYC4gVGhpcyBpcyBhIHByb2JsZW0hICBUaGUgYHY0bDJfZmhfcmVsZWFzZWAgb3IgYHZiMl9mb3BfcmVsZWFzZWAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBob2xkIHRoZSBgdjRsMl9sb2NrYC5cblxuSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHZiMl9mb3BfcmVsZWFzZWAgZG9lc24ndCBrbm93IGFib3V0IGB2ZGV2LVx1MDAzZWxvY2tgIGluIGBkcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuY2AgYW5kIGZvdW5kIHRoYXQgaXQgY2FsbHMgYG11dGV4X2xvY2sodnEtXHUwMDNlbG9jaylgICggYHVzYnR2LVx1MDAzZXZiMnFfbG9ja2ApLiAgU2luY2UgYHVzYnR2X2ZvcHMucmVsZWFzZWAgaXMgc2V0IHRvIGB2YjJfZm9wX3JlbGVhc2VgLCB0aGlzIGNvbmZpcm1zIG15IHdvcnJ5IHRoYXQgYHVzYnR2X3N0b3Bfc3RyZWFtaW5nYCBtaWdodCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggYHVzYnR2X2Rpc2Nvbm5lY3RgLlxuXG5UaGUgcG90ZW50aWFsIHJhY2UgaXMgdGhhdCBgdXNidHZfZGlzY29ubmVjdGAgY291bGQgc2V0IGB1c2J0di1cdTAwM2V1ZGV2YCB0byBgTlVMTGAgdW5kZXIgYHY0bDJfbG9ja2AsIHdoaWxlIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agb25seSBob2xkcyBgdmIycV9sb2NrYC4gIElmIHRoaXMgaGFwcGVucywgdGhlIGNoZWNrIGBpZiAodXNidHYtXHUwMDNldWRldilgIGluIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2Agd291bGQgYmUgdnVsbmVyYWJsZSwgYmVjYXVzZSBpdCBpcyBub3QgcHJvdGVjdGVkIGJ5IGB2NGwyX2xvY2tgLlxuXG5Ob3csIGlmIGB1c2J0dl9kaXNjb25uZWN0YCBmcmVlcyByZXNvdXJjZXMsIGluY2x1ZGluZyBwb3RlbnRpYWxseSBzZXR0aW5nIGB1c2J0di1cdTAwM2V1ZGV2ID0gTlVMTGAsIGFuZCBhIGZpbGUgZGVzY3JpcHRvciBpcyBzdGlsbCBvcGVuLCBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBjYWxsIGB2YjJfZm9wX3JlbGVhc2VgIGFuZCB0aGVuIGB1c2J0dl9zdG9wX3N0cmVhbWluZ2AuICBJZiB0aGUgY2xvc2UgaGFwcGVucyAqYWZ0ZXIqIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCB0aGVuIGB1c2J0di1cdTAwM2V1ZGV2YCB3aWxsIGJlIGBOVUxMYCwgYW5kIHRoZSBjaGVjayBpbiBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIHdpbGwgYmUgaGl0IGFuZCBlZmZlY3RpdmVseSBwcmV2ZW50IHRoZSBpc3N1ZS4gSG93ZXZlciwgaWYgdGhlIGNsb3NlIGhhcHBlbnMgKmR1cmluZyogYHVzYnR2X2Rpc2Nvbm5lY3RgIHRoZXJlIGlzIGFuIGFjdHVhbCByYWNlIVxuXG5JIHNlZSB0aGF0IGB1c2J0dl92aWRlb19mcmVlYCBjYWxscyBgdmIyX3ZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB2aWRlb191bnJlZ2lzdGVyX2RldmljZWAuIElmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBvcGVuLCBpdCBpcyBwb3NzaWJsZSBmb3IgYHZiMl9mb3BfcmVsZWFzZWAgdG8gYmUgY2FsbGVkICphZnRlciogIGB1c2J0dl9kaXNjb25uZWN0YCByZXR1cm5zLCBhbmQgYXQgdGhhdCBwb2ludCB0aGUgcmFjZSBpcyBhdmVydGVkIGJlY2F1c2UgYHVzYnR2LVx1MDAzZXVkZXZgIHdpbGwgYWxyZWFkeSBiZSBgTlVMTGAuXG5cbkhvd2V2ZXIsIGB1c2J0dl92aWRlb19mcmVlYCBhbHNvIGNhbGxzIGB2NGwyX2RldmljZV9kaXNjb25uZWN0YC4gSSBuZWVkIHRvIGVuc3VyZSBgdXNidHZfc3RvcF9zdHJlYW1pbmdgIGlzIHNhZmUgaW4gYWxsIHRoZXNlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IGFkZHMgYG11dGV4X2xvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTsgdXNidHYtXHUwMDNldWRldiA9IE5VTEw7IG11dGV4X3VubG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO2AgaW5zaWRlIGB1c2J0dl92aWRlb19mcmVlYC4gIFRoaXMgc2hvdWxkIGZpeCB0aGUgcmFjZSBjb25kaXRpb24hICBJIGhhdmUgdG8gbm90ZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBsaXN0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQ6IGBNRURJQV9TVVBQT1JUYCwgYE1FRElBX1VTQl9TVVBQT1JUYCwgYE1FRElBX0NBTUVSQV9TVVBQT1JUYCwgYW5kIGBWSURFT19VU0JUVmAuICBUaGUgYFZJREVPX1VTQlRWYCBjb25maWcgZGVwZW5kcyBvbiBgVklERU9fREVWIFx1MDAyNlx1MDAyNiBTTkRgIHNvIEkgbmVlZCB0byBpbmNsdWRlIGBWSURFT19ERVZgIGFuZCBgU05EYCBqdXN0IHRvIGJlIHNhZmUuICBJJ2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy9tZWRpYS91c2IvdXNidHYvS2NvbmZpZ2AgdG8gY29uZmlybSwgYnV0IEknbSBwcmV0dHkgY2VydGFpbi4gVGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYHVzYnR2X2Rpc2Nvbm5lY3RgLCBgdXNidHZfcHJvYmVgLCBgdXNidHZfc19zdGRgLCBgdXNidHZfc19pbnB1dGAsIGB1c2J0dl9zX1xuXG4iLCJJbnB1dFRva2VucyI6MzAyNTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDMuNjcxNDE4OTA5WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVklERU9fVVNCVFZcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJVU0JUVjAwNyB2aWRlbyBjYXB0dXJlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIFZJREVPX0RFViBcXHUwMDI2XFx1MDAyNiBTTkRcXG4gICA1OlxcdFxcdHNlbGVjdCBTTkRfUENNXFxuICAgNjpcXHRcXHRzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0NcXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgdmlkZW80bGludXgyIGRyaXZlciBmb3IgVVNCVFYwMDcgYmFzZWQgdmlkZW8gY2FwdHVyZSBkZXZpY2VzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidHZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDMuNjcxNTQxNDI5WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzIzMTAxMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBVU0JUViBEcml2ZXIncyBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgVVNCVFYgZHJpdmVyLCBhbmQgaXQgbG9va3MgbGlrZSBpdHMgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gYFZJREVPX0RFVmAgYW5kIGBTTkRgIGJlaW5nIGVuYWJsZWQg4oCTIG1ha2VzIHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cblxuRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1c2J0dl92aWRlb19mcmVlYCBhbmQgYHVzYnR2X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmFjdGluZy4gQWgsIGB1c2J0dl92aWRlb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB1c2J0dl9kaXNjb25uZWN0YCBhbmQsIGNyaXRpY2FsbHksIHRoZSBlcnJvciBwYXRoIHdpdGhpbiBgdXNidHZfcHJvYmVgLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGxvY2sgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbG9ja2luZywgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy4gRG9lcyBgdXNidHZfdmlkZW9fZnJlZWAgaG9sZCB0aGUgYHY0bDJfbG9ja2A/IE9rYXksIEkgc2VlIGl0IGRvZXMgYWNxdWlyZSB0aGUgYHY0bDJfbG9ja2AgaXRzZWxmOyBzbyB0aGUgbXV0ZXggcHJvdGVjdGlvbiBpcyBzb3VuZC4gVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBpdC4gRXhjZWxsZW50LCB0aGF0IHBhcnQgc2VlbXMgcm9idXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4uIExldCdzIGNvbnNpZGVyIHRoZSB2NGwyIG1ldGhvZHMuIEkgc2VlIGB1c2J0dl9xdWVyeWNhcGAsIGB1c2J0dl9lbnVtX2lucHV0YCwgYHVzYnR2X2VudW1fZm10X3ZpZF9jYXBgLCBgdXNidHZfZm10X3ZpZF9jYXBgLCBgdXNidHZfZ19zdGRgLCBhbmQgYHVzYnR2X2dfaW5wdXRgLiBUaGV5IGxvb2sgbGlrZSBzaW1wbGUgZ2V0dGVycywgc28gSSB3b3VsZG4ndCBleHBlY3QgdGhlbSB0byBiZSBwcm9ibGVtYXRpYyB3aXRoIHJlc3BlY3QgdG8gYHVzYnR2LVx1MDAzZXVkZXZgLCBidXQgSSBiZXR0ZXIgY2hlY2suIFdhaXQuLi4gYHVzYnR2X3F1ZXJ5Y2FwYCAqZG9lcyogdXNlIGB1c2J0di1cdTAwM2V1ZGV2YD8gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDk0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NTYuOTk0NjQ2NzFaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcbiA1ODE6XFx0XFx0dXNidHZfYXVkaW9fcmVzdW1lKHVzYnR2KTtcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFVTQlRWX0lTT0NfVFJBTlNGRVJTOyBpKyspIHtcXG4gNTg0OlxcdFxcdFxcdHN0cnVjdCB1cmIgKmlwO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRcXHRpcCA9IHVzYnR2X3NldHVwX2lzb190cmFuc2Zlcih1c2J0dik7XFxuIDU4NzpcXHRcXHRcXHRpZiAoaXAgPT0gTlVMTCkge1xcbiA1ODg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNTg5OlxcdFxcdFxcdFxcdGdvdG8gc3RhcnRfZmFpbDtcXG4gNTkwOlxcdFxcdFxcdH1cXG4gNTkxOlxcdFxcdFxcdHVzYnR2LVxcdTAwM2Vpc29jX3VyYnNbaV0gPSBpcDtcXG4gNTkyOlxcdFxcbiA1OTM6XFx0XFx0XFx0cmV0ID0gdXNiX3N1Ym1pdF91cmIoaXAsIEdGUF9LRVJORUwpO1xcbiA1OTQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDU5NTpcXHRcXHRcXHRcXHRnb3RvIHN0YXJ0X2ZhaWw7XFxuIDU5NjpcXHRcXHR9XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdHJldHVybiAwO1xcbiA1OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjU2Ljk5NDc4MTQyWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODUxMTQ5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYHVzYnR2X3F1ZXJ5Y2FwYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGRpcmVjdGlvbiBpcyBjbGVhcjogbXkgYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIHRvIGB1c2J0dl9xdWVyeWNhcGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBxdWVyeWluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgVVNCIFRWIHR1bmVyIG9yIGNhcHR1cmUgZGV2aWNlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgYSBtZW50YWwgY2hlY2tsaXN0OlxuXG4qICAgKipDb250ZXh0OioqIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgc2l0dWF0aW9uPyBBbSBJIGRlYnVnZ2luZyBhbiBpc3N1ZSB3aXRoIHZpZGVvIGNhcHR1cmUsIHRyeWluZyB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBkZXZpY2UsIG9yIHBlcmhhcHMgYnVpbGRpbmcgYSBuZXcgZHJpdmVyIG9yIGFwcGxpY2F0aW9uIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlc2UgdHlwZXMgb2YgZGV2aWNlcz8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhpcyBxdWVyeSB3b3VsZCBzaGFwZSBteSBhcHByb2FjaC5cbiogICAqKlB1cnBvc2U6KiogV2hhdCBzcGVjaWZpY2FsbHkgYW0gSSB0cnlpbmcgdG8gKmdldCogZnJvbSBgdXNidHZfcXVlcnljYXBgPyBBbSBJIGFmdGVyIHN1cHBvcnRlZCB2aWRlbyBmb3JtYXRzLCByZXNvbHV0aW9ucywgZnJhbWUgcmF0ZXMsIGF1ZGlvIGNvZGVjcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgSSdtIGludGVyZXN0ZWQgaW4gd2lsbCBkcml2ZSB0aGUgc3Vic2VxdWVudCBzdGVwcy5cbiogICAqKkltcGxlbWVudGF0aW9uOioqIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGxpa2VseSBpbXBsZW1lbnRhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIHRoaXMgcHJvYmFibHkgaW52b2x2ZXMgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBvciBpb2N0bCBvcGVyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGEgbGlicmFyeSBmdW5jdGlvbiBmb3IgV2luZG93cyBvciBtYWNPUy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyBBUEkgaXMgY3JpdGljYWwgaGVyZS5cbiogICAqKlRvb2xpbmc6KiogSSdkIGJlIHRoaW5raW5nIGFib3V0IHRoZSB0b29scyBJJ2QgdXNlLiBXb3VsZCBJIG5lZWQgdG8gdXNlIGBzdHJhY2VgIG9yIGEgc2ltaWxhciB0cmFjaW5nIHRvb2wgdG8gc2VlIHRoZSBzeXN0ZW0gY2FsbHMgYmVpbmcgbWFkZT8gUGVyaGFwcyBJJ2Qgc3RhcnQgd2l0aCBhIGJhc2ljIHRlc3QgcHJvZ3JhbSB0byBjYWxsIGB1c2J0dl9xdWVyeWNhcGAgZGlyZWN0bHksIG9yIGRlbHZlIGludG8gZXhpc3RpbmcgY29kZSB0aGF0IGFscmVhZHkgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbi5cbiogICAqKkRvY3VtZW50YXRpb246KiogTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gKGtlcm5lbCBoZWFkZXJzLCB1c2VyLXNwYWNlIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiwgZXRjLikuIElmIEknbSBsdWNreSwgdGhlcmUncyBnb29kIGRvY3VtZW50YXRpb24gdGhhdCBleHBsYWlucyB0aGUgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIHR5cGljYWwgdXNhZ2Ugb2YgYHVzYnR2X3F1ZXJ5Y2FwYC5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0IGlzIGVzc2VudGlhbCB0byByZW1lbWJlciB0aGF0IGV2ZW4gdGhlIG1vc3Qgd2VsbC1iZWhhdmVkIHNvZnR3YXJlIHdpbGwgc29tZXRpbWVzIGZhaWwsIHNvIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgY29ycmVzcG9uZGluZyBlcnJvciBjb2Rlcz9cbiogICAqKlRyb3VibGVzaG9vdGluZzoqKiBJZiBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgc2l0dWF0aW9uLCBhbSBJIHJlY2VpdmluZyB1bmV4cGVjdGVkIHJlc3VsdHM/IFRoaXMgd291bGQgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXAsIGFzIHdlbGwgYXMgd2hlcmUgdG8gYmVnaW4gbXkgaW5zcGVjdGlvbiBvZiB0aGUgY29kZS5cblxuSW4gZXNzZW5jZSwgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5hbWUsIHBsYWNpbmcgaXQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdmlkZW8gY2FwdHVyZS9VU0IgZGV2aWNlcywgYW5kIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBhIHBsYW4gb2YgYXR0YWNrIGZvciBpbnZlc3RpZ2F0aW5nIGl0LiBNeSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhIGFsbG93cyBtZSB0byByYXBpZGx5IGNvbm5lY3QgdGhlIGRvdHMgYW5kIGFudGljaXBhdGUgdGhlIGxpa2VseSBhdmVudWVzIG9mIGlucXVpcnkuIE5vdyBsZXQncyBnZXQgaW50byBpdCwgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MDIuMTc5OTAxMTg0WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE0MDg5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNidHZfcXVlcnljYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM9NTYyPXN0YXRpYyBpbnQgdXNidHZfc3RhcnQoc3RydWN0IHVzYnR2ICp1c2J0dilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjA0LVxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmM6NjA1OnN0YXRpYyBpbnQgdXNidHZfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYy02MDYtXFx0XFx0XFx0XFx0c3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKVxcbi0tXFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYz02OTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J0dl9pb2N0bF9vcHMgPSB7XFxuZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uYzo2OTY6XFx0LnZpZGlvY19xdWVyeWNhcCA9IHVzYnR2X3F1ZXJ5Y2FwLFxcbmRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMtNjk3LVxcdC52aWRpb2NfZW51bV9pbnB1dCA9IHVzYnR2X2VudW1faW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjAyLjYyMTMxNDcwOVoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU4MTI1OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHVzYnR2X3F1ZXJ5Y2FwYCwgcHJlc2VudGVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1c2J0dl9xdWVyeWNhcGAqKlxuXG5BbHJpZ2h0LCBgdXNidHZfcXVlcnljYXBgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgY2x1ZSwgaXNuJ3QgaXQ/IEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBVU0IgdmlkZW8sIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgd2l0aCBxdWVyeWluZyBjYXBhYmlsaXRpZXMuIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyB0aGF0IHRlbGxzIG1lIHdoYXQgYSBjb25uZWN0ZWQgVVNCIFRWIHR1bmVyIChvciBjYXB0dXJlIGRldmljZSwgbW9yZSBicm9hZGx5KSAqY2FuKiBkby4gVGhpcyBpcyBsaWtlbHkgdGhlIGVudHJ5IHBvaW50IHRvIGRpc2NvdmVyIHN1cHBvcnRlZCByZXNvbHV0aW9ucywgZnJhbWUgcmF0ZXMsIHZpZGVvIGZvcm1hdHMsIGF1ZGlvIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIHRoaW5ncyBsaWtlIHN1cHBvcnRlZCBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIGV0Yy4pLiBcblxuU28sIEknbSBhbnRpY2lwYXRpbmcgYSBzdHJ1Y3R1cmVkIGRhdGEgcmV0cmlldmFsLiBJdCdzIHByb2JhYmx5IGdvaW5nIHRvIGludm9sdmUgc2VuZGluZyBzb21lIHNvcnQgb2YgcmVxdWVzdCB0byB0aGUgZGV2aWNlLCBtYXliZSB1c2luZyBhIHNwZWNpZmljIFVTQiBDb250cm9sIFRyYW5zZmVyLCBhbmQgdGhlbiBpbnRlcnByZXRpbmcgdGhlIHJlc3BvbnNlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YuIEkgYmV0IGl0IHdpbGwgcmVseSBvbiBVU0IgVmlkZW8gQ2xhc3MgKFVWQykgc3RhbmRhcmRzLCBhcyB0aGF0J3MgdGhlIGNvbW1vbiBmcmFtZXdvcmsgZm9yIHZpZGVvIGRldmljZXMgb3ZlciBVU0IuIEkgd291bGRu4oCZdCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgY29kZSB0aGF0IHJlZmxlY3QgdGhlIFVWQyBmb3JtYXQgZGVmaW5pdGlvbnMuXG5cblRoZSBjb2RlIGl0c2VsZiBpcyBnb2luZyB0byByZXZlYWwgdGhlIHNwZWNpZmljIHF1ZXJpZXMgbWFkZSwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGUgcmVzcG9uc2VzLiBJJ20gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgaG93IGRvZXMgaXQgZGVhbCB3aXRoIGRldmljZXMgdGhhdCBkb24ndCBzdXBwb3J0IGNlcnRhaW4gY2FwYWJpbGl0aWVzLCBvciBpZiBjb21tdW5pY2F0aW9uIGZhaWxzPyBEb2VzIGl0IGZhbGwgYmFjayB0byBkZWZhdWx0IHNldHRpbmdzLCByZXBvcnQgYW4gZXJyb3IsIG9yIHNpbXBseSBza2lwIHVuc3VwcG9ydGVkIGZlYXR1cmVzPyBBbHNvLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzICp3aGljaCogc3BlY2lmaWMgVVZDIGNhcGFiaWxpdGllcyBhcmUgYmVpbmcgcXVlcmllZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBzb3J0IG9mIGlkZW50aWZpZXIsIG9yIHBlcmhhcHMgYW4gZW51bWVyYXRlZCBsaXN0LCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLlxuXG5JbiB0aGUgYmFjayBvZiBteSBtaW5kLCBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBjYWNoZSBhbnkgb2YgdGhpcyBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIGF2b2lkIHJlcGVhdGVkIHF1ZXJpZXM/IE9yIG1heWJlIGl0IGNhbiBsZXZlcmFnZSBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHByZXZpb3VzIHF1ZXJpZXMuIEFuZCwgbGFzdGx5LCBhcyBhIGJvbnVzLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zIGhhbmRsZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIHRob3NlIGFkdmFuY2VkIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0NDMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNjowNy4xNzk0NDUwNjdaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA1OlxcdHN0YXRpYyBpbnQgdXNidHZfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsXFxuIDYwNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgdXNidHYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdHN0cnNjcHkoY2FwLVxcdTAwM2Vkcml2ZXIsIFxcXCJ1c2J0dlxcXCIsIHNpemVvZihjYXAtXFx1MDAzZWRyaXZlcikpO1xcbiA2MTE6XFx0XFx0c3Ryc2NweShjYXAtXFx1MDAzZWNhcmQsIFxcXCJ1c2J0dlxcXCIsIHNpemVvZihjYXAtXFx1MDAzZWNhcmQpKTtcXG4gNjEyOlxcdFxcdHVzYl9tYWtlX3BhdGgoZGV2LVxcdTAwM2V1ZGV2LCBjYXAtXFx1MDAzZWJ1c19pbmZvLCBzaXplb2YoY2FwLVxcdTAwM2VidXNfaW5mbykpO1xcbiA2MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0YXRpYyBpbnQgdXNidHZfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2lucHV0ICppKVxcbiA2MTg6XFx0e1xcbiA2MTk6XFx0XFx0c3RydWN0IHVzYnR2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2MjA6XFx0XFxuIDYyMTpcXHRcXHRzd2l0Y2ggKGktXFx1MDAzZWluZGV4KSB7XFxuIDYyMjpcXHRcXHRjYXNlIFVTQlRWX0NPTVBPU0lURV9JTlBVVDpcXG4gNjIzOlxcdFxcdFxcdHN0cnNjcHkoaS1cXHUwMDNlbmFtZSwgXFxcIkNvbXBvc2l0ZVxcXCIsIHNpemVvZihpLVxcdTAwM2VuYW1lKSk7XFxuIDYyNDpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MDcuMTc5NjIwNTg3WiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MjQzMzgyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIFVTQiBDYXB0dXJlIERldmljZSBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgdXNidHZfcXVlcnljYXBgIGZ1bmN0aW9uIGFuZCBJIHRoaW5rIEkndmUgZm91bmQgYSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5LiBUaGUgY29kZSBpcyB1c2luZyBgZGV2LVx1MDAzZXVkZXZgIGhlcmUsIHNwZWNpZmljYWxseSBpbiB0aGlzIGB1c2JfbWFrZV9wYXRoYCBjYWxsLCBgdXNiX21ha2VfcGF0aChkZXYtXHUwMDNldWRldiwgY2FwLVx1MDAzZWJ1c19pbmZvLCBzaXplb2YoY2FwLVx1MDAzZWJ1c19pbmZvKSk7YC4gSXQncyBzdGFydGluZyB0byBsb29rIGxpa2UgaWYgYGRldi1cdTAwM2V1ZGV2YCBpcyBOVUxMLCB0aGVuIGB1c2JfbWFrZV9wYXRoYCB3aWxsIGRlcmVmZXJlbmNlIHRoYXQgTlVMTCBwb2ludGVyISBUaGF0J3MgYmFkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgbGV0IG1lIHNlZS4uLiBBaCwgaGVyZSBpdCBpczpcblxuYGBgY1xuc3RhdGljIGlubGluZSB2b2lkIHVzYl9tYWtlX3BhdGgoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbntcblx0aW50IGFjdHVhbDtcblx0YWN0dWFsID0gc25wcmludGYoYnVmLCBzaXplLCBcInVzYi0lcy0lc1wiLCBkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c19uYW1lLFxuXHRcdFx0ICBkZXYtXHUwMDNlZGV2cGF0aCk7XG59XG5gYGBcblxuT2theSwgdGhlIG1vcmUgSSBsb29rIGF0IHRoaXMgdGhlIHdvcnNlIGl0IGdldHMuIElmIGBkZXZgIGl0c2VsZiBpcyBOVUxMLCB0aGVuIGBkZXYtXHUwMDNlYnVzYCB3aWxsIGNhdXNlIGEgY3Jhc2ghIFNvLCBpdCdzIG5vdCBqdXN0IHRoZSBwb3RlbnRpYWwgTlVMTCBgZGV2LVx1MDAzZXVkZXZgIGlzc3VlLCBidXQgYWxzbyBhIHBvdGVudGlhbCBOVUxMIGBkZXZgIGlzc3VlISBgdXNidHZfcXVlcnljYXBgIGlzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBmb2N1cyBvbi5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZCBhdCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gcmVwZWF0cyBpdHNlbGYuIEknbGwgY2hlY2sgYHVzYnR2X2VudW1faW5wdXRgLi4uIE5vcGUsIGRvZXNuJ3QgdXNlIGBkZXYtXHUwMDNldWRldmAgaW4gdGhhdCBvbmUuIFdoYXQgYWJvdXQgYHVzYnR2X2VudW1fZm10X3ZpZF9jYXBgPyBPa2F5LCBJJ2xsIG1vdmUgb24gdG8gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Mjc4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MTMuODAzOTYwOTIxWiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdH1cXG4gNjM2OlxcdFxcbiA2Mzc6XFx0c3RhdGljIGludCB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdixcXG4gNjM4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpXFxuIDYzOTpcXHR7XFxuIDY0MDpcXHRcXHRpZiAoZi1cXHUwMDNlaW5kZXggXFx1MDAzZSAwKVxcbiA2NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdGYtXFx1MDAzZXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7XFxuIDY0NDpcXHRcXHRyZXR1cm4gMDtcXG4gNjQ1OlxcdH1cXG4gNjQ2OlxcdFxcbiA2NDc6XFx0c3RhdGljIGludCB1c2J0dl9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2NGwyX2Zvcm1hdCAqZilcXG4gNjQ5OlxcdHtcXG4gNjUwOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2NTE6XFx0XFxuIDY1MjpcXHRcXHRmLVxcdTAwM2VmbXQucGl4LndpZHRoID0gdXNidHYtXFx1MDAzZXdpZHRoO1xcbiA2NTM6XFx0XFx0Zi1cXHUwMDNlZm10LnBpeC5oZWlnaHQgPSB1c2J0di1cXHUwMDNlaGVpZ2h0O1xcbiA2NTQ6XFx0XFx0Zi1cXHUwMDNlZm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNjoxMy44MDQwNDY5ODFaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0OTMzMDEzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDb25zaWRlcmluZyBVU0IgR2FkZ2V0IERyaXZlcnMgZm9yIGEgU3lzdGVtKipcblxuUmlnaHQsIHNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsICpubyogYHVkZXZgIGZvciB0aGlzIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uIFRoYXQncyBhIGNvbnN0cmFpbnQgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGxldCdzIGV4cGxvcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90IGB1c2J0dl9nX3N0ZGAgaXMgYSB2aWFibGUgZHJpdmVyIHRvIGFjaGlldmUgbXkgZ29hbHMuIEl0IGlzIGEgcG9zc2liaWxpdHkgYW5kIEkgbXVzdCBjb25zaWRlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyNTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjE3LjQ1MzM4MTkxNVoiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbnQgdXNidHZfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpub3JtKVxcbiA2NjQ6XFx0e1xcbiA2NjU6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY2NjpcXHRcXHQqbm9ybSA9IHVzYnR2LVxcdTAwM2Vub3JtO1xcbiA2Njc6XFx0XFx0cmV0dXJuIDA7XFxuIDY2ODpcXHR9XFxuIDY2OTpcXHRcXG4gNjcwOlxcdHN0YXRpYyBpbnQgdXNidHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pXFxuIDY3MTpcXHR7XFxuIDY3MjpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gNjczOlxcdFxcdHN0cnVjdCB1c2J0diAqdXNidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAobm9ybSBcXHUwMDI2IFVTQlRWX1RWX1NURClcXG4gNjc2OlxcdFxcdFxcdHJldCA9IHVzYnR2X3NlbGVjdF9ub3JtKHVzYnR2LCBub3JtKTtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjc5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MTcuNDUzNTcxNzc1WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDgyMzY5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYHVzYnR2X2dfc3RkYCBNb2R1bGUncyBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB1c2J0dl9nX3N0ZGAgY29kZS4gRmlyc3QgdGhpbmcgSSdtIG5vdGljaW5nIGlzIHRoZSBhYnNlbmNlIG9mIGB1ZGV2YCB1c2FnZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIFRoYXQncyBnb29kIHRvIGtub3csIG5hcnJvd3MgZG93biB3aGVyZSB0byBsb29rIGlmIHRoZXJlIGFyZSBgdWRldmAtcmVsYXRlZCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvIGhlcmUgYXJlOiBgdXNidHZfZGlzY29ubmVjdGAsIGB1c2J0dl9wcm9iZWAsIGB1c2J0dl9zX3N0ZGAsIGB1c2J0dl9zX2lucHV0YCwgYHVzYnR2X3NfY3RybGAsIGB1c2J0dl9xdWVyeWNhcGAsIGB1c2J0dl9zdGFydF9zdHJlYW1pbmdgLCBgdXNidHZfc3RvcF9zdHJlYW1pbmdgLCBgdXNidHZfcXVldWVfc2V0dXBgLCBhbmQgYHVzYnR2X2J1Zl9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgdG91Y2hwb2ludHMsIHRoZSBlc3NlbnRpYWwgcGFydHMgb2YgdGhlIGRyaXZlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFVTQiBkZXZpY2UgYW5kIHZpZGVvIGNhcHR1cmUuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNhcmVmdWxseSBmb3IgYW55IGxvZ2ljIGVycm9ycyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBJIGhhdmUgdG8gZG91YmxlIGNoZWNrOiBgdXNidHZfc19pbnB1dGAgaXMgdXNpbmcgYHVkZXZgLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MjIuNTAxODUwOTczWiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHRcXG4gNjgxOlxcdHN0YXRpYyBpbnQgdXNidHZfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKVxcbiA2ODI6XFx0e1xcbiA2ODM6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY4NDpcXHRcXHQqaSA9IHVzYnR2LVxcdTAwM2VpbnB1dDtcXG4gNjg1OlxcdFxcdHJldHVybiAwO1xcbiA2ODY6XFx0fVxcbiA2ODc6XFx0XFxuIDY4ODpcXHRzdGF0aWMgaW50IHVzYnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKVxcbiA2ODk6XFx0e1xcbiA2OTA6XFx0XFx0c3RydWN0IHVzYnR2ICp1c2J0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdHJldHVybiB1c2J0dl9zZWxlY3RfaW5wdXQodXNidHYsIGkpO1xcbiA2OTM6XFx0fVxcbiA2OTQ6XFx0XFxuIDY5NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHVzYnR2X2lvY3RsX29wcyA9IHtcXG4gNjk2OlxcdFxcdC52aWRpb2NfcXVlcnljYXAgPSB1c2J0dl9xdWVyeWNhcCxcXG4gNjk3OlxcdFxcdC52aWRpb2NfZW51bV9pbnB1dCA9IHVzYnR2X2VudW1faW5wdXQsXFxuIDY5ODpcXHRcXHQudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSB1c2J0dl9lbnVtX2ZtdF92aWRfY2FwLFxcbiA2OTk6XFx0XFx0LnZpZGlvY19nX2ZtdF92aWRfY2FwID0gdXNidHZfZm10X3ZpZF9jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjIyLjUwMjE1NTQ4M1oiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk2Mzk2MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBVU0JUViBEcml2ZXIgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgVVNCVFYgZHJpdmVyIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgbWluZC4gSXQgbG9va3MgbGlrZSBgdXNidHZfc2VsZWN0X2lucHV0YCBjYWxscyBgdXNidHZfc2V0X3JlZ3NgLCB3aGljaCB0aGVuIHVzZXMgYHVkZXZgLiBUaGF0IHRlbGxzIG1lIHRoYXQgYHVzYnR2X3NfaW5wdXRgIGlzIGFub3RoZXIga2V5IHN5bWJvbCB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHRpZ2h0ZW4gdXAgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHRvIG1ha2Ugc3VyZSBJJ20gcmVhbGx5IGhpdHRpbmcgdGhlIGtleSBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGJlaW5nIGFkZHJlc3NlZC5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdDpcblxuKiAgIGB1c2J0dl9kaXNjb25uZWN0YFxuKiAgIGB1c2J0dl9wcm9iZWBcbiogICBgdXNidHZfc19zdGRgXG4qICAgYHVzYnR2X3NfaW5wdXRgXG4qICAgYHVzYnR2X3NfY3RybGBcbiogICBgdXNidHZfcXVlcnljYXBgXG4qICAgYHVzYnR2X3N0YXJ0X3N0cmVhbWluZ2BcbiogICBgdXNidHZfc3RvcF9zdHJlYW1pbmdgXG4qICAgYHVzYnR2X2J1Zl9xdWV1ZWBcblxuWWVhaCwgdGhpcyBsb29rcyBzb2xpZC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGB1c2JfZGV2aWNlYCBwb2ludGVyIGlzIGFjY2Vzc2VkIGFmdGVyIGl0J3MgYmVlbiBmcmVlZC4gQnkgc2V0dGluZyBgdXNidHYtXHUwMDNldWRldiA9IE5VTExgIHVuZGVyIHRoZSBgdjRsMl9sb2NrYCBtdXRleCBkdXJpbmcgZGlzY29ubmVjdCwgdGhlIHBhdGNoIGFpbXMgdG8gcHJldmVudCBjb25jdXJyZW50IFY0TDIgaW9jdGxzIGZyb20gYWNjZXNzaW5nIGJhZCBtZW1vcnkuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYSBVU0IgZHJpdmVyIGV4cG9zaW5nIGEgVjRMMiBpbnRlcmZhY2UsIGZ1enppbmcgdmlhIGJvdGggVVNCIGFuZCBWNEwyIGZ1enppbmcgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgdGhhdC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgbmVlZCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UsIHNwZWNpZmljYWxseSBjb25maWd1cmF0aW9ucyBsaWtlOlxuXG4qICAgYFZJREVPX1VTQlRWYFxuKiAgIGBNRURJQV9TVVBQT1JUYFxuKiAgIGBNRURJQV9VU0JfU1VQUE9SVGBcbiogICBgTUVESUFfQ0FNRVJBX1NVUFBPUlRgXG4qICAgYFZJREVPX0RFVmBcbiogICBgU05EYFxuXG5JJ2xsIHRha2UgYW5vdGhlciBsb29rIGF0IGBkcml2ZXJzL21lZGlhL3VzYi91c2J0di9LY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIFllcCwgaXQgZGVwZW5kcyBvbiBgVklERU9fREVWIFx1MDAyNlx1MDAyNiBTTkRgLCBgc2VsZWN0cyBTTkRfUENNYCwgYW5kIGBzZWxlY3RzIFZJREVPQlVGMl9WTUFMTE9DYCwgc28gbXkgY3VycmVudCBsaXN0IGlzIGdvb2QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MgYW5kIEkgdGhpbmsgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1MjgsIk91dHB1dFRva2VucyI6Mjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzEuOTk4NTU1ODMxWiIsIlNlcSI6ODYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTc5MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSURFT19VU0JUVlwiLFxuICAgIFwiTUVESUFfU1VQUE9SVFwiLFxuICAgIFwiTUVESUFfVVNCX1NVUFBPUlRcIixcbiAgICBcIk1FRElBX0NBTUVSQV9TVVBQT1JUXCIsXG4gICAgXCJWSURFT19ERVZcIixcbiAgICBcIlNORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYnR2X2Rpc2Nvbm5lY3RcIixcbiAgICBcInVzYnR2X3Byb2JlXCIsXG4gICAgXCJ1c2J0dl9zX3N0ZFwiLFxuICAgIFwidXNidHZfc19pbnB1dFwiLFxuICAgIFwidXNidHZfc19jdHJsXCIsXG4gICAgXCJ1c2J0dl9xdWVyeWNhcFwiLFxuICAgIFwidXNidHZfc3RhcnRfc3RyZWFtaW5nXCIsXG4gICAgXCJ1c2J0dl9zdG9wX3N0cmVhbWluZ1wiLFxuICAgIFwidXNidHZfYnVmX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgVVNCVFYgZHJpdmVyIGJ5IHNldHRpbmcgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTGAgdW5kZXIgdGhlIGB2NGwyX2xvY2tgIG11dGV4IGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IFY0TDIgaW9jdGxzIChsaWtlIGBWSURJT0NfUVVFUllDQVBgLCBgVklESU9DX1NfU1REYCwgYFZJRElPQ19TX0NUUkxgLCBldGMuKSBmcm9tIGFjY2Vzc2luZyB0aGUgZnJlZWQgYHVzYl9kZXZpY2VgIHBvaW50ZXIuIFNpbmNlIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gZml4IGluIGEgVVNCIGRyaXZlciB0aGF0IGV4cG9zZXMgYSBWNEwyIGludGVyZmFjZSwgaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHZpYSBVU0IgYW5kIFY0TDIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIyNTQyMzY4WiIsIlNlcSI6ODcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5NjM1MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIzMDY5MTU4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MzkxMDMyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVxcdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNzQ0ZTM3ZGU5YmIyZDkzZmQyNjFkMDVlODg0YTBiMzRlZjg3YjcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbmluZGV4IDZjNGZhY2Y0ZjQxYTcuLmIzM2I1NGZkYmQ2MjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di1jb3JlLmNcbisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LWNvcmUuY1xuQEAgLTEzNiw4ICsxMzYsNiBAQCBzdGF0aWMgdm9pZCB1c2J0dl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0dXNidHZfYXVkaW9fZnJlZSh1c2J0dik7XG4gXHR1c2J0dl92aWRlb19mcmVlKHVzYnR2KTtcbiBcbi1cdHVzYnR2LVx1MDAzZXVkZXYgPSBOVUxMO1xuLVxuIFx0LyogdGhlIHVzYnR2IHN0cnVjdHVyZSB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdjRsMiB3aWxsIGJlXG4gXHQgICBkb25lIHVzaW5nIGl0ICovXG4gXHR2NGwyX2RldmljZV9wdXQoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnR2L3VzYnR2LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J0di91c2J0di12aWRlby5jXG5pbmRleCBkZTAzMjgxMDBhNjBkLi5lZjA2NmRmNzEyNDY5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xuKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidHYvdXNidHYtdmlkZW8uY1xuQEAgLTk2OCw1ICs5NjgsOSBAQCB2b2lkIHVzYnR2X3ZpZGVvX2ZyZWUoc3RydWN0IHVzYnR2ICp1c2J0dilcbiBcdHZiMl92aWRlb191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZ1c2J0di1cdTAwM2V2ZGV2KTtcbiBcdHY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoXHUwMDI2dXNidHYtXHUwMDNldjRsMl9kZXYpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2xvY2spO1xuK1x0dXNidHYtXHUwMDNldWRldiA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2dXNidHYtXHUwMDNldjRsMl9sb2NrKTtcbitcbiBcdHY0bDJfZGV2aWNlX3B1dChcdTAwMjZ1c2J0di1cdTAwM2V2NGwyX2Rldik7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzY6MzIuMTIzMDcwMjA4WiIsIlNlcSI6ODksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzkwNjgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyMjg5LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM2OjQwLjU2MjE0MjE4NVoiLCJTZXEiOjkwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIGJ5IG1vdmluZyB0aGUgYHVzYnR2LVxcdTAwM2V1ZGV2ID0gTlVMTDtgIGFzc2lnbm1lbnQgaW50byBgdXNidHZfdmlkZW9fZnJlZWAgYW5kIHByb3RlY3RpbmcgaXQgd2l0aCBgdXNidHYtXFx1MDAzZXY0bDJfbG9ja2AuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgZHVyaW5nIGRldmljZSBkaXNjb25uZWN0aW9uLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBieSBtb3ZpbmcgdGhlIGB1c2J0di1cXHUwMDNldWRldiA9IE5VTEw7YCBhc3NpZ25tZW50IGludG8gYHVzYnR2X3ZpZGVvX2ZyZWVgIGFuZCBwcm90ZWN0aW5nIGl0IHdpdGggYHVzYnR2LVxcdTAwM2V2NGwyX2xvY2tgLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGR1cmluZyBkZXZpY2UgZGlzY29ubmVjdGlvbi4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[1] Phase: Succeeded StartedAt: 2026-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 14:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 14:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2] Phase: Succeeded StartedAt: 2026-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 14:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:36:52 +0000 UTC FinishedAt: 2026-08-17 14:36:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"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-workflow6k4np/series-workflow6k4np-convert-artifact-267371392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:37:02 +0000 UTC FinishedAt: 2026-08-17 14:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:37:02 +0000 UTC FinishedAt: 2026-08-17 14:53:26 +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:*8f1c0eb5-6a4c-4c57-bc83-ef33d7c0a562,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-workflow6k4np/series-workflow6k4np-convert-artifact-267371392/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": "01f22b83-3cb5-4023-9730-a4803bd12204", "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-workflow6k4np/series-workflow6k4np-build-action-3992784454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:37:02 +0000 UTC FinishedAt: 2026-08-17 14:53:16 +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:*8f1c0eb5-6a4c-4c57-bc83-ef33d7c0a562,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-workflow6k4np/series-workflow6k4np-convert-artifact-267371392/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": "01f22b83-3cb5-4023-9730-a4803bd12204", "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-workflow6k4np/series-workflow6k4np-build-action-3992784454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:26 +0000 UTC FinishedAt: 2026-08-17 14:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:26 +0000 UTC FinishedAt: 2026-08-17 14:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:26 +0000 UTC FinishedAt: 2026-08-17 14:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:26 +0000 UTC FinishedAt: 2026-08-17 14:53:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-workflow6k4np/series-workflow6k4np-convert-artifact-2953756199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:36 +0000 UTC FinishedAt: 2026-08-17 14:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:53:36 +0000 UTC FinishedAt: 2026-08-17 14:55:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01f22b83-3cb5-4023-9730-a4803bd12204,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-workflow6k4np/series-workflow6k4np-build-action-3992784454/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-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:55:41 +0000 UTC FinishedAt: 2026-08-17 14:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:55:41 +0000 UTC FinishedAt: 2026-08-17 14:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:55:41 +0000 UTC FinishedAt: 2026-08-17 15:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:55:41 +0000 UTC FinishedAt: 2026-08-17 15:12: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:*8f1c0eb5-6a4c-4c57-bc83-ef33d7c0a562,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-workflow6k4np/series-workflow6k4np-convert-artifact-2953756199/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": "a75141fb-2e78-444d-82b1-56bafca0f237", "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-workflow6k4np/series-workflow6k4np-build-action-6238123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 14:55:41 +0000 UTC FinishedAt: 2026-08-17 15:12:04 +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:*8f1c0eb5-6a4c-4c57-bc83-ef33d7c0a562,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-workflow6k4np/series-workflow6k4np-convert-artifact-2953756199/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": "a75141fb-2e78-444d-82b1-56bafca0f237", "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-workflow6k4np/series-workflow6k4np-build-action-6238123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:12:14 +0000 UTC FinishedAt: 2026-08-17 15:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:12:14 +0000 UTC FinishedAt: 2026-08-17 15:12:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:12:14 +0000 UTC FinishedAt: 2026-08-17 15:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:12:14 +0000 UTC FinishedAt: 2026-08-17 15:14:19 +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:*a75141fb-2e78-444d-82b1-56bafca0f237,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-workflow6k4np/series-workflow6k4np-build-action-6238123/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-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"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:*01f22b83-3cb5-4023-9730-a4803bd12204,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a75141fb-2e78-444d-82b1-56bafca0f237,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-workflow6k4np/series-workflow6k4np-build-action-3992784454/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-workflow6k4np/series-workflow6k4np-build-action-6238123/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 15:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 15:14:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"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-workflow6k4np/series-workflow6k4np-convert-artifact-570804864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 15:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 15:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","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-08-17 15:14:25 +0000 UTC FinishedAt: 2026-08-17 15:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 15:14:35 +0000 UTC FinishedAt: 2026-08-17 18:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6k4np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usbtv_disconnect","usbtv_probe","usbtv_s_std","usbtv_s_input","usbtv_s_ctrl","usbtv_querycap","usbtv_start_streaming","usbtv_stop_streaming","usbtv_buf_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIDEO_USBTV","MEDIA_SUPPORT","MEDIA_USB_SUPPORT","MEDIA_CAMERA_SUPPORT","VIDEO_DEV","SND"],"series_id":"de91101a-9734-4d85-86a2-250af45c3f52","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 15:14:35 +0000 UTC FinishedAt: 2026-08-17 18:17:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01f22b83-3cb5-4023-9730-a4803bd12204,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a75141fb-2e78-444d-82b1-56bafca0f237,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-workflow6k4np/series-workflow6k4np-build-action-3992784454/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-workflow6k4np/series-workflow6k4np-build-action-6238123/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-workflow6k4np/series-workflow6k4np-convert-artifact-570804864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}