Name: series-workflowrxvp4 Phase: Succeeded StartedAt: 2026-09-08 00:06:45 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[0] Phase: Succeeded StartedAt: 2026-09-08 00:06:45 +0000 UTC FinishedAt: 2026-09-08 00:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 00:06:45 +0000 UTC FinishedAt: 2026-09-08 00:26:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_IDLETIMER", "NETFILTER_ADVANCED", "NETFILTER_XTABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_IDLETIMER", "NETFILTER_ADVANCED", "NETFILTER_XTABLES" ], "series_id": "526f16f5-75e0-4aaf-99b4-252e9e2b2ff7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "idletimer_tg_create_v1", "idletimer_tg_checkentry_v1", "idletimer_tg_target_v1", "idletimer_tg_destroy_v1" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5pbmRleCBmZTdkOGQxOTYyOWI0Li44YTFkOTVkMjE5OTE3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuQEAgLTE5Niw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZDk0Y2ViNzcwZDE3NWI2ZWM5YjY4ZWU0OWQyNGJhNTQ3N2IwNTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMDoyNToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga3phbGxvY19vYmooKmluZm8tJmd0O3RpbWVyKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSURMRVRJTUVSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHBhdGNoIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYC4gSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWA6IGEgYGttYWxsb2Nfb2JqYCBjYWxsIGlzIGJlaW5nIHN3YXBwZWQgb3V0IGZvciBhIGBremFsbG9jX29iamAgY2FsbCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyB0aGUgYGluZm8tJmd0O3RpbWVyYCBmaWVsZC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgcG90ZW50aWFsIGNvbmNlcm4gYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgd2hpY2ggaXMgZ29vZCB0aGV5IGFyZSBhZGRyZXNzaW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgYXJvdW5kIGxpbmUgMTk2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGF0IGBpbmZvLSZndDt0aW1lcmAgc3RydWN0dXJlIOKAkyBpdHMgZGVmaW5pdGlvbiwgaG93IGl0JiMzOTtzIHVzZWQgYmVmb3JlIGFuZCBhZnRlciBhbGxvY2F0aW9uLCBhbmQgaW1wb3J0YW50bHksIGhvdyB0aGlzIHRpbWVyIGlzICppbml0aWFsaXplZCogYWZ0ZXIgYWxsb2NhdGlvbiAob3IsIHByZXZpb3VzbHksIGxhY2sgdGhlcmVvZikuIEkgbmVlZCB0byBzZWUgaWYgdGhlIHplcm9pbmcgaXMgYWN0dWFsbHkgKm5lY2Vzc2FyeSogb3IganVzdCBhIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYHh0X0lETEVUSU1FUmAgaXMgYWxzbyBpbiBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxNzE6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcXG5cJiMzNDspO1xuIDE3MjpcdFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gMTczOlx0XHR9XG4gMTc0Olx0XG4gMTc1Olx0XHRsaXN0X2FkZChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWVudHJ5LCBcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XG4gMTc2Olx0XG4gMTc3Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XG4gMTc4Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCA9IDE7XG4gMTc5Olx0XG4gMTgwOlx0XHRJTklUX1dPUksoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V3b3JrLCBpZGxldGltZXJfdGdfd29yayk7XG4gMTgxOlx0XG4gMTgyOlx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiAxODM6XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAxODQ6XHRcbiAxODU6XHRcdHJldHVybiAwO1xuIDE4NjpcdFxuIDE4NzpcdG91dF9mcmVlX2F0dHI6XG4gMTg4Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiAxODk6XHRvdXRfZnJlZV90aW1lcjpcbiAxOTA6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDE5MTpcdG91dDpcbiAxOTI6XHRcdHJldHVybiByZXQ7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gMTk2Olx0e1xuIDE5NzpcdFx0aW50IHJldDtcbiAxOTg6XHRcbiAxOTk6XHRcdGluZm8tXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4gMjAwOlx0XHRpZiAoIWluZm8tXHUwMDNldGltZXIpIHtcbiAyMDE6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAyMDI6XHRcdFx0Z290byBvdXQ7XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRyZXQgPSBpZGxldGltZXJfY2hlY2tfc3lzZnNfbmFtZShpbmZvLVx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cdTAwM2VsYWJlbCkpO1xuIDIwNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMDc6XHRcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiAyMDg6XHRcbiAyMDk6XHRcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gMjEwOlx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbiAyMTE6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSkge1xuIDIxMjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDIxMzpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubW9kZSA9IDA0NDQ7XG4gMjE2Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xuIDIxNzpcdFxuIDIxODpcdFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAyMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyMjA6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcXG5cJiMzNDspO1xuIDIyMTpcdFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHQvKiAgbm90aWZ5IHVzZXJzcGFjZSAgKi9cbiAyMjU6XHRcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiAyMjY6XHRcbiAyMjc6XHRcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbiAyMjg6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXHUwMDNldGltZXJfdHlwZTtcbiAyMjk6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiAyMzA6XHRcbiAyMzE6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAyMzI6XHRcbiAyMzM6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDIzNDpcdFx0XHRhbGFybV9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYWxhcm0sIEFMQVJNX0JPT1RUSU1FLFxuIDIzNTpcdFx0XHRcdCAgIGlkbGV0aW1lcl90Z19hbGFybXByb2MpO1xuIDIzNjpcdFx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWFsYXJtLmRhdGEgPSBpbmZvLVx1MDAzZXRpbWVyO1xuIDIzNzpcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXHUwMDNldGltZXIsIGluZm8tXHUwMDNldGltZW91dCk7XG4gMjM4Olx0XHR9IGVsc2Uge1xuIDIzOTpcdFx0XHR0aW1lcl9zZXR1cChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XG4gMjQwOlx0XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDI0MTpcdFx0XHRcdFx0c2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMjQyOlx0XHR9XG4gMjQzOlx0XG4gMjQ0Olx0XHRyZXR1cm4gMDtcbiAyNDU6XHRcbiAyNDY6XHRvdXRfZnJlZV9hdHRyOlxuIDI0NzpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSk7XG4gMjQ4Olx0b3V0X2ZyZWVfdGltZXI6XG4gMjQ5Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGB4dF9JRExFVElNRVJgIE5ldGZpbHRlciBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gYHh0X0lETEVUSU1FUi5jYC4uLnRoYXQmIzM5O3MgYSBuZXRmaWx0ZXIgdGFyZ2V0IGV4dGVuc2lvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZW5hYmxlZCBhbmQgaG93IHRvIGNvbmZpZ3VyZSBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGFuZCBob3cgaXQgaXMgY29udHJvbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgaGFzIHRvIHNheSBhYm91dCBgeHRfSURMRVRJTUVSYC4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBtb2R1bGUsIHBlcmhhcHMgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIGV2ZW4gZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3NzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9eVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWctNzgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWc6MTIzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWctMTI0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yMDA9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMDE6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjAyLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMjE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6MTIzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMTI0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz0xMTg9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzoxMTk6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctMTIwLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTEyNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6MTI2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctMTI3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTExNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6MTE2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMTE3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTExNz1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6MTE4OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctMTE5LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctMTE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTEzNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6MTM3OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctMTM4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9MTE0PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjExNTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMTE2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9MTE1PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctMTE3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctMTE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9MTExPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjExMjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMTEzLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnPTExMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MTEzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctMTE0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTI0ND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MjQ1OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMjQ2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTIzNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MjM2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjM3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTkwND1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05MTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTE4OmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cdHRyaXN0YXRlICBcJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE4Nj1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgJiM0Mzs9IHh0X1RSQUNFLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgJiM0Mzs9IHh0X0lETEVUSU1FUi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdGhlIEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gTGluZSA5MTggc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIHByZXR0eSBzb2xpZCwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGZhaXJseSBzcGVjaWZpYyBuZWFyIHRoYXQgbGluZS4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmZWF0dXJlJiMzOTtzIGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgbWF5YmUgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIHNvbWUgaGVscCB0ZXh0IHRoYXQgd2lsbCBpbGx1bWluYXRlIG15IGN1cnJlbnQgcXVlcnkuIEkmIzM5O2xsIG1lbnRhbGx5IHByZXBhcmUgbXlzZWxmIHRvIHBhcnNlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBjbHVlcy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdFxuIDkxNjpcdFx0VG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiA5MTc6XHRcbiA5MTg6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcbiA5MTk6XHRcdHRyaXN0YXRlICBcJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiA5MjA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gOTIxOlx0XHRoZWxwXG4gOTIyOlx0XG4gOTIzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVImIzM5OyB0YXJnZXQuICBFYWNoIG1hdGNoaW5nIHBhY2tldFxuIDkyNDpcdFx0ICByZXNldHMgdGhlIHRpbWVyIGFzc29jaWF0ZWQgd2l0aCBsYWJlbCBzcGVjaWZpZWQgd2hlbiB0aGUgcnVsZSBpc1xuIDkyNTpcdFx0ICBhZGRlZC4gIFdoZW4gdGhlIHRpbWVyIGV4cGlyZXMsIGl0IHRyaWdnZXJzIGEgc3lzZnMgbm90aWZpY2F0aW9uLlxuIDkyNjpcdFx0ICBUaGUgcmVtYWluaW5nIHRpbWUgZm9yIGV4cGlyYXRpb24gY2FuIGJlIHJlYWQgdmlhIHN5c2ZzLlxuIDkyNzpcdFxuIDkyODpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiA5Mjk6XHRcbiA5MzA6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcbiA5MzE6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7TEVEXCYjMzQ7IHRhcmdldCBzdXBwb3J0JiMzOTtcbiA5MzI6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTUyBcdTAwMjZcdTAwMjYgTEVEU19UUklHR0VSU1xuIDkzMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA5MzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY29kZSwgc3VtbWFyaXplZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8geHRfSURMRVRJTUVSLmMqKgoKT2theSwgdGltZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWV0aG9kaWNhbGx5IGV4YW1pbmluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIG1hcHBpbmcgb3V0IGV2ZXJ5dGhpbmcgLSBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiwgZXZlcnkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFsbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBldmVyeSBzaW5nbGUgcG9pbnQgd2hlcmUgdGhleSBhbGwgaW50ZXJhY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgaXMgY3JpdGljYWwuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIElETEVUSU1FUiBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gTm8gZGV0YWlsIGNhbiBiZSBvdmVybG9va2VkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBsaW51eC9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBOZXRmaWx0ZXIgbW9kdWxlIHRvIHRyaWdnZXIgYSB0aW1lciB3aGVuIHBhY2tldCBtYXRjaGVzLlxuICAgNjpcdCAqIEFmdGVyIHRpbWVyIGV4cGlyZXMgYSBrZXZlbnQgd2lsbCBiZSBzZW50LlxuICAgNzpcdCAqXG4gICA4Olx0ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uXG4gICA5Olx0ICogV3JpdHRlbiBieSBUaW1vIFRlcmFzIFx1MDAzY2V4dC10aW1vLnRlcmFzQG5va2lhLmNvbVx1MDAzZVxuICAxMDpcdCAqXG4gIDExOlx0ICogQ29udmVydGVkIHRvIHhfdGFibGVzIGFuZCByZXdvcmtlZCBmb3IgdXBzdHJlYW0gaW5jbHVzaW9uXG4gIDEyOlx0ICogYnkgTHVjaWFubyBDb2VsaG8gXHUwMDNjbHVjaWFuby5jb2VsaG9Abm9raWEuY29tXHUwMDNlXG4gIDEzOlx0ICpcbiAgMTQ6XHQgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyBcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cdTAwM2VcbiAgMTU6XHQgKi9cbiAgMTY6XHRcbiAgMTc6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAxODpcdFxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsYXJtdGltZXIuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2Rldl90LmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAgMjk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiAgMzE6XHRcbiAgMzI6XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnIHtcbiAgMzM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4gIDM0Olx0XHRzdHJ1Y3QgYWxhcm0gYWxhcm07XG4gIDM1Olx0XHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcbiAgMzY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuICAzNzpcdFxuICAzODpcdFx0c3RydWN0IGtvYmplY3QgKmtvYmo7XG4gIDM5Olx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyO1xuICA0MDpcdFxuICA0MTpcdFx0dW5zaWduZWQgaW50IHJlZmNudDtcbiAgNDI6XHRcdHU4IHRpbWVyX3R5cGU7XG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgTElTVF9IRUFEKGlkbGV0aW1lcl90Z19saXN0KTtcbiAgNDY6XHRzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpO1xuICA0NzpcdFxuICA0ODpcdHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaWRsZXRpbWVyX3RnX2tvYmo7XG4gIDQ5Olx0XG4gIDUwOlx0c3RhdGljXG4gIDUxOlx0c3RydWN0IGlkbGV0aW1lcl90ZyAqX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChjb25zdCBjaGFyICpsYWJlbClcbiAgNTI6XHR7XG4gIDUzOlx0XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICplbnRyeTtcbiAgNTQ6XHRcbiAgNTU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0LCBlbnRyeSkge1xuICA1NjpcdFx0XHRpZiAoIXN0cmNtcChsYWJlbCwgZW50cnktXHUwMDNlYXR0ci5hdHRyLm5hbWUpKVxuICA1NzpcdFx0XHRcdHJldHVybiBlbnRyeTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdHJldHVybiBOVUxMO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgc3NpemVfdCBpZGxldGltZXJfdGdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gIDY0Olx0XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAgNjU6XHR7XG4gIDY2Olx0XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lcjtcbiAgNjc6XHRcdHVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IDA7XG4gIDY4Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSB7fTtcbiAgNjk6XHRcdGxvbmcgdGltZV9kaWZmID0gMDtcbiAgNzA6XHRcbiAgNzE6XHRcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gIDcyOlx0XG4gIDczOlx0XHR0aW1lciA9XHRfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGF0dHItXHUwMDNlYXR0ci5uYW1lKTtcbiAgNzQ6XHRcdGlmICh0aW1lcikge1xuICA3NTpcdFx0XHRpZiAodGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gIDc2Olx0XHRcdFx0a3RpbWVfdCBleHBpcmVzX2FsYXJtID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2dGltZXItXHUwMDNlYWxhcm0pO1xuICA3NzpcdFx0XHRcdGt0aW1lc3BlYyA9IGt0aW1lX3RvX3RpbWVzcGVjNjQoZXhwaXJlc19hbGFybSk7XG4gIDc4Olx0XHRcdFx0dGltZV9kaWZmID0ga3RpbWVzcGVjLnR2X3NlYztcbiAgNzk6XHRcdFx0fSBlbHNlIHtcbiAgODA6XHRcdFx0XHRleHBpcmVzID0gdGltZXItXHUwMDNldGltZXIuZXhwaXJlcztcbiAgODE6XHRcdFx0XHR0aW1lX2RpZmYgPSBqaWZmaWVzX3RvX21zZWNzKGV4cGlyZXMgLSBqaWZmaWVzKSAvIDEwMDA7XG4gIDgyOlx0XHRcdH1cbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAgODY6XHRcbiAgODc6XHRcdGlmICh0aW1lX2FmdGVyKGV4cGlyZXMsIGppZmZpZXMpIHx8IGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gIDg4Olx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWxkXFxuXCYjMzQ7LCB0aW1lX2RpZmYpO1xuICA4OTpcdFxuICA5MDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDswXFxuXCYjMzQ7KTtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICA5NDpcdHtcbiAgOTU6XHRcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZGxldGltZXJfdGcsXG4gIDk2Olx0XHRcdFx0XHRcdFx0ICB3b3JrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdHN5c2ZzX25vdGlmeShpZGxldGltZXJfdGdfa29iaiwgTlVMTCwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuICA5OTpcdH1cbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGJlIGVmZmljaWVudDoKCioqRm9jdXNpbmcgb24gUmVnaXN0cmF0aW9uIGFuZCBUYXJnZXQgSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEZvcmdldCB0aGUgcHJlYW1ibGUgYW5kIHRoZSBmbHVmZi4gSSBuZWVkIHRvIGdldCBzdHJhaWdodCB0byB0aGUgcmVnaXN0cmF0aW9uIGFuZCB0YXJnZXQgZGV0YWlscy4gTGluZXMgMTAxIHRvIDM1MCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVhdCBpcywgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZSB3aXRoIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIHJlYWQgdGhvc2UgbGluZXMgd2l0aCBsYXNlciBmb2N1cywgZmlsdGVyaW5nIG91dCBhbnl0aGluZyBpcnJlbGV2YW50IHRvIHRob3NlIHNwZWNpZmljIGVsZW1lbnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGtleSBpZGVudGlmaWVycywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhvc2UgbGluZXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBtZW50YWxseSBwcmVwYXJlZCB0byBwaWNrIHVwIG9uIHRob3NlIHF1aWNrbHkuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZXNzZW50aWFsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlZ2lzdHJhdGlvbnMgdGhlbXNlbHZlcyBhbmQgd2hhdGV2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCBhcyB0aGUgdGFyZ2V0IGFuZCBpdHMgcHJvcGVydGllcy4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGJ1dCBJJiMzOTttIHJlYWR5IHRvIGRlYWwgd2l0aCBjb21wbGV4aXR5IG9yIGFueSB1bmV4cGVjdGVkIGRhdGEgZm9ybWF0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gMTAyOlx0e1xuIDEwMzpcdFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSB0aW1lcl9jb250YWluZXJfb2YodGltZXIsIHQsIHRpbWVyKTtcbiAxMDQ6XHRcbiAxMDU6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gMTA2Olx0fVxuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIDExMTpcdFxuIDExMjpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyLCBrdGltZV90IHRpbWVvdXQpXG4gMTE2Olx0e1xuIDExNzpcdFx0LypcbiAxMTg6XHRcdCAqIFRoZSB0aW1lciBzaG91bGQgYWx3YXlzIGJlIHF1ZXVlZCBhcyBAdG91dCBpdCBzaG91bGQgYmUgbGVhc3Qgb25lXG4gMTE5Olx0XHQgKiBzZWNvbmQsIGJ1dCBoYW5kbGUgaXQgY29ycmVjdGx5IGluIGFueSBjYXNlLiBWaXJ0IHdpbGwgbWFuYWdlIVxuIDEyMDpcdFx0ICovXG4gMTIxOlx0XHRpZiAoIWFsYXJtX3N0YXJ0X3RpbWVyKFx1MDAyNnRpbWVyLVx1MDAzZWFsYXJtLCB0aW1lb3V0LCB0cnVlKSlcbiAxMjI6XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiAxMjM6XHR9XG4gMTI0Olx0XG4gMTI1Olx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciwgdW5zaWduZWQgaW50IHNlY29uZHMpXG4gMTI2Olx0e1xuIDEyNzpcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKHRpbWVyLCBrdGltZV9zZXQoc2Vjb25kcywgMCkpO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplKVxuIDEzMTpcdHtcbiAxMzI6XHRcdGludCByZXQ7XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXQgPSB4dF9jaGVja19wcm9jX25hbWUobmFtZSwgc2l6ZSk7XG4gMTM1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEzNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDEzNzpcdFxuIDEzODpcdFx0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7cG93ZXJcJiMzNDspIHx8XG4gMTM5Olx0XHQgICAgIXN0cmNtcChuYW1lLCBcJiMzNDtzdWJzeXN0ZW1cJiMzNDspIHx8XG4gMTQwOlx0XHQgICAgIXN0cmNtcChuYW1lLCBcJiMzNDt1ZXZlbnRcJiMzNDspKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNDI6XHRcbiAxNDM6XHRcdHJldHVybiAwO1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIDE0NzpcdHtcbiAxNDg6XHRcdGludCByZXQ7XG4gMTQ5Olx0XG4gMTUwOlx0XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIDE1MTpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gMTUyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTUzOlx0XHRcdGdvdG8gb3V0O1xuIDE1NDpcdFx0fVxuIDE1NTpcdFxuIDE1NjpcdFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cdTAwM2VsYWJlbCwgc2l6ZW9mKGluZm8tXHUwMDNlbGFiZWwpKTtcbiAxNTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTU4Olx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMTU5Olx0XG4gMTYwOlx0XHRzeXNmc19hdHRyX2luaXQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDE2MTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XG4gMTYyOlx0XHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiAxNjM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNjQ6XHRcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xuIDE2NzpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcbiAxNjg6XHRcbiAxNjk6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gMTcwOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTcxOlx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzXFxuXCYjMzQ7KTtcbiAxNzI6XHRcdFx0Z290byBvdXRfZnJlZV9hdHRyO1xuIDE3MzpcdFx0fVxuIDE3NDpcdFxuIDE3NTpcdFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuIDE3NjpcdFxuIDE3NzpcdFx0dGltZXJfc2V0dXAoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xuIDE3ODpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIDE3OTpcdFxuIDE4MDpcdFx0SU5JVF9XT1JLKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xuIDE4MTpcdFxuIDE4MjpcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMTgzOlx0XHRcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMTg0Olx0XG4gMTg1Olx0XHRyZXR1cm4gMDtcbiAxODY6XHRcbiAxODc6XHRvdXRfZnJlZV9hdHRyOlxuIDE4ODpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSk7XG4gMTg5Olx0b3V0X2ZyZWVfdGltZXI6XG4gMTkwOlx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyKTtcbiAxOTE6XHRvdXQ6XG4gMTkyOlx0XHRyZXR1cm4gcmV0O1xuIDE5MzpcdH1cbiAxOTQ6XHRcbiAxOTU6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxuIDE5NjpcdHtcbiAxOTc6XHRcdGludCByZXQ7XG4gMTk4Olx0XG4gMTk5Olx0XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIDIwMDpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJJiMzOTt2ZSBzZWVuIGl0LCBJIHVuZGVyc3RhbmQgdGhlIGJhc2ljIHB1cnBvc2UsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGFsd2F5cyBpbiB0aGUgY29udGV4dC4gU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZXN0IG9mIHRoaXMgZmlsZS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjYWxsLCBhbmQgb2YgY291cnNlLCB3aGVyZSBpbiB0aGUgY29kZSB0aGlzIHRoaW5nIGlzIGV2ZW4gYmVpbmcgaW52b2tlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IOKAkyB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgYmVoaW5kIGl0cyBleGVjdXRpb24uIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBoaWdobGlnaHQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmVzb3VyY2UgY29uc3RyYWludHMgb3IgbWF5YmUgZXZlbiBoaW50IGF0IGhvdyB0aGUgdGltZXJzIGFyZSBtYW5hZ2VkIGFuZCBkZXN0cm95ZWQsIHdoaWNoIGlzIGFsd2F5cyB1c2VmdWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRvdXQ6XG4gMjUxOlx0XHRyZXR1cm4gcmV0O1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIFRoZSBhY3R1YWwgeHRfdGFibGVzIHBsdWdpbi5cbiAyNTY6XHQgKi9cbiAyNTc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNTg6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiAyNTk6XHR7XG4gMjYwOlx0XHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gMjYxOlx0XG4gMjYyOlx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiAyNjM6XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldHVybiBYVF9DT05USU5VRTtcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0LypcbiAyNjk6XHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXG4gMjcwOlx0ICovXG4gMjcxOlx0c3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsXG4gMjcyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gMjczOlx0e1xuIDI3NDpcdFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDI3NTpcdFxuIDI3NjpcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMjc3Olx0XHRcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cdTAwM2V0aW1lciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyNzg6XHRcdH0gZWxzZSB7XG4gMjc5Olx0XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDI4MDpcdFx0XHRcdFx0c2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMjgxOlx0XHR9XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gWFRfQ09OVElOVUU7XG4gMjg0Olx0fVxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2hlbHBlcihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pXG4gMjg3Olx0e1xuIDI4ODpcdFx0aWYgKGluZm8tXHUwMDNldGltZW91dCA9PSAwKSB7XG4gMjg5Olx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXFxuXCYjMzQ7KTtcbiAyOTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjkxOlx0XHR9XG4gMjkyOlx0XHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbiAyOTM6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuIDI5NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTU6XHRcdH1cbiAyOTY6XHRcdGlmIChpbmZvLVx1MDAzZWxhYmVsWzBdID09ICYjMzk7XFwwJiMzOTsgfHxcbiAyOTc6XHRcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gMjk4Olx0XHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuIDI5OTpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2xhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwmIzM0Oyk7XG4gMzAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwMTpcdFx0fVxuIDMwMjpcdFx0cmV0dXJuIDA7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdFxuIDMwNjpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gMzA3Olx0e1xuIDMwODpcdFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDMwOTpcdFx0aW50IHJldDtcbiAzMTA6XHRcbiAzMTE6XHRcdHJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoaW5mbyk7XG4gMzEyOlx0XHRpZihyZXQgXHUwMDNjIDApXG4gMzEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzMTU6XHRcbiAzMTY6XHRcdGluZm8tXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXHUwMDNlbGFiZWwpO1xuIDMxNzpcdFx0aWYgKGluZm8tXHUwMDNldGltZXIpIHtcbiAzMTg6XHRcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMzE5Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDMyMDpcdFx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIDMyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMyMjpcdFx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiAzMjU6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMzI2Olx0XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAzMjc6XHRcdH0gZWxzZSB7XG4gMzI4Olx0XHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7XG4gMzI5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzMzA6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gMzMxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMzI6XHRcdFx0fVxuIDMzMzpcdFx0fVxuIDMzNDpcdFxuIDMzNTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDMzNjpcdFx0cmV0dXJuIDA7XG4gMzM3Olx0fVxuIDMzODpcdFxuIDMzOTpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gMzQwOlx0e1xuIDM0MTpcdFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDM0MjpcdFx0aW50IHJldDtcbiAzNDM6XHRcbiAzNDQ6XHRcdGlmIChpbmZvLVx1MDAzZXNlbmRfbmxfbXNnKVxuIDM0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTtcbiAzNDg6XHRcdGlmKHJldCBcdTAwM2MgMClcbiAzNDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIExpbmVzIDM1MC00MjA6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBteSBpbnRlcm5hbCBwcm9jZXNzIGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYSBzcGVjaWZpYyBibG9jayBvZiB0ZXh0LCBsaW5lcyAzNTAgdG8gNDIwLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGZldyBsaWtlbHkgcmVhc29ucy4gUGVyaGFwcyBJJiMzOTt2ZSBiZWVuIGRpcmVjdGVkIHRvIGFuYWx5emUgdGhpcyBzZWN0aW9uIGZvciBhIHBhcnRpY3VsYXIgY29uY2VwdCwgYXJndW1lbnQsIG9yIHBlcmhhcHMgaXQgaXMgcGFydCBvZiBhIGxhcmdlciBhcmd1bWVudC4gTWF5YmUgdGhpcyBpcyBhIHJlbGV2YW50IHNlZ21lbnQgaW4gd2hpY2ggdG8gZXhwbG9yZSB0aGUgdmFsaWRpdHkgb2YgbXkgaHlwb3RoZXNlcy4gUGVyaGFwcyBJIGFtIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwga2V5IHBvaW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGJvZHkgb2Ygd29yay4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSB0ZXh0JiMzOTtzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcbiAzNTE6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiAzNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzUzOlx0XG4gMzU0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDM1NTpcdFxuIDM1NjpcdFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gMzU3Olx0XHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIDM1ODpcdFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuIDM1OTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzNjA6XHRcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbiAzNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjI6XHRcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCYjNDM7JiM0Mzs7XG4gMzY1Olx0XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDM2NjpcdFx0XHRcdC8qIGNhbGN1bGF0ZSByZW1haW5pbmcgZXhwaXJ5IHRpbWUgKi9cbiAzNjc6XHRcdFx0XHRrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWFsYXJtKTtcbiAzNjg6XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpO1xuIDM2OTpcdFxuIDM3MDpcdFx0XHRcdGlmIChrdGltZXNwZWMudHZfc2VjIFx1MDAzZSAwKVxuIDM3MTpcdFx0XHRcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKGluZm8tXHUwMDNldGltZXIsIHRvdXQpO1xuIDM3MjpcdFx0XHR9IGVsc2Uge1xuIDM3MzpcdFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMzc0Olx0XHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDM3NTpcdFx0XHR9XG4gMzc2Olx0XHR9IGVsc2Uge1xuIDM3NzpcdFx0XHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xuIDM3ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMzc5Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDM4MDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzgxOlx0XHRcdH1cbiAzODI6XHRcdH1cbiAzODM6XHRcbiAzODQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzODU6XHRcdHJldHVybiAwO1xuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4gMzg5Olx0e1xuIDM5MDpcdFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDM5MTpcdFxuIDM5MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzOTM6XHRcbiAzOTQ6XHRcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4gMzk1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzOTY6XHRcdFx0cmV0dXJuO1xuIDM5NzpcdFx0fVxuIDM5ODpcdFxuIDM5OTpcdFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gNDAwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gNDAxOlx0XG4gNDAyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIpO1xuIDQwMzpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmspO1xuIDQwNDpcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiA0MDU6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDQwNjpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lcik7XG4gNDA3Olx0fVxuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiA0MTA6XHR7XG4gNDExOlx0XHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gNDEyOlx0XG4gNDEzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDQxNDpcdFxuIDQxNTpcdFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbiA0MTY6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDQxNzpcdFx0XHRyZXR1cm47XG4gNDE4Olx0XHR9XG4gNDE5Olx0XG4gNDIwOlx0XHRsaXN0X2RlbChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWVudHJ5KTtcbiA0MjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDQyNDpcdFx0XHRhbGFybV9jYW5jZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gNDI1Olx0XHR9IGVsc2Uge1xuIDQyNjpcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIpO1xuIDQyNzpcdFx0fVxuIDQyODpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmspO1xuIDQyOTpcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRExFVElNRVIgVGFyZ2V0IGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGB4dF9JRExFVElNRVJgLCB3aGljaCBpcyBhbiBpcHRhYmxlcy94X3RhYmxlcyB0YXJnZXQgZXh0ZW5zaW9uLiBJdCYjMzk7cyByZWdpc3RlcmVkIHZpYSBgeHRfcmVnaXN0ZXJfdGFyZ2V0c2AuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBpdCBpbiBhIHR5cGljYWwgc3l6a2FsbGVyL1FFTVUgc2V0dXA/IFllcywgd2UgY2FuLCB1c2luZyBpcHRhYmxlcy94X3RhYmxlcyYjMzk7IGBzZXRzb2Nrb3B0YCB3aXRoIGBJUFRfU09fU0VUX1JFUExBQ0VgLCBvciB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIGBuZl90YWJsZXNgIGNvbXBhdGliaWxpdHksIG9yIGV2ZW4gc3RhbmRhcmQgYGlwdGFibGVzYCBzb2NrZXQgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGBJRExFVElNRVJgIHRhcmdldC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGV5IHVzZWQgYGttYWxsb2Nfb2JqYCBvbiB0aGUgYGluZm8tJmd0O3RpbWVyYCBzdHJ1Y3QsIHdoaWNoIGxlYXZlcyBwYXJ0cyBvZiB0aGUgc3RydWN0IHVuaW5pdGlhbGl6ZWQuICBJIHJlbWVtYmVyIGBpZGxldGltZXJfdGdfY3JlYXRlYCAodjApIHVzZWQgYGt6YWxsb2Nfb2JqYC4uLiBzbyB0aGV5IGNoYW5nZWQgaXQgYW5kIGJyb2tlIGl0ISBUaGlzIGlzIGJhZCBuZXdzLCBiZWNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBgc3RydWN0IGlkbGV0aW1lcl90Z2AgY2FuIGRlZmluaXRlbHkgbGVhZCB0byBidWdzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiwgZXNwZWNpYWxseSB3aXRoIGZpZWxkcyBpbiBgc3RydWN0IHRpbWVyX2xpc3RgLCBgc3RydWN0IGFsYXJtYCwgYHRpbWVyX3R5cGVgLCBvciBwb2ludGVycyBnb2luZyBoYXl3aXJlLCBvciBpbiBmdW5jdGlvbnMgbGlrZSBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgIGFuZCBgaWRsZXRpbWVyX3RnX3Nob3dgLiAgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29ycmVjdGx5IHVzaW5nIGBremFsbG9jX29iamAgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4KClRoaXMgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaW1lIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgYFdvcnRoRnV6emluZ2AuCgoqICAgKipTdWJzeXN0ZW06KiogSXQmIzM5O3MgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIEdvb2Qgc3RhcnQuCiogICAqKlJlYWNoYWJsZToqKiBZZXMsIHdlIGNhbiBjb25maWd1cmUgaXQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMsIG5ldGxpbmssIGlwdGFibGVzLCBldGMuCiogICAqKk5vbi1rZXJuZWwvTm9uLWV4ZWN1dGFibGU6KiogTm8sIGl0JiMzOTtzIHB1cmUgQyBsb2dpYyB3aXRoaW4gYSBrZXJuZWwgbW9kdWxlLCBzbyBpdCYjMzk7cyBmYWlyIGdhbWUuCiogICAqKlVucmVhY2hhYmxlIEhhcmR3YXJlOioqIEl0JiMzOTtzIHNvZnR3YXJlLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCiogICAqKlRlYXJkb3duLW9ubHkgb3Igbm9uLUFNRDY0OioqIE5vLCBkb2VzbiYjMzk7dCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBXZSYjMzk7dmUgZ290IGEgcmVhY2hhYmxlLCBleHBsb2l0YWJsZSBjaGFuZ2UgaW4gZXhlY3V0YWJsZSBrZXJuZWwgY29kZSEKCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGluIGB4dF9JRExFVElNRVIuY2A/IFdlJiMzOTt2ZSBnb3Q6CgoqICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIChhIHN0YXRpYyBmdW5jdGlvbjsgd2UmIzM5O2xsIGNoZWNrIGl0cyBjYWxsIGNoYWluIHZpYSBgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFgIHRvIGNoZWNrIGZvciBpbmxpbmluZyBwb3NzaWJpbGl0aWVzKS4KKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAKKiAgIGBpZGxldGltZXJfdGdfdGFyZ2V0X3YxYAoqICAgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYAoqICAgYGlkbGV0aW1lcl90Z19zaG93YAoqICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgCgpgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaXMgaW5kZWVkIHN0YXRpYzogYHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pYC4gIFRoZSBvdGhlcnMgYXJlIHRoZSB0eXBpY2FsIHRhcmdldCBvcGVyYXRpb25zIGNhbGxiYWNrcy4gU28sIG91ciBmb2N1cyBzeW1ib2xzIGFyZToKCiogICBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAKKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAKKiAgIGBpZGxldGltZXJfdGdfdGFyZ2V0X3YxYAoqICAgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYAoKRmluYWxseSwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGlzPyBXZSBkZWZpbml0ZWx5IG5lZWQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYC4gIFdlIGNhbiBjaGVjayBkZXBlbmRlbmNpZXMuIFRoZSBLY29uZmlnIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGNvbmZpcm1zOgoKYGBgCmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUgoJdHJpc3RhdGUgJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnQmIzM0OwoJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKYGBgCgpTbyB3ZSBhbHNvIG5lZWQgYE5FVEZJTFRFUmAgKGJhc2UpLCBgTkVURklMVEVSX1hUQUJMRVNgIGFuZCBvZiBjb3Vyc2UsIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAuIFRpbWUgdG8gY2hlY2sgYHh0X0lETEVUSU1FUi5jYCBmb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgYGdyZXBgIGZvciBgQ09ORklHX2Agb3IgYGlmZGVmYCB3aXRoaW4gdGhlIGZpbGUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZkZWZ8Q09ORklHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jPTQzNT1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpZGxldGltZXJfdGdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMtNDU2LVx0fSxcbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmM6NDU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpXG5uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jLTQ1OC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIHh0X0lETEVUSU1FUi5jJiMzOTtzIFRhaWwgRW5kKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZXkgbGVmdCBvZmYgd2l0aCB0aGlzIG1vZHVsZSwgZXNwZWNpYWxseSBhZnRlciB0aGF0IGxhc3QgY29kZSByZXZpZXcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbGF0ZXN0IGNvbW1pdHMgdG91Y2hlZC4gV2VyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyBmaXhlcyBpbiB0aGUgY2xlYW51cCBmdW5jdGlvbnM/IEFueSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRvIHRoZSBpZGxlIHRpbWVyIGl0c2VsZiB0aGF0IG1pZ2h0IGhhdmUgc251Y2sgaW4gdGhlcmU/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBlZGdlIGNhc2VzIGR1cmluZyB0ZWFyZG93biwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gdGhvc2Ugc2hhcmVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIHlvdSBrbm93LiBNYWtlIHN1cmUgdGhlIG11dGV4ZXMgYXJlIGJlaW5nIHJlbGVhc2VkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGUtaW5pdCByb3V0aW5lcyBmaXJzdCwgdGhlbiBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nLiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiA0MzE6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDQzMjpcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcbiA0MzU6XHRzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpZGxldGltZXJfdGdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuIDQzNjpcdFx0e1xuIDQzNzpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0Mzg6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNCxcbiA0Mzk6XHRcdFx0LnRhcmdldFx0XHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXG4gNDQwOlx0XHRcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxuIDQ0MTpcdFx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXG4gNDQyOlx0XHRcdC5jaGVja2VudHJ5XHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5LFxuIDQ0MzpcdFx0XHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcbiA0NDQ6XHRcdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4gNDQ1Olx0XHR9LFxuIDQ0NjpcdFx0e1xuIDQ0NzpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NDg6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNCxcbiA0NDk6XHRcdFx0LnJldmlzaW9uXHQ9IDEsXG4gNDUwOlx0XHRcdC50YXJnZXRcdFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxuIDQ1MTpcdFx0XHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxKSxcbiA0NTI6XHRcdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxuIDQ1MzpcdFx0XHQuY2hlY2tlbnRyeVx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcbiA0NTQ6XHRcdFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXG4gNDU1Olx0XHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuIDQ1NjpcdFx0fSxcbiA0NTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVA2X05GX0lQVEFCTEVTKVxuIDQ1ODpcdFx0e1xuIDQ1OTpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NjA6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbiA0NjE6XHRcdFx0LnRhcmdldFx0XHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXG4gNDYyOlx0XHRcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxuIDQ2MzpcdFx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXG4gNDY0Olx0XHRcdC5jaGVja2VudHJ5XHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5LFxuIDQ2NTpcdFx0XHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcbiA0NjY6XHRcdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4gNDY3Olx0XHR9LFxuIDQ2ODpcdFx0e1xuIDQ2OTpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NzA6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbiA0NzE6XHRcdFx0LnJldmlzaW9uXHQ9IDEsXG4gNDcyOlx0XHRcdC50YXJnZXRcdFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxuIDQ3MzpcdFx0XHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxKSxcbiA0NzQ6XHRcdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxuIDQ3NTpcdFx0XHQuY2hlY2tlbnRyeVx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcbiA0NzY6XHRcdFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXG4gNDc3Olx0XHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuIDQ3ODpcdFx0fSxcbiA0Nzk6XHQjZW5kaWZcbiA0ODA6XHR9O1xuIDQ4MTpcdFxuIDQ4MjpcdHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlkbGV0aW1lcl90Z19jbGFzcztcbiA0ODM6XHRcbiA0ODQ6XHRzdGF0aWMgc3RydWN0IGRldmljZSAqaWRsZXRpbWVyX3RnX2RldmljZTtcbiA0ODU6XHRcbiA0ODY6XHRzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIDQ4NzpcdHtcbiA0ODg6XHRcdGludCBlcnI7XG4gNDg5Olx0XG4gNDkwOlx0XHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCYjMzQ7eHRfaWRsZXRpbWVyXCYjMzQ7KTtcbiA0OTE6XHRcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKTtcbiA0OTI6XHRcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKSkge1xuIDQ5MzpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIGRldmljZSBjbGFzc1xcblwmIzM0Oyk7XG4gNDk0Olx0XHRcdGdvdG8gb3V0O1xuIDQ5NTpcdFx0fVxuIDQ5NjpcdFxuIDQ5NzpcdFx0aWRsZXRpbWVyX3RnX2RldmljZSA9IGRldmljZV9jcmVhdGUoaWRsZXRpbWVyX3RnX2NsYXNzLCBOVUxMLFxuIDQ5ODpcdFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwmIzM0O3RpbWVyc1wmIzM0Oyk7XG4gNDk5Olx0XHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xuIDUwMDpcdFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkge1xuIDUwMTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcXG5cJiMzNDspO1xuIDUwMjpcdFx0XHRnb3RvIG91dF9jbGFzcztcbiA1MDM6XHRcdH1cbiA1MDQ6XHRcbiA1MDU6XHRcdGlkbGV0aW1lcl90Z19rb2JqID0gXHUwMDI2aWRsZXRpbWVyX3RnX2RldmljZS1cdTAwM2Vrb2JqO1xuIDUwNjpcdFxuIDUwNzpcdFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XG4gNTA4Olx0XG4gNTA5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDYxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElETEVUSU1FUiBOZXRmaWx0ZXIgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAsIHNwZWNpZmljYWxseSB0aGUgc3dpdGNoIGZyb20gYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBmdXp6YWJsZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFzIGluZGljYXRlZCBieSBsaW5lcyA5MTgtOTIwLiBGdXJ0aGVybW9yZSwgdGhlIGBNYWtlZmlsZWAgY29uZmlybXMgaXRzIGluY2x1c2lvbjogYG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgJiM0Mzs9IHh0X0lETEVUSU1FUi5vYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBORVRGSUxURVJfWFRBQkxFU2AgaXMgYWxzbyBwcm9iYWJseSBuZWVkZWQuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgLgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCwgYGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxYCwgYGlkbGV0aW1lcl90Z190YXJnZXRfdjFgLCBhbmQgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBEb2VzIHRoaXMgbWFrZSBmb3IgYSBnb29kIGZ1enogdGFyZ2V0PyBUaGUgcmVhc29uaW5nIGNsZWFybHkgc3RhdGVzIHRoZSBjaGFuZ2UgaW52b2x2ZXMgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAuIFdlJiMzOTtyZSBnb2luZyBmcm9tIHJlZ3VsYXIgYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBDcnVjaWFsbHksIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGlwdGFibGVzIHJ1bGVzLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHllcywgdGhpcyBsb29rcyBsaWtlIGEgd29ydGh3aGlsZSBmdXp6IHRhcmdldC4KCkkmIzM5O20gY29uZmlkZW50IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmQ5NGNlYjc3MGQxNzViNmVjOWI2OGVlNDlkMjRiYTU0NzdiMDUxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDA6MjU6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwppbmRleCBmZTdkOGQxOTYyOWI0Li44YTFkOTVkMjE5OTE3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKQEAgLTE5Niw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbykKIHsKIAlpbnQgcmV0OwogCi0JaW5mby0mZ3Q7dGltZXIgPSBrbWFsbG9jX29iaigqaW5mby0mZ3Q7dGltZXIpOwomIzQzOwlpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiAJaWYgKCFpbmZvLSZndDt0aW1lcikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElETEVUSU1FUiBNb2R1bGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGB4dF9JRExFVElNRVIuY2AgbW9kdWxlIHdpdGhpbiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIE5vIHNlbnNlIGluIHN0YXJ0aW5nIGJsaW5kLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGFuZCBhbGxvdyBtZSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAxODE6XHRcbiAxODI6XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDE4MzpcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDE4NDpcdFxuIDE4NTpcdFx0cmV0dXJuIDA7XG4gMTg2Olx0XG4gMTg3Olx0b3V0X2ZyZWVfYXR0cjpcbiAxODg6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDE4OTpcdG91dF9mcmVlX3RpbWVyOlxuIDE5MDpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lcik7XG4gMTkxOlx0b3V0OlxuIDE5MjpcdFx0cmV0dXJuIHJldDtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiAxOTY6XHR7XG4gMTk3Olx0XHRpbnQgcmV0O1xuIDE5ODpcdFxuIDE5OTpcdFx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiAyMDA6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIDIwMTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDIwMjpcdFx0XHRnb3RvIG91dDtcbiAyMDM6XHRcdH1cbiAyMDQ6XHRcbiAyMDU6XHRcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVx1MDAzZWxhYmVsKSk7XG4gMjA2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDIwNzpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDIwODpcdFxuIDIwOTpcdFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAyMTA6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuIDIxMTpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gMjEyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMjEzOlx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMjE0Olx0XHR9XG4gMjE1Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcbiAyMTY6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5zaG93ID0gaWRsZXRpbWVyX3RnX3Nob3c7XG4gMjE3Olx0XG4gMjE4Olx0XHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDIxOTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDIyMDpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1xcblwmIzM0Oyk7XG4gMjIxOlx0XHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiAyMjI6XHRcdH1cbiAyMjM6XHRcbiAyMjQ6XHRcdC8qICBub3RpZnkgdXNlcnNwYWNlICAqL1xuIDIyNTpcdFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xuIDIyNjpcdFxuIDIyNzpcdFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuIDIyODpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIDIyOTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIDIzMDpcdFxuIDIzMTpcdFx0SU5JVF9XT1JLKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xuIDIzMjpcdFxuIDIzMzpcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMjM0Olx0XHRcdGFsYXJtX2luaXQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSwgQUxBUk1fQk9PVFRJTUUsXG4gMjM1Olx0XHRcdFx0ICAgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyk7XG4gMjM2Olx0XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYWxhcm0uZGF0YSA9IGluZm8tXHUwMDNldGltZXI7XG4gMjM3Olx0XHRcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cdTAwM2V0aW1lciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyMzg6XHRcdH0gZWxzZSB7XG4gMjM5Olx0XHRcdHRpbWVyX3NldHVwKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcbiAyNDA6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMjQxOlx0XHRcdFx0XHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdHJldHVybiAwO1xuIDI0NTpcdFxuIDI0NjpcdG91dF9mcmVlX2F0dHI6XG4gMjQ3Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiAyNDg6XHRvdXRfZnJlZV90aW1lcjpcbiAyNDk6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDI1MDpcdG91dDpcbiAyNTE6XHRcdHJldHVybiByZXQ7XG4gMjUyOlx0fVxuIDI1MzpcdFxuIDI1NDpcdC8qXG4gMjU1Olx0ICogVGhlIGFjdHVhbCB4dF90YWJsZXMgcGx1Z2luLlxuIDI1NjpcdCAqL1xuIDI1NzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDI1ODpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIDI1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSURMRVRJTUVSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYElETEVUSU1FUmAgdGFyZ2V0IHdpdGhpbiBOZXRmaWx0ZXIuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYCByaWdodCBub3cuIE15IGtleSBpbnRlcmVzdCBpcyBhcm91bmQgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgdGFyZ2V0IGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb24gMCBhbmQgdmVyc2lvbiAxIHRoYXQgd2VyZSBpbXBsZW1lbnRlZC4gSSBhbHNvIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBzdHJ1Y3QgYWN0dWFsbHkgKmNvbnRhaW5zKi4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGRlZmluZWQgaW5zaWRlIG9mIHRoZSBzdHJ1Y3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBicmVhayBpdCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0ICAgICFzdHJjbXAobmFtZSwgXCYjMzQ7dWV2ZW50XCYjMzQ7KSlcbiAxNDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQyOlx0XG4gMTQzOlx0XHRyZXR1cm4gMDtcbiAxNDQ6XHR9XG4gMTQ1Olx0XG4gMTQ2Olx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiAxNDc6XHR7XG4gMTQ4Olx0XHRpbnQgcmV0O1xuIDE0OTpcdFxuIDE1MDpcdFx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiAxNTE6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIDE1MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDE1MzpcdFx0XHRnb3RvIG91dDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVx1MDAzZWxhYmVsKSk7XG4gMTU3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE1ODpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDE1OTpcdFxuIDE2MDpcdFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAxNjE6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuIDE2MjpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gMTYzOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTY0Olx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMTY1Olx0XHR9XG4gMTY2Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcbiAxNjc6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5zaG93ID0gaWRsZXRpbWVyX3RnX3Nob3c7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDE3MDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE3MTpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1xcblwmIzM0Oyk7XG4gMTcyOlx0XHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiAxNzM6XHRcdH1cbiAxNzQ6XHRcbiAxNzU6XHRcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbiAxNzY6XHRcbiAxNzc6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcbiAxNzg6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAxODE6XHRcbiAxODI6XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDE4MzpcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDE4NDpcdFxuIDE4NTpcdFx0cmV0dXJuIDA7XG4gMTg2Olx0XG4gMTg3Olx0b3V0X2ZyZWVfYXR0cjpcbiAxODg6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDE4OTpcdG91dF9mcmVlX3RpbWVyOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSWRsZXRpbWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGttYWxsb2Nfb2JqYCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBpbmZvLSZndDt0aW1lcmAsIGJ1dCB0aGUgcGF0Y2ggc3dhcHMgdGhhdCBvdXQgZm9yIGBremFsbG9jX29iamAuIEFoLCB0aGUgbGlnaHRidWxiIG1vbWVudCEgVGhpcyBpcyBjbGVhcmx5IGEgZml4IGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gSSByZWNhbGwgdGhhdCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBtZW1vcnkgYnV0IGRvZXNuJiMzOTt0IHplcm8gaXQsIHdoZXJlYXMgYGt6YWxsb2Nfb2JqYCBkb2VzLiBUaGlzIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQmIzM5O3Mgc3VidGxlLCBidXQgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgc3RhcnRzIHdpdGggY2xlYW4gZGF0YS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGlkbGV0aW1lcl90Z19jcmVhdGVgIGFscmVhZHkgdXNpbmcgYGt6YWxsb2Nfb2JqYD8gU28sIHRoaXMgcGF0Y2ggYnJpbmdzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBvZiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaW4gbGluZSB3aXRoIGl0cyBzaWJsaW5nIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gQ29uc2lzdGVuY3kgaXMgZ29vZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aW1lciBzdHJ1Y3R1cmVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBpZGxldGltZXJfdGdgIHdlcmUgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBhbmQgY2F1c2luZyBwcm9ibGVtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3R1cmUgYWN0dWFsbHkgY29udGFpbnMuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGxpbnV4L25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIE5ldGZpbHRlciBtb2R1bGUgdG8gdHJpZ2dlciBhIHRpbWVyIHdoZW4gcGFja2V0IG1hdGNoZXMuXG4gICA2Olx0ICogQWZ0ZXIgdGltZXIgZXhwaXJlcyBhIGtldmVudCB3aWxsIGJlIHNlbnQuXG4gICA3Olx0ICpcbiAgIDg6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTm9raWEgQ29ycG9yYXRpb25cbiAgIDk6XHQgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgXHUwMDNjZXh0LXRpbW8udGVyYXNAbm9raWEuY29tXHUwMDNlXG4gIDEwOlx0ICpcbiAgMTE6XHQgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIHJld29ya2VkIGZvciB1cHN0cmVhbSBpbmNsdXNpb25cbiAgMTI6XHQgKiBieSBMdWNpYW5vIENvZWxobyBcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cdTAwM2VcbiAgMTM6XHQgKlxuICAxNDpcdCAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIFx1MDAzY2x1Y2lhbm8uY29lbGhvQG5va2lhLmNvbVx1MDAzZVxuICAxNTpcdCAqL1xuICAxNjpcdFxuICAxNzpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gIDE4Olx0XG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWxhcm10aW1lci5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZGV2X3QuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuICAzMTpcdFxuICAzMjpcdHN0cnVjdCBpZGxldGltZXJfdGcge1xuICAzMzpcdFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcbiAgMzQ6XHRcdHN0cnVjdCBhbGFybSBhbGFybTtcbiAgMzU6XHRcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuICAzNjpcdFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gIDM3Olx0XG4gIDM4Olx0XHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbiAgMzk6XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7XG4gIDQwOlx0XG4gIDQxOlx0XHR1bnNpZ25lZCBpbnQgcmVmY250O1xuICA0MjpcdFx0dTggdGltZXJfdHlwZTtcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBMSVNUX0hFQUQoaWRsZXRpbWVyX3RnX2xpc3QpO1xuICA0NjpcdHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9tdXRleCk7XG4gIDQ3Olx0XG4gIDQ4Olx0c3RhdGljIHN0cnVjdCBrb2JqZWN0ICppZGxldGltZXJfdGdfa29iajtcbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWNcbiAgNTE6XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICpfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGNvbnN0IGNoYXIgKmxhYmVsKVxuICA1MjpcdHtcbiAgNTM6XHRcdHN0cnVjdCBpZGxldGltZXJfdGcgKmVudHJ5O1xuICA1NDpcdFxuICA1NTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QsIGVudHJ5KSB7XG4gIDU2Olx0XHRcdGlmICghc3RyY21wKGxhYmVsLCBlbnRyeS1cdTAwM2VhdHRyLmF0dHIubmFtZSkpXG4gIDU3Olx0XHRcdFx0cmV0dXJuIGVudHJ5O1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzgKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogNjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJlYXNvbmluZyBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiAqYHN0cnVjdCBpZGxldGltZXJfdGdgIGlzIHRoZSBrZXkgc3RydWN0IGhlcmUsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBpdHMgYWxsb2NhdGlvbi4gYGttYWxsb2Nfb2JqYCB3YXMgdXNlZCBwcmV2aW91c2x5LCBtZWFuaW5nIGZpZWxkcyBsaWtlIGBrb2JqYCwgcG90ZW50aWFsbHkgZXZlbiBgYWxhcm1gIGFuZCBgdGltZXJgIGRlcGVuZGluZyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgY291bGQgaGF2ZSBoZWxkIHVuaW5pdGlhbGl6ZWQgZGF0YS4gWWVzLCBgYWxhcm1faW5pdGAgb3IgYHRpbWVyX3NldHVwYCBoYW5kbGVzIHNvbWUgb2YgdGhlbSwgYnV0IG5vdCBuZWNlc3NhcmlseSBhbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3QuKgoKKk5vdywgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiB0byBga3phbGxvY19vYmpgLiBFZmZlY3RpdmVseSwgaXQgaXMgKipmaXhpbmcqKiBhIHBvdGVudGlhbCBwcm9ibGVtIGJ5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBpZGxldGltZXJfdGdgIHVwb24gYWxsb2NhdGlvbi4gQnJpbGxpYW50ISBJdCBlbGltaW5hdGVzIHRoZSByaXNrLioKCipEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgcmlza3M/IEFic29sdXRlbHkgbm90LiBJdCByZW1vdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5ICpndWFyYW50ZWVpbmcqIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgZ29vZC4qCgoqVGltZSB0byBjb25zaWRlciB0aGUgS01TQU4gcnVsZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOioKKiAgICpSdWxlIDE6IFN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOby4qCiogICAqUnVsZSAyOiBDb25kaXRpb25hbCBsb2dpYyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBtZW1vcnkgaXMgemVyb2VkIG91dC4qCiogICAqUnVsZSAzOiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQuKgoqICAgKlJ1bGUgNDogQm91bmRzIGNoZWNrcyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhPyBOby4qCgoqVGhlIG9wcG9zaXRlIGlzIHRydWUgLSBieSB1c2luZyBga3phbGxvY19vYmpgLCBhbGwgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdCBpZGxldGltZXJfdGdgIGFyZSB6ZXJvZWQgb3V0Ki4KCipUaGVyZWZvcmUsIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZTogYE5lZWRzS01TQU4gPSBmYWxzZWAuKgoKKkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdlIGNhbiBmaW5kIGBpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7YCBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXIsIHNvIHRoZSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4gVGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW1wbG95ZWQgaGVyZS4qCgoqVGhlIEtNU0FOIHJlYXNvbmluZyB3aWxsIGJlIGFzIGNvbmNpc2UgYXMgcG9zc2libGUuKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb24gKGBrbWFsbG9jX29iamApIHdpdGggYSB6ZXJvLWluaXRpYWxpemluZyBhbGxvY2F0aW9uIChga3phbGxvY19vYmpgKSBmb3IgYHN0cnVjdCBpZGxldGltZXJfdGdgIGluIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxKClgLiBUaGlzIGNoYW5nZSBmaXhlcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyByaXNrcyBvciBleHBvc3VyZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbGwgZmllbGRzIGluIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGFyZSBub3cgZnVsbHkgemVyb2VkIHVwb24gYWxsb2NhdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MTguMTQ3MDM1NDU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNzQxNjc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxldGltZXJfdGdfY3JlYXRlX3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX3RhcmdldF92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpIGluIG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgdG8gdXNlIGt6YWxsb2Nfb2JqIGluc3RlYWQgb2Yga21hbGxvY19vYmogd2hlbiBhbGxvY2F0aW5nIHRoZSBpZGxldGltZXJfdGcgc3RydWN0LCBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgeHRhYmxlcyB0YXJnZXQgY29uZmlndXJhdGlvbiBhbmQgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToxOC4xNDcwNDA4ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzQxMDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMDoyNToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGluZm8tXFx1MDAzZXRpbWVyID0ga21hbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0aW5mby1cXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cXHUwMDNldGltZXIpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToxOC43MDE0MTI2MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNzU1NjMyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWRsZXRpbWVyX3RnX2NyZWF0ZV92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z190YXJnZXRfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19kZXN0cm95X3YxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpIGluIG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgdG8gdXNlIGt6YWxsb2Nfb2JqIGluc3RlYWQgb2Yga21hbGxvY19vYmogd2hlbiBhbGxvY2F0aW5nIHRoZSBpZGxldGltZXJfdGcgc3RydWN0LCBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgeHRhYmxlcyB0YXJnZXQgY29uZmlndXJhdGlvbiBhbmQgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4rXHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MTguNzAxNDE1MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU1NDc0MDYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElETEVUSU1FUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYDogYSBga21hbGxvY19vYmpgIGNhbGwgaXMgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGEgYGt6YWxsb2Nfb2JqYCBjYWxsLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBgaW5mby1cdTAwM2V0aW1lcmAgZmllbGQuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQsIHdoaWNoIGlzIGdvb2QgdGhleSBhcmUgYWRkcmVzc2luZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgYXJvdW5kIGxpbmUgMTk2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGF0IGBpbmZvLVx1MDAzZXRpbWVyYCBzdHJ1Y3R1cmUg4oCTIGl0cyBkZWZpbml0aW9uLCBob3cgaXQncyB1c2VkIGJlZm9yZSBhbmQgYWZ0ZXIgYWxsb2NhdGlvbiwgYW5kIGltcG9ydGFudGx5LCBob3cgdGhpcyB0aW1lciBpcyAqaW5pdGlhbGl6ZWQqIGFmdGVyIGFsbG9jYXRpb24gKG9yLCBwcmV2aW91c2x5LCBsYWNrIHRoZXJlb2YpLiBJIG5lZWQgdG8gc2VlIGlmIHRoZSB6ZXJvaW5nIGlzIGFjdHVhbGx5ICpuZWNlc3NhcnkqIG9yIGp1c3QgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGB4dF9JRExFVElNRVJgIGlzIGFsc28gaW4gb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MjIuMjU2MTU4NDQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTcxOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAxNzg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDE4MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcbiAxODc6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMTg4OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDE4OTpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMTkwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTkxOlxcdG91dDpcXG4gMTkyOlxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpbnQgcmV0O1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDIwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIDIwMTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAyMDI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXFx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cXHUwMDNlbGFiZWwpKTtcXG4gMjA2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyMDc6XFx0XFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0c3lzZnNfYXR0cl9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMjEwOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbiAyMTE6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDIxMzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcXG4gMjE2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMjE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIyMDpcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXFxuXFxcIik7XFxuIDIyMTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdC8qICBub3RpZnkgdXNlcnNwYWNlICAqL1xcbiAyMjU6XFx0XFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHRsaXN0X2FkZChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWVudHJ5LCBcXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xcbiAyMjg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlO1xcbiAyMjk6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIDIzNDpcXHRcXHRcXHRhbGFybV9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0sIEFMQVJNX0JPT1RUSU1FLFxcbiAyMzU6XFx0XFx0XFx0XFx0ICAgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyk7XFxuIDIzNjpcXHRcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0uZGF0YSA9IGluZm8tXFx1MDAzZXRpbWVyO1xcbiAyMzc6XFx0XFx0XFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVxcdTAwM2V0aW1lciwgaW5mby1cXHUwMDNldGltZW91dCk7XFxuIDIzODpcXHRcXHR9IGVsc2Uge1xcbiAyMzk6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAyNDA6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI0MTpcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdG91dF9mcmVlX2F0dHI6XFxuIDI0NzpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xcbiAyNDg6XFx0b3V0X2ZyZWVfdGltZXI6XFxuIDI0OTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjIyLjI1NjIzNjgyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTc2MzEwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeHRfSURMRVRJTUVSYCBOZXRmaWx0ZXIgRXh0ZW5zaW9uKipcblxuQWxyaWdodCwgc28gYHh0X0lETEVUSU1FUi5jYC4uLnRoYXQncyBhIG5ldGZpbHRlciB0YXJnZXQgZXh0ZW5zaW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbj8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiBpdCdzIGVuYWJsZWQgYW5kIGhvdyB0byBjb25maWd1cmUgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGFuZCBob3cgaXQgaXMgY29udHJvbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGBLY29uZmlnYCBoYXMgdG8gc2F5IGFib3V0IGB4dF9JRExFVElNRVJgLiBJIGV4cGVjdCB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIG1vZHVsZSwgcGVyaGFwcyBzb21lIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjI0LjMxMzg3MjAyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3NDU2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnPTc2PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3NzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnLTc4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnOjEyMzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZy0xMjQtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEPW1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MjAwPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjIwMTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjAyLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTIxNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTIxOC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQ9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjEyMzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy0xMjQtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc9MTE4PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnOjExOTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctMTIwLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9MTI1PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6MTI2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTEyNy1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTExNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy0xMTctQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZz0xMTc9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZzoxMTg6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctMTE5LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTExNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnLTExOC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTEzNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjEzNzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0xMzgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnPTExND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6MTE1OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMTE2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz0xMTU9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTExNy1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6MTE3OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy0xMTgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnPTExMT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc6MTEyOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMTEzLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MTEyPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MTEzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTExNC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTI0ND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjI0NTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0yNDYtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0yMzU9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyMzY6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjM3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cXHR0cmlzdGF0ZSAgXFxcIklETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg2PW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSArPSB4dF9UUkFDRS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSKSArPSB4dF9JRExFVElNRVIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToyNi42NjEzNDM0MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEyNzAzMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIExpbmUgOTE4IHNvdW5kcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbi4gTXkgbWVudGFsIG1hcCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIHByZXR0eSBzb2xpZCwgc28gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgZmFpcmx5IHNwZWNpZmljIG5lYXIgdGhhdCBsaW5lLiBJdCBjb3VsZCBiZSBhIHNwZWNpZmljIGZlYXR1cmUncyBlbmFibGUvZGlzYWJsZSBvcHRpb24sIG1heWJlIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiwgb3IgcGVyaGFwcyBzb21lIGhlbHAgdGV4dCB0aGF0IHdpbGwgaWxsdW1pbmF0ZSBteSBjdXJyZW50IHF1ZXJ5LiBJJ2xsIG1lbnRhbGx5IHByZXBhcmUgbXlzZWxmIHRvIHBhcnNlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBjbHVlcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToyOC40NzQwNDk0MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRcXG4gOTE2OlxcdFxcdFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkxNzpcXHRcXG4gOTE4OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxcbiA5MTk6XFx0XFx0dHJpc3RhdGUgIFxcXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuIDkyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA5MjE6XFx0XFx0aGVscFxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVInIHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XFxuIDkyNDpcXHRcXHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXFxuIDkyNTpcXHRcXHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXFxuIDkyNjpcXHRcXHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyOTpcXHRcXG4gOTMwOlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0xFRFxcbiA5MzE6XFx0XFx0dHJpc3RhdGUgJ1xcXCJMRURcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTIFxcdTAwMjZcXHUwMDI2IExFRFNfVFJJR0dFUlNcXG4gOTMzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDkzNDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjI4LjQ3NDE4MDM2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzczMzY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjb2RlLCBzdW1tYXJpemVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHh0X0lETEVUSU1FUi5jKipcblxuT2theSwgdGltZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgZXhhbWluaW5nIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gbWFwcGluZyBvdXQgZXZlcnl0aGluZyAtIGV2ZXJ5IGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluLCBldmVyeSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRob3NlIGZ1bmN0aW9ucywgYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kIGV2ZXJ5IHNpbmdsZSBwb2ludCB3aGVyZSB0aGV5IGFsbCBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBpcyBjcml0aWNhbC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGJlaW5nIGludm9rZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhpcyBJRExFVElNRVIgbW9kdWxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuIE5vIGRldGFpbCBjYW4gYmUgb3Zlcmxvb2tlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozMC42MTE1MjAyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGxpbnV4L25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBOZXRmaWx0ZXIgbW9kdWxlIHRvIHRyaWdnZXIgYSB0aW1lciB3aGVuIHBhY2tldCBtYXRjaGVzLlxcbiAgIDY6XFx0ICogQWZ0ZXIgdGltZXIgZXhwaXJlcyBhIGtldmVudCB3aWxsIGJlIHNlbnQuXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uXFxuICAgOTpcXHQgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgXFx1MDAzY2V4dC10aW1vLnRlcmFzQG5va2lhLmNvbVxcdTAwM2VcXG4gIDEwOlxcdCAqXFxuICAxMTpcXHQgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIHJld29ya2VkIGZvciB1cHN0cmVhbSBpbmNsdXNpb25cXG4gIDEyOlxcdCAqIGJ5IEx1Y2lhbm8gQ29lbGhvIFxcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cXHUwMDNlXFxuICAxMzpcXHQgKlxcbiAgMTQ6XFx0ICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gXFx1MDAzY2x1Y2lhbm8uY29lbGhvQG5va2lhLmNvbVxcdTAwM2VcXG4gIDE1OlxcdCAqL1xcbiAgMTY6XFx0XFxuICAxNzpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAxODpcXHRcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDIwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsYXJtdGltZXIuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmhcXHUwMDNlXFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2Rldl90LmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0cnVjdCBpZGxldGltZXJfdGcge1xcbiAgMzM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcXG4gIDM0OlxcdFxcdHN0cnVjdCBhbGFybSBhbGFybTtcXG4gIDM1OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xcbiAgMzY6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdHN0cnVjdCBrb2JqZWN0ICprb2JqO1xcbiAgMzk6XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0dW5zaWduZWQgaW50IHJlZmNudDtcXG4gIDQyOlxcdFxcdHU4IHRpbWVyX3R5cGU7XFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgTElTVF9IRUFEKGlkbGV0aW1lcl90Z19saXN0KTtcXG4gIDQ2OlxcdHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9tdXRleCk7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaWRsZXRpbWVyX3RnX2tvYmo7XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpY1xcbiAgNTE6XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChjb25zdCBjaGFyICpsYWJlbClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKmVudHJ5O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QsIGVudHJ5KSB7XFxuICA1NjpcXHRcXHRcXHRpZiAoIXN0cmNtcChsYWJlbCwgZW50cnktXFx1MDAzZWF0dHIuYXR0ci5uYW1lKSlcXG4gIDU3OlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyBzc2l6ZV90IGlkbGV0aW1lcl90Z19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXI7XFxuICA2NzpcXHRcXHR1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSAwO1xcbiAgNjg6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ge307XFxuICA2OTpcXHRcXHRsb25nIHRpbWVfZGlmZiA9IDA7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHR0aW1lciA9XFx0X19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChhdHRyLVxcdTAwM2VhdHRyLm5hbWUpO1xcbiAgNzQ6XFx0XFx0aWYgKHRpbWVyKSB7XFxuICA3NTpcXHRcXHRcXHRpZiAodGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gIDc2OlxcdFxcdFxcdFxcdGt0aW1lX3QgZXhwaXJlc19hbGFybSA9IGFsYXJtX2V4cGlyZXNfcmVtYWluaW5nKFxcdTAwMjZ0aW1lci1cXHUwMDNlYWxhcm0pO1xcbiAgNzc6XFx0XFx0XFx0XFx0a3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NChleHBpcmVzX2FsYXJtKTtcXG4gIDc4OlxcdFxcdFxcdFxcdHRpbWVfZGlmZiA9IGt0aW1lc3BlYy50dl9zZWM7XFxuICA3OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgODA6XFx0XFx0XFx0XFx0ZXhwaXJlcyA9IHRpbWVyLVxcdTAwM2V0aW1lci5leHBpcmVzO1xcbiAgODE6XFx0XFx0XFx0XFx0dGltZV9kaWZmID0gamlmZmllc190b19tc2VjcyhleHBpcmVzIC0gamlmZmllcykgLyAxMDAwO1xcbiAgODI6XFx0XFx0XFx0fVxcbiAgODM6XFx0XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAodGltZV9hZnRlcihleHBpcmVzLCBqaWZmaWVzKSB8fCBrdGltZXNwZWMudHZfc2VjIFxcdTAwM2UgMClcXG4gIDg4OlxcdFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsZFxcXFxuXFxcIiwgdGltZV9kaWZmKTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMFxcXFxuXFxcIik7XFxuICA5MTpcXHR9XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZGxldGltZXJfdGcsXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRzeXNmc19ub3RpZnkoaWRsZXRpbWVyX3RnX2tvYmosIE5VTEwsIHRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuICA5OTpcXHR9XFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MzAuNjExNjYwNDc5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE5MDM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGJlIGVmZmljaWVudDpcblxuKipGb2N1c2luZyBvbiBSZWdpc3RyYXRpb24gYW5kIFRhcmdldCBJbmZvcm1hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEZvcmdldCB0aGUgcHJlYW1ibGUgYW5kIHRoZSBmbHVmZi4gSSBuZWVkIHRvIGdldCBzdHJhaWdodCB0byB0aGUgcmVnaXN0cmF0aW9uIGFuZCB0YXJnZXQgZGV0YWlscy4gTGluZXMgMTAxIHRvIDM1MCwgdGhhdCdzIHdoZXJlIHRoZSBtZWF0IGlzLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlIHdpdGggdGhpcyBkYXRhIHN0cnVjdHVyZS4gSSdsbCByZWFkIHRob3NlIGxpbmVzIHdpdGggbGFzZXIgZm9jdXMsIGZpbHRlcmluZyBvdXQgYW55dGhpbmcgaXJyZWxldmFudCB0byB0aG9zZSBzcGVjaWZpYyBlbGVtZW50cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGtleSBpZGVudGlmaWVycywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhvc2UgbGluZXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG1lbnRhbGx5IHByZXBhcmVkIHRvIHBpY2sgdXAgb24gdGhvc2UgcXVpY2tseS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IHRoZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgcmVnaXN0cmF0aW9ucyB0aGVtc2VsdmVzIGFuZCB3aGF0ZXZlciBpcyBiZWluZyByZWdpc3RlcmVkIGFzIHRoZSB0YXJnZXQgYW5kIGl0cyBwcm9wZXJ0aWVzLiBJJ20gaG9waW5nIGl0J3Mgc3RyYWlnaHRmb3J3YXJkIGJ1dCBJJ20gcmVhZHkgdG8gZGVhbCB3aXRoIGNvbXBsZXhpdHkgb3IgYW55IHVuZXhwZWN0ZWQgZGF0YSBmb3JtYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozMi41OTM1NzY1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiAxMDI6XFx0e1xcbiAxMDM6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSB0aW1lcl9jb250YWluZXJfb2YodGltZXIsIHQsIHRpbWVyKTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiAxMDY6XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cXHUwMDNlZGF0YTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiAxMTM6XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRzdGF0aWMgdm9pZCBpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoc3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIsIGt0aW1lX3QgdGltZW91dClcXG4gMTE2OlxcdHtcXG4gMTE3OlxcdFxcdC8qXFxuIDExODpcXHRcXHQgKiBUaGUgdGltZXIgc2hvdWxkIGFsd2F5cyBiZSBxdWV1ZWQgYXMgQHRvdXQgaXQgc2hvdWxkIGJlIGxlYXN0IG9uZVxcbiAxMTk6XFx0XFx0ICogc2Vjb25kLCBidXQgaGFuZGxlIGl0IGNvcnJlY3RseSBpbiBhbnkgY2FzZS4gVmlydCB3aWxsIG1hbmFnZSFcXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0aWYgKCFhbGFybV9zdGFydF90aW1lcihcXHUwMDI2dGltZXItXFx1MDAzZWFsYXJtLCB0aW1lb3V0LCB0cnVlKSlcXG4gMTIyOlxcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnRpbWVyLVxcdTAwM2V3b3JrKTtcXG4gMTIzOlxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciwgdW5zaWduZWQgaW50IHNlY29uZHMpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUodGltZXIsIGt0aW1lX3NldChzZWNvbmRzLCAwKSk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDEzMTpcXHR7XFxuIDEzMjpcXHRcXHRpbnQgcmV0O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXQgPSB4dF9jaGVja19wcm9jX25hbWUobmFtZSwgc2l6ZSk7XFxuIDEzNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTM2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICghc3RyY21wKG5hbWUsIFxcXCJwb3dlclxcXCIpIHx8XFxuIDEzOTpcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBcXFwic3Vic3lzdGVtXFxcIikgfHxcXG4gMTQwOlxcdFxcdCAgICAhc3RyY21wKG5hbWUsIFxcXCJ1ZXZlbnRcXFwiKSlcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRyZXR1cm4gMDtcXG4gMTQ0OlxcdH1cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gMTQ3OlxcdHtcXG4gMTQ4OlxcdFxcdGludCByZXQ7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTUxOlxcdFxcdGlmICghaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMTUyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDE1MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTU0OlxcdFxcdH1cXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVxcdTAwM2VsYWJlbCkpO1xcbiAxNTc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE1ODpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAxNjE6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XFxuIDE2MjpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiAxNjM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTY0OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xcbiAxNjc6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAxNzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTcxOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAxNzg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDE4MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcbiAxODc6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMTg4OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDE4OTpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMTkwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTkxOlxcdG91dDpcXG4gMTkyOlxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpbnQgcmV0O1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDIwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjMyLjU5MzcyMzM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzQxMTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBmdW5jdGlvbiBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkndmUgc2VlbiBpdCwgSSB1bmRlcnN0YW5kIHRoZSBiYXNpYyBwdXJwb3NlLCBidXQgdGhlIHJlYWwgbWVhdCBpcyBhbHdheXMgaW4gdGhlIGNvbnRleHQuIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZXN0IG9mIHRoaXMgZmlsZS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCB0aGUgY29uZGl0aW9uYWwgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNhbGwsIGFuZCBvZiBjb3Vyc2UsIHdoZXJlIGluIHRoZSBjb2RlIHRoaXMgdGhpbmcgaXMgZXZlbiBiZWluZyBpbnZva2VkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgaXRzIGV4ZWN1dGlvbi4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IGhpZ2hsaWdodCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByZXNvdXJjZSBjb25zdHJhaW50cyBvciBtYXliZSBldmVuIGhpbnQgYXQgaG93IHRoZSB0aW1lcnMgYXJlIG1hbmFnZWQgYW5kIGRlc3Ryb3llZCwgd2hpY2ggaXMgYWx3YXlzIHVzZWZ1bC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjM0Ljg2NzgzNzM1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0b3V0OlxcbiAyNTE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjUyOlxcdH1cXG4gMjUzOlxcdFxcbiAyNTQ6XFx0LypcXG4gMjU1OlxcdCAqIFRoZSBhY3R1YWwgeHRfdGFibGVzIHBsdWdpbi5cXG4gMjU2OlxcdCAqL1xcbiAyNTc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI2MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXR1cm4gWFRfQ09OVElOVUU7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdC8qXFxuIDI2OTpcXHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXFxuIDI3MDpcXHQgKi9cXG4gMjcxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNzI6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gMjczOlxcdHtcXG4gMjc0OlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbiAyNzc6XFx0XFx0XFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVxcdTAwM2V0aW1lciwgaW5mby1cXHUwMDNldGltZW91dCk7XFxuIDI3ODpcXHRcXHR9IGVsc2Uge1xcbiAyNzk6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMjgxOlxcdFxcdH1cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0cmV0dXJuIFhUX0NPTlRJTlVFO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVvdXQgPT0gMCkge1xcbiAyODk6XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidGltZW91dCB2YWx1ZSBpcyB6ZXJvXFxcXG5cXFwiKTtcXG4gMjkwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyOTE6XFx0XFx0fVxcbiAyOTI6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVvdXQgXFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcXG4gMjkzOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInRpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xcXFxuXFxcIik7XFxuIDI5NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VsYWJlbFswXSA9PSAnXFxcXDAnIHx8XFxuIDI5NzpcXHRcXHQgICAgc3RybmxlbihpbmZvLVxcdTAwM2VsYWJlbCxcXG4gMjk4OlxcdFxcdFxcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xcbiAyOTk6XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4gMzAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMDE6XFx0XFx0fVxcbiAzMDI6XFx0XFx0cmV0dXJuIDA7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcbiAzMDY6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDMwOTpcXHRcXHRpbnQgcmV0O1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xcbiAzMTI6XFx0XFx0aWYocmV0IFxcdTAwM2MgMClcXG4gMzEzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLVxcdTAwM2VsYWJlbCk7XFxuIDMxNzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMzE4OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbiAzMTk6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzIwOlxcdFxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiKTtcXG4gMzIxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMjI6XFx0XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250Kys7XFxuIDMyNTpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMzI2OlxcdFxcdFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIDMyNzpcXHRcXHR9IGVsc2Uge1xcbiAzMjg6XFx0XFx0XFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcXG4gMzI5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDMzMDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzMzE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMyOlxcdFxcdFxcdH1cXG4gMzMzOlxcdFxcdH1cXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzM2OlxcdFxcdHJldHVybiAwO1xcbiAzMzc6XFx0fVxcbiAzMzg6XFx0XFxuIDMzOTpcXHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gMzQyOlxcdFxcdGludCByZXQ7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VzZW5kX25sX21zZylcXG4gMzQ1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XFxuIDM0ODpcXHRcXHRpZihyZXQgXFx1MDAzYyAwKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjM0Ljg2NzkyOTQwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ0MDY3MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgTGluZXMgMzUwLTQyMDogQSBGb2N1c2VkIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYSBzcGVjaWZpYyBibG9jayBvZiB0ZXh0LCBsaW5lcyAzNTAgdG8gNDIwLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGZldyBsaWtlbHkgcmVhc29ucy4gUGVyaGFwcyBJJ3ZlIGJlZW4gZGlyZWN0ZWQgdG8gYW5hbHl6ZSB0aGlzIHNlY3Rpb24gZm9yIGEgcGFydGljdWxhciBjb25jZXB0LCBhcmd1bWVudCwgb3IgcGVyaGFwcyBpdCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGFyZ3VtZW50LiBNYXliZSB0aGlzIGlzIGEgcmVsZXZhbnQgc2VnbWVudCBpbiB3aGljaCB0byBleHBsb3JlIHRoZSB2YWxpZGl0eSBvZiBteSBoeXBvdGhlc2VzLiBQZXJoYXBzIEkgYW0gaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBrZXkgcG9pbnQgd2l0aGluIGEgbXVjaCBsYXJnZXIgYm9keSBvZiB3b3JrLiBJIHdpbGwgYmUgbG9va2luZyBmb3Iga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRleHQncyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozNi42MTE5OTkzNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcbiAzNTE6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAzZSBYVF9JRExFVElNRVJfQUxBUk0pXFxuIDM1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLVxcdTAwM2VsYWJlbCk7XFxuIDM1NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMzU4OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSAhPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlKSB7XFxuIDM1OTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzNjA6XFx0XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbiAzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2MjpcXHRcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQrKztcXG4gMzY1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIDM2NjpcXHRcXHRcXHRcXHQvKiBjYWxjdWxhdGUgcmVtYWluaW5nIGV4cGlyeSB0aW1lICovXFxuIDM2NzpcXHRcXHRcXHRcXHRrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWFsYXJtKTtcXG4gMzY4OlxcdFxcdFxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IGt0aW1lc3BlYyA9IGt0aW1lX3RvX3RpbWVzcGVjNjQodG91dCk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdFxcdFxcdGlmIChrdGltZXNwZWMudHZfc2VjIFxcdTAwM2UgMClcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9rdGltZShpbmZvLVxcdTAwM2V0aW1lciwgdG91dCk7XFxuIDM3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNzM6XFx0XFx0XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDM3NDpcXHRcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMzc1OlxcdFxcdFxcdH1cXG4gMzc2OlxcdFxcdH0gZWxzZSB7XFxuIDM3NzpcXHRcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xcbiAzNzg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzc5OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDM4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODE6XFx0XFx0XFx0fVxcbiAzODI6XFx0XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzODU6XFx0XFx0cmV0dXJuIDA7XFxuIDM4NjpcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG4gMzg5OlxcdHtcXG4gMzkwOlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbiAzOTU6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzk2OlxcdFxcdFxcdHJldHVybjtcXG4gMzk3OlxcdFxcdH1cXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSk7XFxuIDQwMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIpO1xcbiA0MDM6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmspO1xcbiA0MDQ6XFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gNDA1OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDQwNjpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuIDQwNzpcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG4gNDEwOlxcdHtcXG4gNDExOlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbiA0MTY6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gNDE3OlxcdFxcdFxcdHJldHVybjtcXG4gNDE4OlxcdFxcdH1cXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSk7XFxuIDQyMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gNDI0OlxcdFxcdFxcdGFsYXJtX2NhbmNlbChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWFsYXJtKTtcXG4gNDI1OlxcdFxcdH0gZWxzZSB7XFxuIDQyNjpcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIpO1xcbiA0Mjc6XFx0XFx0fVxcbiA0Mjg6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmspO1xcbiA0Mjk6XFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MzYuNjEyMjI0OTQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMzYwMzA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRExFVElNRVIgVGFyZ2V0IGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGB4dF9JRExFVElNRVJgLCB3aGljaCBpcyBhbiBpcHRhYmxlcy94X3RhYmxlcyB0YXJnZXQgZXh0ZW5zaW9uLiBJdCdzIHJlZ2lzdGVyZWQgdmlhIGB4dF9yZWdpc3Rlcl90YXJnZXRzYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIGl0IGluIGEgdHlwaWNhbCBzeXprYWxsZXIvUUVNVSBzZXR1cD8gWWVzLCB3ZSBjYW4sIHVzaW5nIGlwdGFibGVzL3hfdGFibGVzJyBgc2V0c29ja29wdGAgd2l0aCBgSVBUX1NPX1NFVF9SRVBMQUNFYCwgb3IgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBgbmZfdGFibGVzYCBjb21wYXRpYmlsaXR5LCBvciBldmVuIHN0YW5kYXJkIGBpcHRhYmxlc2Agc29ja2V0IG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBgSURMRVRJTUVSYCB0YXJnZXQuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGV5IHVzZWQgYGttYWxsb2Nfb2JqYCBvbiB0aGUgYGluZm8tXHUwMDNldGltZXJgIHN0cnVjdCwgd2hpY2ggbGVhdmVzIHBhcnRzIG9mIHRoZSBzdHJ1Y3QgdW5pbml0aWFsaXplZC4gIEkgcmVtZW1iZXIgYGlkbGV0aW1lcl90Z19jcmVhdGVgICh2MCkgdXNlZCBga3phbGxvY19vYmpgLi4uIHNvIHRoZXkgY2hhbmdlZCBpdCBhbmQgYnJva2UgaXQhIFRoaXMgaXMgYmFkIG5ld3MsIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBjYW4gZGVmaW5pdGVseSBsZWFkIHRvIGJ1Z3MgZG93biB0aGUgbGluZS4gSXQncyByaXBlIGZvciBleHBsb2l0YXRpb24sIGVzcGVjaWFsbHkgd2l0aCBmaWVsZHMgaW4gYHN0cnVjdCB0aW1lcl9saXN0YCwgYHN0cnVjdCBhbGFybWAsIGB0aW1lcl90eXBlYCwgb3IgcG9pbnRlcnMgZ29pbmcgaGF5d2lyZSwgb3IgaW4gZnVuY3Rpb25zIGxpa2UgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYCBhbmQgYGlkbGV0aW1lcl90Z19zaG93YC4gIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcnJlY3RseSB1c2luZyBga3phbGxvY19vYmpgIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24uXG5cblRoaXMgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaW1lIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgYFdvcnRoRnV6emluZ2AuXG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCdzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBHb29kIHN0YXJ0LlxuKiAgICoqUmVhY2hhYmxlOioqIFllcywgd2UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucywgbmV0bGluaywgaXB0YWJsZXMsIGV0Yy5cbiogICAqKk5vbi1rZXJuZWwvTm9uLWV4ZWN1dGFibGU6KiogTm8sIGl0J3MgcHVyZSBDIGxvZ2ljIHdpdGhpbiBhIGtlcm5lbCBtb2R1bGUsIHNvIGl0J3MgZmFpciBnYW1lLlxuKiAgICoqVW5yZWFjaGFibGUgSGFyZHdhcmU6KiogSXQncyBzb2Z0d2FyZSwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uXG4qICAgKipUZWFyZG93bi1vbmx5IG9yIG5vbi1BTUQ2NDoqKiBObywgZG9lc24ndCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFdlJ3ZlIGdvdCBhIHJlYWNoYWJsZSwgZXhwbG9pdGFibGUgY2hhbmdlIGluIGV4ZWN1dGFibGUga2VybmVsIGNvZGUhXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW4gYHh0X0lETEVUSU1FUi5jYD8gV2UndmUgZ290OlxuXG4qICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIChhIHN0YXRpYyBmdW5jdGlvbjsgd2UnbGwgY2hlY2sgaXRzIGNhbGwgY2hhaW4gdmlhIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAgdG8gY2hlY2sgZm9yIGlubGluaW5nIHBvc3NpYmlsaXRpZXMpLlxuKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWBcbiogICBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWBcbiogICBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgXG4qICAgYGlkbGV0aW1lcl90Z19zaG93YFxuKiAgIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYFxuXG5gaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaXMgaW5kZWVkIHN0YXRpYzogYHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pYC4gIFRoZSBvdGhlcnMgYXJlIHRoZSB0eXBpY2FsIHRhcmdldCBvcGVyYXRpb25zIGNhbGxiYWNrcy4gU28sIG91ciBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYFxuKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWBcbiogICBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWBcbiogICBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgXG5cbkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcz8gV2UgZGVmaW5pdGVseSBuZWVkIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAuICBXZSBjYW4gY2hlY2sgZGVwZW5kZW5jaWVzLiBUaGUgS2NvbmZpZyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBjb25maXJtczpcblxuYGBgXG5jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcblx0dHJpc3RhdGUgXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuYGBgXG5cblNvIHdlIGFsc28gbmVlZCBgTkVURklMVEVSYCAoYmFzZSksIGBORVRGSUxURVJfWFRBQkxFU2AgYW5kIG9mIGNvdXJzZSwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYC4gVGltZSB0byBjaGVjayBgeHRfSURMRVRJTUVSLmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbnMuIExldCdzIGBncmVwYCBmb3IgYENPTkZJR19gIG9yIGBpZmRlZmAgd2l0aGluIHRoZSBmaWxlIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NDMuNjQ4MjU4NTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI4MzgyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWZ8Q09ORklHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYz00MzU9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaWRsZXRpbWVyX3RnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMtNDU2LVxcdH0sXFxubmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYzo0NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQNl9ORl9JUFRBQkxFUylcXG5uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jLTQ1OC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjQ0LjE2MTEwMTYyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU3ODQwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRXhhbWluaW5nIHh0X0lETEVUSU1FUi5jJ3MgVGFpbCBFbmQqKlxuXG5Pa2F5LCB0aW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSB0YWlsIGVuZCBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGV5IGxlZnQgb2ZmIHdpdGggdGhpcyBtb2R1bGUsIGVzcGVjaWFsbHkgYWZ0ZXIgdGhhdCBsYXN0IGNvZGUgcmV2aWV3LiBMZXQncyBzZWUgd2hhdCB0aGUgbGF0ZXN0IGNvbW1pdHMgdG91Y2hlZC4gV2VyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyBmaXhlcyBpbiB0aGUgY2xlYW51cCBmdW5jdGlvbnM/IEFueSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRvIHRoZSBpZGxlIHRpbWVyIGl0c2VsZiB0aGF0IG1pZ2h0IGhhdmUgc251Y2sgaW4gdGhlcmU/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBkdXJpbmcgdGVhcmRvd24sIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIHRob3NlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBidWdzLCB5b3Uga25vdy4gTWFrZSBzdXJlIHRoZSBtdXRleGVzIGFyZSBiZWluZyByZWxlYXNlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSSdsbCBmb2N1cyBvbiB0aGUgZGUtaW5pdCByb3V0aW5lcyBmaXJzdCwgdGhlbiBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nLiBSaWdodCwgbGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTo0Ni40MTg5NDUxODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDQzMTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuIDQzMjpcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcbiA0MzU6XFx0c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaWRsZXRpbWVyX3RnW10gX19yZWFkX21vc3RseSA9IHtcXG4gNDM2OlxcdFxcdHtcXG4gNDM3OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiSURMRVRJTUVSXFxcIixcXG4gNDM4OlxcdFxcdFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4gNDM5OlxcdFxcdFxcdC50YXJnZXRcXHRcXHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXFxuIDQ0MDpcXHRcXHRcXHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvKSxcXG4gNDQxOlxcdFxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXFxuIDQ0MjpcXHRcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaWRsZXRpbWVyX3RnX2NoZWNrZW50cnksXFxuIDQ0MzpcXHRcXHRcXHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcXG4gNDQ0OlxcdFxcdFxcdC5tZVxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIDQ0NTpcXHRcXHR9LFxcbiA0NDY6XFx0XFx0e1xcbiA0NDc6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJRExFVElNRVJcXFwiLFxcbiA0NDg6XFx0XFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbiA0NDk6XFx0XFx0XFx0LnJldmlzaW9uXFx0PSAxLFxcbiA0NTA6XFx0XFx0XFx0LnRhcmdldFxcdFxcdD0gaWRsZXRpbWVyX3RnX3RhcmdldF92MSxcXG4gNDUxOlxcdFxcdFxcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEpLFxcbiA0NTI6XFx0XFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEsIHRpbWVyKSxcXG4gNDUzOlxcdFxcdFxcdC5jaGVja2VudHJ5XFx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcXG4gNDU0OlxcdFxcdFxcdC5kZXN0cm95ICAgICAgICA9IGlkbGV0aW1lcl90Z19kZXN0cm95X3YxLFxcbiA0NTU6XFx0XFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gNDU2OlxcdFxcdH0sXFxuIDQ1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVA2X05GX0lQVEFCTEVTKVxcbiA0NTg6XFx0XFx0e1xcbiA0NTk6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJRExFVElNRVJcXFwiLFxcbiA0NjA6XFx0XFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbiA0NjE6XFx0XFx0XFx0LnRhcmdldFxcdFxcdD0gaWRsZXRpbWVyX3RnX3RhcmdldCxcXG4gNDYyOlxcdFxcdFxcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxcbiA0NjM6XFx0XFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8sIHRpbWVyKSxcXG4gNDY0OlxcdFxcdFxcdC5jaGVja2VudHJ5XFx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeSxcXG4gNDY1OlxcdFxcdFxcdC5kZXN0cm95ICAgICAgICA9IGlkbGV0aW1lcl90Z19kZXN0cm95LFxcbiA0NjY6XFx0XFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gNDY3OlxcdFxcdH0sXFxuIDQ2ODpcXHRcXHR7XFxuIDQ2OTpcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcIklETEVUSU1FUlxcXCIsXFxuIDQ3MDpcXHRcXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxuIDQ3MTpcXHRcXHRcXHQucmV2aXNpb25cXHQ9IDEsXFxuIDQ3MjpcXHRcXHRcXHQudGFyZ2V0XFx0XFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxcbiA0NzM6XFx0XFx0XFx0LnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSksXFxuIDQ3NDpcXHRcXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxcbiA0NzU6XFx0XFx0XFx0LmNoZWNrZW50cnlcXHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxLFxcbiA0NzY6XFx0XFx0XFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXFxuIDQ3NzpcXHRcXHRcXHQubWVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiA0Nzg6XFx0XFx0fSxcXG4gNDc5OlxcdCNlbmRpZlxcbiA0ODA6XFx0fTtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHN0cnVjdCBjbGFzcyAqaWRsZXRpbWVyX3RnX2NsYXNzO1xcbiA0ODM6XFx0XFxuIDQ4NDpcXHRzdGF0aWMgc3RydWN0IGRldmljZSAqaWRsZXRpbWVyX3RnX2RldmljZTtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0c3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcXG4gNDg3OlxcdHtcXG4gNDg4OlxcdFxcdGludCBlcnI7XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcXFwieHRfaWRsZXRpbWVyXFxcIik7XFxuIDQ5MTpcXHRcXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XFxuIDQ5MjpcXHRcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcXG4gNDkzOlxcdFxcdFxcdHByX2VycihcXFwiY291bGRuJ3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXFxcXG5cXFwiKTtcXG4gNDk0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTU6XFx0XFx0fVxcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZGxldGltZXJfdGdfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShpZGxldGltZXJfdGdfY2xhc3MsIE5VTEwsXFxuIDQ5ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFxcXCJ0aW1lcnNcXFwiKTtcXG4gNDk5OlxcdFxcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2RldmljZSk7XFxuIDUwMDpcXHRcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7XFxuIDUwMTpcXHRcXHRcXHRwcl9lcnIoXFxcImNvdWxkbid0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcXFxcblxcXCIpO1xcbiA1MDI6XFx0XFx0XFx0Z290byBvdXRfY2xhc3M7XFxuIDUwMzpcXHRcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlkbGV0aW1lcl90Z19rb2JqID0gXFx1MDAyNmlkbGV0aW1lcl90Z19kZXZpY2UtXFx1MDAzZWtvYmo7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdGVyciA9IHh0X3JlZ2lzdGVyX3RhcmdldHMoaWRsZXRpbWVyX3RnLCBBUlJBWV9TSVpFKGlkbGV0aW1lcl90ZykpO1xcbiA1MDg6XFx0XFxuIDUwOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTo0Ni40MTkwODU4NjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxODAyMDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElETEVUSU1FUiBOZXRmaWx0ZXIgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLCBzcGVjaWZpY2FsbHkgdGhlIHN3aXRjaCBmcm9tIGBrbWFsbG9jX29iamAgdG8gYGt6YWxsb2Nfb2JqYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFzIGluZGljYXRlZCBieSBsaW5lcyA5MTgtOTIwLiBGdXJ0aGVybW9yZSwgdGhlIGBNYWtlZmlsZWAgY29uZmlybXMgaXRzIGluY2x1c2lvbjogYG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgKz0geHRfSURMRVRJTUVSLm9gLiBUaGlzIHRlbGxzIG1lIHRoYXQgYE5FVEZJTFRFUl9YVEFCTEVTYCBpcyBhbHNvIHByb2JhYmx5IG5lZWRlZC5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgYXJlIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLCBgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFgLCBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWAsIGFuZCBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIG1ha2UgZm9yIGEgZ29vZCBmdXp6IHRhcmdldD8gVGhlIHJlYXNvbmluZyBjbGVhcmx5IHN0YXRlcyB0aGUgY2hhbmdlIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBXZSdyZSBnb2luZyBmcm9tIHJlZ3VsYXIgYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBDcnVjaWFsbHksIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGlwdGFibGVzIHJ1bGVzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgeWVzLCB0aGlzIGxvb2tzIGxpa2UgYSB3b3J0aHdoaWxlIGZ1enogdGFyZ2V0LlxuXG5JJ20gY29uZmlkZW50IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjEsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuMzM3MTEwNjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTMxNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGV0aW1lcl90Z19jcmVhdGVfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfdGFyZ2V0X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfZGVzdHJveV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGV0aW1lcl90Z19jcmVhdGVfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfdGFyZ2V0X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfZGVzdHJveV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuNDU3MDQ4OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2NDE0MDkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjUwLjQ1NzUwNjA3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3ODYzNjc4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4rXHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuNDU3NTA3Mzg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NTE1NTgwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJRExFVElNRVIgTW9kdWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCdzIGltcGFjdGluZyB0aGUgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEknbSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIE5vIHNlbnNlIGluIHN0YXJ0aW5nIGJsaW5kLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGFuZCBhbGxvdyBtZSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGRpc3NlY3QgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjU4LjkwOTA2OTU0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMTgzOlxcdFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdHJldHVybiAwO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRvdXRfZnJlZV9hdHRyOlxcbiAxODg6XFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcXG4gMTg5OlxcdG91dF9mcmVlX3RpbWVyOlxcbiAxOTA6XFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNldGltZXIpO1xcbiAxOTE6XFx0b3V0OlxcbiAxOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTkzOlxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcXG4gMTk2OlxcdHtcXG4gMTk3OlxcdFxcdGludCByZXQ7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMjAwOlxcdFxcdGlmICghaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMjAxOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDIwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjAzOlxcdFxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVxcdTAwM2VsYWJlbCkpO1xcbiAyMDY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIwNzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAyMTA6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XFxuIDIxMTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiAyMTI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMjEzOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIDIxNDpcXHRcXHR9XFxuIDIxNTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xcbiAyMTY6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAyMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjIwOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMjIxOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0LyogIG5vdGlmeSB1c2Vyc3BhY2UgICovXFxuIDIyNTpcXHRcXHRrb2JqZWN0X3VldmVudChpZGxldGltZXJfdGdfa29iaixLT0JKX0FERCk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuIDIyODpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXFx1MDAzZXRpbWVyX3R5cGU7XFxuIDIyOTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250ID0gMTtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gMjM0OlxcdFxcdFxcdGFsYXJtX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhbGFybSwgQUxBUk1fQk9PVFRJTUUsXFxuIDIzNTpcXHRcXHRcXHRcXHQgICBpZGxldGltZXJfdGdfYWxhcm1wcm9jKTtcXG4gMjM2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhbGFybS5kYXRhID0gaW5mby1cXHUwMDNldGltZXI7XFxuIDIzNzpcXHRcXHRcXHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXFx1MDAzZXRpbWVyLCBpbmZvLVxcdTAwM2V0aW1lb3V0KTtcXG4gMjM4OlxcdFxcdH0gZWxzZSB7XFxuIDIzOTpcXHRcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XFxuIDI0MDpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAyNDI6XFx0XFx0fVxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMjQ3OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDI0ODpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMjQ5OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMjUwOlxcdG91dDpcXG4gMjUxOlxcdFxcdHJldHVybiByZXQ7XFxuIDI1MjpcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdC8qXFxuIDI1NTpcXHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXFxuIDI1NjpcXHQgKi9cXG4gMjU3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gMjU5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTguOTA5Mjg5MDg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDI2NzIyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSURMRVRJTUVSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBgSURMRVRJTUVSYCB0YXJnZXQgd2l0aGluIE5ldGZpbHRlci4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgcmlnaHQgbm93LiBNeSBrZXkgaW50ZXJlc3QgaXMgYXJvdW5kIHRoZSBgaWRsZXRpbWVyX3RnX2NyZWF0ZWAgZnVuY3Rpb24g4oCTIHRoYXQncyB3aGVyZSB0aGUgdGFyZ2V0IGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb24gMCBhbmQgdmVyc2lvbiAxIHRoYXQgd2VyZSBpbXBsZW1lbnRlZC4gSSBhbHNvIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBzdHJ1Y3QgYWN0dWFsbHkgKmNvbnRhaW5zKi4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGRlZmluZWQgaW5zaWRlIG9mIHRoZSBzdHJ1Y3QuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAwLjc1MTk2NDE0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBcXFwidWV2ZW50XFxcIikpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIDA7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRpbnQgcmV0O1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDE1MTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIDE1MjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXFx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cXHUwMDNlbGFiZWwpKTtcXG4gMTU3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxNTg6XFx0XFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0c3lzZnNfYXR0cl9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMTYxOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbiAxNjI6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gMTYzOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDE2NDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcXG4gMTY3OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMTcwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE3MTpcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXFxuXFxcIik7XFxuIDE3MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIDE3MzpcXHRcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcXG4gMTc4OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQgPSAxO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V3b3JrLCBpZGxldGltZXJfdGdfd29yayk7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdG1vZF90aW1lcihcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLFxcbiAxODM6XFx0XFx0XFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0cmV0dXJuIDA7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdG91dF9mcmVlX2F0dHI6XFxuIDE4ODpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xcbiAxODk6XFx0b3V0X2ZyZWVfdGltZXI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAwLjc1MjA1Njg5N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzNjY1NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSWRsZXRpbWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBrbWFsbG9jX29iamAgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgaW5mby1cdTAwM2V0aW1lcmAsIGJ1dCB0aGUgcGF0Y2ggc3dhcHMgdGhhdCBvdXQgZm9yIGBremFsbG9jX29iamAuIEFoLCB0aGUgbGlnaHRidWxiIG1vbWVudCEgVGhpcyBpcyBjbGVhcmx5IGEgZml4IGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gSSByZWNhbGwgdGhhdCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBtZW1vcnkgYnV0IGRvZXNuJ3QgemVybyBpdCwgd2hlcmVhcyBga3phbGxvY19vYmpgIGRvZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJdCdzIHN1YnRsZSwgYnV0IGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIHN0YXJ0cyB3aXRoIGNsZWFuIGRhdGEuXG5cbldhaXQgYSBzZWNvbmQsIHdhc24ndCBgaWRsZXRpbWVyX3RnX2NyZWF0ZWAgYWxyZWFkeSB1c2luZyBga3phbGxvY19vYmpgPyBTbywgdGhpcyBwYXRjaCBicmluZ3MgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBpbiBsaW5lIHdpdGggaXRzIHNpYmxpbmcgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBDb25zaXN0ZW5jeSBpcyBnb29kLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRpbWVyIHN0cnVjdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCB3ZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYW5kIGNhdXNpbmcgcHJvYmxlbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgc3RydWN0dXJlIGFjdHVhbGx5IGNvbnRhaW5zLiBMZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAzLjM0NTcyNTAyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBsaW51eC9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogTmV0ZmlsdGVyIG1vZHVsZSB0byB0cmlnZ2VyIGEgdGltZXIgd2hlbiBwYWNrZXQgbWF0Y2hlcy5cXG4gICA2OlxcdCAqIEFmdGVyIHRpbWVyIGV4cGlyZXMgYSBrZXZlbnQgd2lsbCBiZSBzZW50LlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvblxcbiAgIDk6XFx0ICogV3JpdHRlbiBieSBUaW1vIFRlcmFzIFxcdTAwM2NleHQtdGltby50ZXJhc0Bub2tpYS5jb21cXHUwMDNlXFxuICAxMDpcXHQgKlxcbiAgMTE6XFx0ICogQ29udmVydGVkIHRvIHhfdGFibGVzIGFuZCByZXdvcmtlZCBmb3IgdXBzdHJlYW0gaW5jbHVzaW9uXFxuICAxMjpcXHQgKiBieSBMdWNpYW5vIENvZWxobyBcXHUwMDNjbHVjaWFuby5jb2VsaG9Abm9raWEuY29tXFx1MDAzZVxcbiAgMTM6XFx0ICpcXG4gIDE0OlxcdCAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIFxcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cXHUwMDNlXFxuICAxNTpcXHQgKi9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbGFybXRpbWVyLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tkZXZfdC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiAgMzE6XFx0XFxuICAzMjpcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuICAzNDpcXHRcXHRzdHJ1Y3QgYWxhcm0gYWxhcm07XFxuICAzNTpcXHRcXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcXG4gIDM2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcXG4gIDM5OlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHVuc2lnbmVkIGludCByZWZjbnQ7XFxuICA0MjpcXHRcXHR1OCB0aW1lcl90eXBlO1xcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIExJU1RfSEVBRChpZGxldGltZXJfdGdfbGlzdCk7XFxuICA0NjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgc3RydWN0IGtvYmplY3QgKmlkbGV0aW1lcl90Z19rb2JqO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRzdGF0aWNcXG4gIDUxOlxcdHN0cnVjdCBpZGxldGltZXJfdGcgKl9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoY29uc3QgY2hhciAqbGFiZWwpXFxuICA1MjpcXHR7XFxuICA1MzpcXHRcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICplbnRyeTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0LCBlbnRyeSkge1xcbiAgNTY6XFx0XFx0XFx0aWYgKCFzdHJjbXAobGFiZWwsIGVudHJ5LVxcdTAwM2VhdHRyLmF0dHIubmFtZSkpXFxuICA1NzpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNjowMy4zNDU4NjIyNjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTI5MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICpgc3RydWN0IGlkbGV0aW1lcl90Z2AgaXMgdGhlIGtleSBzdHJ1Y3QgaGVyZSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgaXRzIGFsbG9jYXRpb24uIGBrbWFsbG9jX29iamAgd2FzIHVzZWQgcHJldmlvdXNseSwgbWVhbmluZyBmaWVsZHMgbGlrZSBga29iamAsIHBvdGVudGlhbGx5IGV2ZW4gYGFsYXJtYCBhbmQgYHRpbWVyYCBkZXBlbmRpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGNvdWxkIGhhdmUgaGVsZCB1bmluaXRpYWxpemVkIGRhdGEuIFllcywgYGFsYXJtX2luaXRgIG9yIGB0aW1lcl9zZXR1cGAgaGFuZGxlcyBzb21lIG9mIHRoZW0sIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0LipcblxuKk5vdywgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiB0byBga3phbGxvY19vYmpgLiBFZmZlY3RpdmVseSwgaXQgaXMgKipmaXhpbmcqKiBhIHBvdGVudGlhbCBwcm9ibGVtIGJ5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBpZGxldGltZXJfdGdgIHVwb24gYWxsb2NhdGlvbi4gQnJpbGxpYW50ISBJdCBlbGltaW5hdGVzIHRoZSByaXNrLipcblxuKkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcz8gQWJzb2x1dGVseSBub3QuIEl0IHJlbW92ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgKmd1YXJhbnRlZWluZyogemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBpcyBnb29kLipcblxuKlRpbWUgdG8gY29uc2lkZXIgdGhlIEtNU0FOIHJ1bGVzLiBMZXQncyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOipcbiogICAqUnVsZSAxOiBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uKlxuKiAgICpSdWxlIDI6IENvbmRpdGlvbmFsIGxvZ2ljIHdpdGggdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LipcbiogICAqUnVsZSAzOiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQuKlxuKiAgICpSdWxlIDQ6IEJvdW5kcyBjaGVja3MgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uKlxuXG4qVGhlIG9wcG9zaXRlIGlzIHRydWUgLSBieSB1c2luZyBga3phbGxvY19vYmpgLCBhbGwgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdCBpZGxldGltZXJfdGdgIGFyZSB6ZXJvZWQgb3V0Ki5cblxuKlRoZXJlZm9yZSwgZ2l2ZW4gdGhlIEtNU0FOIGd1aWRhbmNlOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4qXG5cbipMZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdlIGNhbiBmaW5kIGBpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO2AgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYnVmZmVyLCBzbyB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW1wbG95ZWQgaGVyZS4qXG5cbipUaGUgS01TQU4gcmVhc29uaW5nIHdpbGwgYmUgYXMgY29uY2lzZSBhcyBwb3NzaWJsZS4qXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzgsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjY6MDguMzIxMTU3MTU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 00:06:45 +0000 UTC FinishedAt: 2026-09-08 00:26:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_IDLETIMER", "NETFILTER_ADVANCED", "NETFILTER_XTABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_IDLETIMER", "NETFILTER_ADVANCED", "NETFILTER_XTABLES" ], "series_id": "526f16f5-75e0-4aaf-99b4-252e9e2b2ff7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "idletimer_tg_create_v1", "idletimer_tg_checkentry_v1", "idletimer_tg_target_v1", "idletimer_tg_destroy_v1" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5pbmRleCBmZTdkOGQxOTYyOWI0Li44YTFkOTVkMjE5OTE3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xuQEAgLTE5Niw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aW5mby1cdTAwM2V0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZDk0Y2ViNzcwZDE3NWI2ZWM5YjY4ZWU0OWQyNGJhNTQ3N2IwNTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMDoyNToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogewogCWludCByZXQ7CiAKLQlpbmZvLSZndDt0aW1lciA9IGttYWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiYjNDM7CWluZm8tJmd0O3RpbWVyID0ga3phbGxvY19vYmooKmluZm8tJmd0O3RpbWVyKTsKIAlpZiAoIWluZm8tJmd0O3RpbWVyKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSURMRVRJTUVSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHByb3ZpZGVkIHBhdGNoIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2Ugd2l0aGluIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYC4gSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWA6IGEgYGttYWxsb2Nfb2JqYCBjYWxsIGlzIGJlaW5nIHN3YXBwZWQgb3V0IGZvciBhIGBremFsbG9jX29iamAgY2FsbCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyB0aGUgYGluZm8tJmd0O3RpbWVyYCBmaWVsZC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgcG90ZW50aWFsIGNvbmNlcm4gYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgd2hpY2ggaXMgZ29vZCB0aGV5IGFyZSBhZGRyZXNzaW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgYXJvdW5kIGxpbmUgMTk2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGF0IGBpbmZvLSZndDt0aW1lcmAgc3RydWN0dXJlIOKAkyBpdHMgZGVmaW5pdGlvbiwgaG93IGl0JiMzOTtzIHVzZWQgYmVmb3JlIGFuZCBhZnRlciBhbGxvY2F0aW9uLCBhbmQgaW1wb3J0YW50bHksIGhvdyB0aGlzIHRpbWVyIGlzICppbml0aWFsaXplZCogYWZ0ZXIgYWxsb2NhdGlvbiAob3IsIHByZXZpb3VzbHksIGxhY2sgdGhlcmVvZikuIEkgbmVlZCB0byBzZWUgaWYgdGhlIHplcm9pbmcgaXMgYWN0dWFsbHkgKm5lY2Vzc2FyeSogb3IganVzdCBhIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYHh0X0lETEVUSU1FUmAgaXMgYWxzbyBpbiBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxNzE6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcXG5cJiMzNDspO1xuIDE3MjpcdFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gMTczOlx0XHR9XG4gMTc0Olx0XG4gMTc1Olx0XHRsaXN0X2FkZChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWVudHJ5LCBcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XG4gMTc2Olx0XG4gMTc3Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XG4gMTc4Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCA9IDE7XG4gMTc5Olx0XG4gMTgwOlx0XHRJTklUX1dPUksoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V3b3JrLCBpZGxldGltZXJfdGdfd29yayk7XG4gMTgxOlx0XG4gMTgyOlx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiAxODM6XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAxODQ6XHRcbiAxODU6XHRcdHJldHVybiAwO1xuIDE4NjpcdFxuIDE4NzpcdG91dF9mcmVlX2F0dHI6XG4gMTg4Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiAxODk6XHRvdXRfZnJlZV90aW1lcjpcbiAxOTA6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDE5MTpcdG91dDpcbiAxOTI6XHRcdHJldHVybiByZXQ7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gMTk2Olx0e1xuIDE5NzpcdFx0aW50IHJldDtcbiAxOTg6XHRcbiAxOTk6XHRcdGluZm8tXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4gMjAwOlx0XHRpZiAoIWluZm8tXHUwMDNldGltZXIpIHtcbiAyMDE6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAyMDI6XHRcdFx0Z290byBvdXQ7XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRyZXQgPSBpZGxldGltZXJfY2hlY2tfc3lzZnNfbmFtZShpbmZvLVx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cdTAwM2VsYWJlbCkpO1xuIDIwNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMDc6XHRcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiAyMDg6XHRcbiAyMDk6XHRcdHN5c2ZzX2F0dHJfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gMjEwOlx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVx1MDAzZWxhYmVsLCBHRlBfS0VSTkVMKTtcbiAyMTE6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSkge1xuIDIxMjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDIxMzpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDIxNDpcdFx0fVxuIDIxNTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubW9kZSA9IDA0NDQ7XG4gMjE2Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xuIDIxNzpcdFxuIDIxODpcdFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAyMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAyMjA6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcXG5cJiMzNDspO1xuIDIyMTpcdFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHQvKiAgbm90aWZ5IHVzZXJzcGFjZSAgKi9cbiAyMjU6XHRcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiAyMjY6XHRcbiAyMjc6XHRcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbiAyMjg6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXHUwMDNldGltZXJfdHlwZTtcbiAyMjk6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiAyMzA6XHRcbiAyMzE6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAyMzI6XHRcbiAyMzM6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDIzNDpcdFx0XHRhbGFybV9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYWxhcm0sIEFMQVJNX0JPT1RUSU1FLFxuIDIzNTpcdFx0XHRcdCAgIGlkbGV0aW1lcl90Z19hbGFybXByb2MpO1xuIDIzNjpcdFx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWFsYXJtLmRhdGEgPSBpbmZvLVx1MDAzZXRpbWVyO1xuIDIzNzpcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXHUwMDNldGltZXIsIGluZm8tXHUwMDNldGltZW91dCk7XG4gMjM4Olx0XHR9IGVsc2Uge1xuIDIzOTpcdFx0XHR0aW1lcl9zZXR1cChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XG4gMjQwOlx0XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDI0MTpcdFx0XHRcdFx0c2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMjQyOlx0XHR9XG4gMjQzOlx0XG4gMjQ0Olx0XHRyZXR1cm4gMDtcbiAyNDU6XHRcbiAyNDY6XHRvdXRfZnJlZV9hdHRyOlxuIDI0NzpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSk7XG4gMjQ4Olx0b3V0X2ZyZWVfdGltZXI6XG4gMjQ5Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGB4dF9JRExFVElNRVJgIE5ldGZpbHRlciBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gYHh0X0lETEVUSU1FUi5jYC4uLnRoYXQmIzM5O3MgYSBuZXRmaWx0ZXIgdGFyZ2V0IGV4dGVuc2lvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIHRoaXMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZW5hYmxlZCBhbmQgaG93IHRvIGNvbmZpZ3VyZSBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGFuZCBob3cgaXQgaXMgY29udHJvbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgaGFzIHRvIHNheSBhYm91dCBgeHRfSURMRVRJTUVSYC4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBtb2R1bGUsIHBlcmhhcHMgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIG1heWJlIGV2ZW4gZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03Nj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3NzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9eVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWctNzgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWc6MTIzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWctMTI0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yMDA9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMDE6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjAyLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMjE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6MTIzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctMTI0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz0xMTg9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzoxMTk6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctMTIwLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTEyNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6MTI2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctMTI3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTExNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6MTE2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMTE3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTExNz1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6MTE4OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctMTE5LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctMTE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTEzNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6MTM3OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctMTM4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9MTE0PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjExNTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMTE2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9MTE1PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctMTE3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctMTE4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9MTExPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjExMjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMTEzLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnPTExMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MTEzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctMTE0LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTI0ND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MjQ1OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMjQ2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTIzNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MjM2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjM3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTkwND1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05MTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTE4OmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cdHRyaXN0YXRlICBcJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE4Nj1vYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgJiM0Mzs9IHh0X1RSQUNFLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgJiM0Mzs9IHh0X0lETEVUSU1FUi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBjb25maWd1cmF0aW9uLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdGhlIEtjb25maWcgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gTGluZSA5MTggc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIHByZXR0eSBzb2xpZCwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGZhaXJseSBzcGVjaWZpYyBuZWFyIHRoYXQgbGluZS4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmZWF0dXJlJiMzOTtzIGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgbWF5YmUgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIHNvbWUgaGVscCB0ZXh0IHRoYXQgd2lsbCBpbGx1bWluYXRlIG15IGN1cnJlbnQgcXVlcnkuIEkmIzM5O2xsIG1lbnRhbGx5IHByZXBhcmUgbXlzZWxmIHRvIHBhcnNlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBjbHVlcy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNTpcdFxuIDkxNjpcdFx0VG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiA5MTc6XHRcbiA5MTg6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcbiA5MTk6XHRcdHRyaXN0YXRlICBcJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiA5MjA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gOTIxOlx0XHRoZWxwXG4gOTIyOlx0XG4gOTIzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVImIzM5OyB0YXJnZXQuICBFYWNoIG1hdGNoaW5nIHBhY2tldFxuIDkyNDpcdFx0ICByZXNldHMgdGhlIHRpbWVyIGFzc29jaWF0ZWQgd2l0aCBsYWJlbCBzcGVjaWZpZWQgd2hlbiB0aGUgcnVsZSBpc1xuIDkyNTpcdFx0ICBhZGRlZC4gIFdoZW4gdGhlIHRpbWVyIGV4cGlyZXMsIGl0IHRyaWdnZXJzIGEgc3lzZnMgbm90aWZpY2F0aW9uLlxuIDkyNjpcdFx0ICBUaGUgcmVtYWluaW5nIHRpbWUgZm9yIGV4cGlyYXRpb24gY2FuIGJlIHJlYWQgdmlhIHN5c2ZzLlxuIDkyNzpcdFxuIDkyODpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiA5Mjk6XHRcbiA5MzA6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcbiA5MzE6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7TEVEXCYjMzQ7IHRhcmdldCBzdXBwb3J0JiMzOTtcbiA5MzI6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTUyBcdTAwMjZcdTAwMjYgTEVEU19UUklHR0VSU1xuIDkzMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA5MzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY29kZSwgc3VtbWFyaXplZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8geHRfSURMRVRJTUVSLmMqKgoKT2theSwgdGltZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWV0aG9kaWNhbGx5IGV4YW1pbmluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIG1hcHBpbmcgb3V0IGV2ZXJ5dGhpbmcgLSBldmVyeSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiwgZXZlcnkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aG9zZSBmdW5jdGlvbnMsIGFsbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBldmVyeSBzaW5nbGUgcG9pbnQgd2hlcmUgdGhleSBhbGwgaW50ZXJhY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgaXMgY3JpdGljYWwuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIElETEVUSU1FUiBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gTm8gZGV0YWlsIGNhbiBiZSBvdmVybG9va2VkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBsaW51eC9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBOZXRmaWx0ZXIgbW9kdWxlIHRvIHRyaWdnZXIgYSB0aW1lciB3aGVuIHBhY2tldCBtYXRjaGVzLlxuICAgNjpcdCAqIEFmdGVyIHRpbWVyIGV4cGlyZXMgYSBrZXZlbnQgd2lsbCBiZSBzZW50LlxuICAgNzpcdCAqXG4gICA4Olx0ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uXG4gICA5Olx0ICogV3JpdHRlbiBieSBUaW1vIFRlcmFzIFx1MDAzY2V4dC10aW1vLnRlcmFzQG5va2lhLmNvbVx1MDAzZVxuICAxMDpcdCAqXG4gIDExOlx0ICogQ29udmVydGVkIHRvIHhfdGFibGVzIGFuZCByZXdvcmtlZCBmb3IgdXBzdHJlYW0gaW5jbHVzaW9uXG4gIDEyOlx0ICogYnkgTHVjaWFubyBDb2VsaG8gXHUwMDNjbHVjaWFuby5jb2VsaG9Abm9raWEuY29tXHUwMDNlXG4gIDEzOlx0ICpcbiAgMTQ6XHQgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyBcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cdTAwM2VcbiAgMTU6XHQgKi9cbiAgMTY6XHRcbiAgMTc6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAxODpcdFxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsYXJtdGltZXIuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva2Rldl90LmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rb2JqZWN0LmhcdTAwM2VcbiAgMjk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAzMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiAgMzE6XHRcbiAgMzI6XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnIHtcbiAgMzM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4gIDM0Olx0XHRzdHJ1Y3QgYWxhcm0gYWxhcm07XG4gIDM1Olx0XHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcbiAgMzY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuICAzNzpcdFxuICAzODpcdFx0c3RydWN0IGtvYmplY3QgKmtvYmo7XG4gIDM5Olx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyO1xuICA0MDpcdFxuICA0MTpcdFx0dW5zaWduZWQgaW50IHJlZmNudDtcbiAgNDI6XHRcdHU4IHRpbWVyX3R5cGU7XG4gIDQzOlx0fTtcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgTElTVF9IRUFEKGlkbGV0aW1lcl90Z19saXN0KTtcbiAgNDY6XHRzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpO1xuICA0NzpcdFxuICA0ODpcdHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaWRsZXRpbWVyX3RnX2tvYmo7XG4gIDQ5Olx0XG4gIDUwOlx0c3RhdGljXG4gIDUxOlx0c3RydWN0IGlkbGV0aW1lcl90ZyAqX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChjb25zdCBjaGFyICpsYWJlbClcbiAgNTI6XHR7XG4gIDUzOlx0XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICplbnRyeTtcbiAgNTQ6XHRcbiAgNTU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0LCBlbnRyeSkge1xuICA1NjpcdFx0XHRpZiAoIXN0cmNtcChsYWJlbCwgZW50cnktXHUwMDNlYXR0ci5hdHRyLm5hbWUpKVxuICA1NzpcdFx0XHRcdHJldHVybiBlbnRyeTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdHJldHVybiBOVUxMO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgc3NpemVfdCBpZGxldGltZXJfdGdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gIDY0Olx0XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAgNjU6XHR7XG4gIDY2Olx0XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lcjtcbiAgNjc6XHRcdHVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IDA7XG4gIDY4Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSB7fTtcbiAgNjk6XHRcdGxvbmcgdGltZV9kaWZmID0gMDtcbiAgNzA6XHRcbiAgNzE6XHRcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gIDcyOlx0XG4gIDczOlx0XHR0aW1lciA9XHRfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGF0dHItXHUwMDNlYXR0ci5uYW1lKTtcbiAgNzQ6XHRcdGlmICh0aW1lcikge1xuICA3NTpcdFx0XHRpZiAodGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gIDc2Olx0XHRcdFx0a3RpbWVfdCBleHBpcmVzX2FsYXJtID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2dGltZXItXHUwMDNlYWxhcm0pO1xuICA3NzpcdFx0XHRcdGt0aW1lc3BlYyA9IGt0aW1lX3RvX3RpbWVzcGVjNjQoZXhwaXJlc19hbGFybSk7XG4gIDc4Olx0XHRcdFx0dGltZV9kaWZmID0ga3RpbWVzcGVjLnR2X3NlYztcbiAgNzk6XHRcdFx0fSBlbHNlIHtcbiAgODA6XHRcdFx0XHRleHBpcmVzID0gdGltZXItXHUwMDNldGltZXIuZXhwaXJlcztcbiAgODE6XHRcdFx0XHR0aW1lX2RpZmYgPSBqaWZmaWVzX3RvX21zZWNzKGV4cGlyZXMgLSBqaWZmaWVzKSAvIDEwMDA7XG4gIDgyOlx0XHRcdH1cbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAgODY6XHRcbiAgODc6XHRcdGlmICh0aW1lX2FmdGVyKGV4cGlyZXMsIGppZmZpZXMpIHx8IGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gIDg4Olx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWxkXFxuXCYjMzQ7LCB0aW1lX2RpZmYpO1xuICA4OTpcdFxuICA5MDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDswXFxuXCYjMzQ7KTtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuICA5NDpcdHtcbiAgOTU6XHRcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZGxldGltZXJfdGcsXG4gIDk2Olx0XHRcdFx0XHRcdFx0ICB3b3JrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdHN5c2ZzX25vdGlmeShpZGxldGltZXJfdGdfa29iaiwgTlVMTCwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuICA5OTpcdH1cbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGJlIGVmZmljaWVudDoKCioqRm9jdXNpbmcgb24gUmVnaXN0cmF0aW9uIGFuZCBUYXJnZXQgSW5mb3JtYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEZvcmdldCB0aGUgcHJlYW1ibGUgYW5kIHRoZSBmbHVmZi4gSSBuZWVkIHRvIGdldCBzdHJhaWdodCB0byB0aGUgcmVnaXN0cmF0aW9uIGFuZCB0YXJnZXQgZGV0YWlscy4gTGluZXMgMTAxIHRvIDM1MCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVhdCBpcywgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZSB3aXRoIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIHJlYWQgdGhvc2UgbGluZXMgd2l0aCBsYXNlciBmb2N1cywgZmlsdGVyaW5nIG91dCBhbnl0aGluZyBpcnJlbGV2YW50IHRvIHRob3NlIHNwZWNpZmljIGVsZW1lbnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGtleSBpZGVudGlmaWVycywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhvc2UgbGluZXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBtZW50YWxseSBwcmVwYXJlZCB0byBwaWNrIHVwIG9uIHRob3NlIHF1aWNrbHkuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZXNzZW50aWFsIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlZ2lzdHJhdGlvbnMgdGhlbXNlbHZlcyBhbmQgd2hhdGV2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCBhcyB0aGUgdGFyZ2V0IGFuZCBpdHMgcHJvcGVydGllcy4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGJ1dCBJJiMzOTttIHJlYWR5IHRvIGRlYWwgd2l0aCBjb21wbGV4aXR5IG9yIGFueSB1bmV4cGVjdGVkIGRhdGEgZm9ybWF0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gMTAyOlx0e1xuIDEwMzpcdFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSB0aW1lcl9jb250YWluZXJfb2YodGltZXIsIHQsIHRpbWVyKTtcbiAxMDQ6XHRcbiAxMDU6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gMTA2Olx0fVxuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIDExMTpcdFxuIDExMjpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyLCBrdGltZV90IHRpbWVvdXQpXG4gMTE2Olx0e1xuIDExNzpcdFx0LypcbiAxMTg6XHRcdCAqIFRoZSB0aW1lciBzaG91bGQgYWx3YXlzIGJlIHF1ZXVlZCBhcyBAdG91dCBpdCBzaG91bGQgYmUgbGVhc3Qgb25lXG4gMTE5Olx0XHQgKiBzZWNvbmQsIGJ1dCBoYW5kbGUgaXQgY29ycmVjdGx5IGluIGFueSBjYXNlLiBWaXJ0IHdpbGwgbWFuYWdlIVxuIDEyMDpcdFx0ICovXG4gMTIxOlx0XHRpZiAoIWFsYXJtX3N0YXJ0X3RpbWVyKFx1MDAyNnRpbWVyLVx1MDAzZWFsYXJtLCB0aW1lb3V0LCB0cnVlKSlcbiAxMjI6XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiAxMjM6XHR9XG4gMTI0Olx0XG4gMTI1Olx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciwgdW5zaWduZWQgaW50IHNlY29uZHMpXG4gMTI2Olx0e1xuIDEyNzpcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKHRpbWVyLCBrdGltZV9zZXQoc2Vjb25kcywgMCkpO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplKVxuIDEzMTpcdHtcbiAxMzI6XHRcdGludCByZXQ7XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXQgPSB4dF9jaGVja19wcm9jX25hbWUobmFtZSwgc2l6ZSk7XG4gMTM1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEzNjpcdFx0XHRyZXR1cm4gcmV0O1xuIDEzNzpcdFxuIDEzODpcdFx0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7cG93ZXJcJiMzNDspIHx8XG4gMTM5Olx0XHQgICAgIXN0cmNtcChuYW1lLCBcJiMzNDtzdWJzeXN0ZW1cJiMzNDspIHx8XG4gMTQwOlx0XHQgICAgIXN0cmNtcChuYW1lLCBcJiMzNDt1ZXZlbnRcJiMzNDspKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxNDI6XHRcbiAxNDM6XHRcdHJldHVybiAwO1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIDE0NzpcdHtcbiAxNDg6XHRcdGludCByZXQ7XG4gMTQ5Olx0XG4gMTUwOlx0XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIDE1MTpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gMTUyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTUzOlx0XHRcdGdvdG8gb3V0O1xuIDE1NDpcdFx0fVxuIDE1NTpcdFxuIDE1NjpcdFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cdTAwM2VsYWJlbCwgc2l6ZW9mKGluZm8tXHUwMDNlbGFiZWwpKTtcbiAxNTc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTU4Olx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMTU5Olx0XG4gMTYwOlx0XHRzeXNmc19hdHRyX2luaXQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDE2MTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XG4gMTYyOlx0XHRpZiAoIWluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcbiAxNjM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNjQ6XHRcdFx0Z290byBvdXRfZnJlZV90aW1lcjtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xuIDE2NzpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcbiAxNjg6XHRcbiAxNjk6XHRcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gMTcwOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTcxOlx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzXFxuXCYjMzQ7KTtcbiAxNzI6XHRcdFx0Z290byBvdXRfZnJlZV9hdHRyO1xuIDE3MzpcdFx0fVxuIDE3NDpcdFxuIDE3NTpcdFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuIDE3NjpcdFxuIDE3NzpcdFx0dGltZXJfc2V0dXAoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xuIDE3ODpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIDE3OTpcdFxuIDE4MDpcdFx0SU5JVF9XT1JLKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xuIDE4MTpcdFxuIDE4MjpcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMTgzOlx0XHRcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMTg0Olx0XG4gMTg1Olx0XHRyZXR1cm4gMDtcbiAxODY6XHRcbiAxODc6XHRvdXRfZnJlZV9hdHRyOlxuIDE4ODpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIubmFtZSk7XG4gMTg5Olx0b3V0X2ZyZWVfdGltZXI6XG4gMTkwOlx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyKTtcbiAxOTE6XHRvdXQ6XG4gMTkyOlx0XHRyZXR1cm4gcmV0O1xuIDE5MzpcdH1cbiAxOTQ6XHRcbiAxOTU6XHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxuIDE5NjpcdHtcbiAxOTc6XHRcdGludCByZXQ7XG4gMTk4Olx0XG4gMTk5Olx0XHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIDIwMDpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJJiMzOTt2ZSBzZWVuIGl0LCBJIHVuZGVyc3RhbmQgdGhlIGJhc2ljIHB1cnBvc2UsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGFsd2F5cyBpbiB0aGUgY29udGV4dC4gU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZXN0IG9mIHRoaXMgZmlsZS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjYWxsLCBhbmQgb2YgY291cnNlLCB3aGVyZSBpbiB0aGUgY29kZSB0aGlzIHRoaW5nIGlzIGV2ZW4gYmVpbmcgaW52b2tlZC4gVGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IOKAkyB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgYmVoaW5kIGl0cyBleGVjdXRpb24uIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBoaWdobGlnaHQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgcmVzb3VyY2UgY29uc3RyYWludHMgb3IgbWF5YmUgZXZlbiBoaW50IGF0IGhvdyB0aGUgdGltZXJzIGFyZSBtYW5hZ2VkIGFuZCBkZXN0cm95ZWQsIHdoaWNoIGlzIGFsd2F5cyB1c2VmdWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRvdXQ6XG4gMjUxOlx0XHRyZXR1cm4gcmV0O1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIFRoZSBhY3R1YWwgeHRfdGFibGVzIHBsdWdpbi5cbiAyNTY6XHQgKi9cbiAyNTc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNTg6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiAyNTk6XHR7XG4gMjYwOlx0XHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gMjYxOlx0XG4gMjYyOlx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiAyNjM6XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldHVybiBYVF9DT05USU5VRTtcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0LypcbiAyNjk6XHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXG4gMjcwOlx0ICovXG4gMjcxOlx0c3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsXG4gMjcyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gMjczOlx0e1xuIDI3NDpcdFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDI3NTpcdFxuIDI3NjpcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMjc3Olx0XHRcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cdTAwM2V0aW1lciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyNzg6XHRcdH0gZWxzZSB7XG4gMjc5Olx0XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDI4MDpcdFx0XHRcdFx0c2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gMjgxOlx0XHR9XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gWFRfQ09OVElOVUU7XG4gMjg0Olx0fVxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2hlbHBlcihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pXG4gMjg3Olx0e1xuIDI4ODpcdFx0aWYgKGluZm8tXHUwMDNldGltZW91dCA9PSAwKSB7XG4gMjg5Olx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXFxuXCYjMzQ7KTtcbiAyOTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjkxOlx0XHR9XG4gMjkyOlx0XHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbiAyOTM6XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuIDI5NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTU6XHRcdH1cbiAyOTY6XHRcdGlmIChpbmZvLVx1MDAzZWxhYmVsWzBdID09ICYjMzk7XFwwJiMzOTsgfHxcbiAyOTc6XHRcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gMjk4Olx0XHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuIDI5OTpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2xhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwmIzM0Oyk7XG4gMzAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwMTpcdFx0fVxuIDMwMjpcdFx0cmV0dXJuIDA7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdFxuIDMwNjpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gMzA3Olx0e1xuIDMwODpcdFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDMwOTpcdFx0aW50IHJldDtcbiAzMTA6XHRcbiAzMTE6XHRcdHJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoaW5mbyk7XG4gMzEyOlx0XHRpZihyZXQgXHUwMDNjIDApXG4gMzEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzMTU6XHRcbiAzMTY6XHRcdGluZm8tXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXHUwMDNlbGFiZWwpO1xuIDMxNzpcdFx0aWYgKGluZm8tXHUwMDNldGltZXIpIHtcbiAzMTg6XHRcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMzE5Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDMyMDpcdFx0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIDMyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMyMjpcdFx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiAzMjU6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMzI2Olx0XHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAzMjc6XHRcdH0gZWxzZSB7XG4gMzI4Olx0XHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7XG4gMzI5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzMzA6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gMzMxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMzI6XHRcdFx0fVxuIDMzMzpcdFx0fVxuIDMzNDpcdFxuIDMzNTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDMzNjpcdFx0cmV0dXJuIDA7XG4gMzM3Olx0fVxuIDMzODpcdFxuIDMzOTpcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gMzQwOlx0e1xuIDM0MTpcdFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDM0MjpcdFx0aW50IHJldDtcbiAzNDM6XHRcbiAzNDQ6XHRcdGlmIChpbmZvLVx1MDAzZXNlbmRfbmxfbXNnKVxuIDM0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTtcbiAzNDg6XHRcdGlmKHJldCBcdTAwM2MgMClcbiAzNDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIExpbmVzIDM1MC00MjA6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBteSBpbnRlcm5hbCBwcm9jZXNzIGhlcmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYSBzcGVjaWZpYyBibG9jayBvZiB0ZXh0LCBsaW5lcyAzNTAgdG8gNDIwLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGZldyBsaWtlbHkgcmVhc29ucy4gUGVyaGFwcyBJJiMzOTt2ZSBiZWVuIGRpcmVjdGVkIHRvIGFuYWx5emUgdGhpcyBzZWN0aW9uIGZvciBhIHBhcnRpY3VsYXIgY29uY2VwdCwgYXJndW1lbnQsIG9yIHBlcmhhcHMgaXQgaXMgcGFydCBvZiBhIGxhcmdlciBhcmd1bWVudC4gTWF5YmUgdGhpcyBpcyBhIHJlbGV2YW50IHNlZ21lbnQgaW4gd2hpY2ggdG8gZXhwbG9yZSB0aGUgdmFsaWRpdHkgb2YgbXkgaHlwb3RoZXNlcy4gUGVyaGFwcyBJIGFtIGludmVzdGlnYXRpbmcgYSBwb3RlbnRpYWwga2V5IHBvaW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGJvZHkgb2Ygd29yay4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSB0ZXh0JiMzOTtzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcbiAzNTE6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiAzNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzUzOlx0XG4gMzU0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDM1NTpcdFxuIDM1NjpcdFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gMzU3Olx0XHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIDM1ODpcdFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuIDM1OTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzNjA6XHRcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbiAzNjE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjI6XHRcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCYjNDM7JiM0Mzs7XG4gMzY1Olx0XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDM2NjpcdFx0XHRcdC8qIGNhbGN1bGF0ZSByZW1haW5pbmcgZXhwaXJ5IHRpbWUgKi9cbiAzNjc6XHRcdFx0XHRrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWFsYXJtKTtcbiAzNjg6XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpO1xuIDM2OTpcdFxuIDM3MDpcdFx0XHRcdGlmIChrdGltZXNwZWMudHZfc2VjIFx1MDAzZSAwKVxuIDM3MTpcdFx0XHRcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKGluZm8tXHUwMDNldGltZXIsIHRvdXQpO1xuIDM3MjpcdFx0XHR9IGVsc2Uge1xuIDM3MzpcdFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMzc0Olx0XHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDM3NTpcdFx0XHR9XG4gMzc2Olx0XHR9IGVsc2Uge1xuIDM3NzpcdFx0XHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xuIDM3ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMzc5Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDM4MDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzgxOlx0XHRcdH1cbiAzODI6XHRcdH1cbiAzODM6XHRcbiAzODQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzODU6XHRcdHJldHVybiAwO1xuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4gMzg5Olx0e1xuIDM5MDpcdFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIDM5MTpcdFxuIDM5MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzOTM6XHRcbiAzOTQ6XHRcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4gMzk1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiAzOTY6XHRcdFx0cmV0dXJuO1xuIDM5NzpcdFx0fVxuIDM5ODpcdFxuIDM5OTpcdFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gNDAwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gNDAxOlx0XG4gNDAyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIpO1xuIDQwMzpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmspO1xuIDQwNDpcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiA0MDU6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDQwNjpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lcik7XG4gNDA3Olx0fVxuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiA0MTA6XHR7XG4gNDExOlx0XHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gNDEyOlx0XG4gNDEzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDQxNDpcdFxuIDQxNTpcdFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbiA0MTY6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIDQxNzpcdFx0XHRyZXR1cm47XG4gNDE4Olx0XHR9XG4gNDE5Olx0XG4gNDIwOlx0XHRsaXN0X2RlbChcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWVudHJ5KTtcbiA0MjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIDQyNDpcdFx0XHRhbGFybV9jYW5jZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gNDI1Olx0XHR9IGVsc2Uge1xuIDQyNjpcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIpO1xuIDQyNzpcdFx0fVxuIDQyODpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmspO1xuIDQyOTpcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRExFVElNRVIgVGFyZ2V0IGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGB4dF9JRExFVElNRVJgLCB3aGljaCBpcyBhbiBpcHRhYmxlcy94X3RhYmxlcyB0YXJnZXQgZXh0ZW5zaW9uLiBJdCYjMzk7cyByZWdpc3RlcmVkIHZpYSBgeHRfcmVnaXN0ZXJfdGFyZ2V0c2AuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBpdCBpbiBhIHR5cGljYWwgc3l6a2FsbGVyL1FFTVUgc2V0dXA/IFllcywgd2UgY2FuLCB1c2luZyBpcHRhYmxlcy94X3RhYmxlcyYjMzk7IGBzZXRzb2Nrb3B0YCB3aXRoIGBJUFRfU09fU0VUX1JFUExBQ0VgLCBvciB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIGBuZl90YWJsZXNgIGNvbXBhdGliaWxpdHksIG9yIGV2ZW4gc3RhbmRhcmQgYGlwdGFibGVzYCBzb2NrZXQgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGBJRExFVElNRVJgIHRhcmdldC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGV5IHVzZWQgYGttYWxsb2Nfb2JqYCBvbiB0aGUgYGluZm8tJmd0O3RpbWVyYCBzdHJ1Y3QsIHdoaWNoIGxlYXZlcyBwYXJ0cyBvZiB0aGUgc3RydWN0IHVuaW5pdGlhbGl6ZWQuICBJIHJlbWVtYmVyIGBpZGxldGltZXJfdGdfY3JlYXRlYCAodjApIHVzZWQgYGt6YWxsb2Nfb2JqYC4uLiBzbyB0aGV5IGNoYW5nZWQgaXQgYW5kIGJyb2tlIGl0ISBUaGlzIGlzIGJhZCBuZXdzLCBiZWNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBgc3RydWN0IGlkbGV0aW1lcl90Z2AgY2FuIGRlZmluaXRlbHkgbGVhZCB0byBidWdzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbiwgZXNwZWNpYWxseSB3aXRoIGZpZWxkcyBpbiBgc3RydWN0IHRpbWVyX2xpc3RgLCBgc3RydWN0IGFsYXJtYCwgYHRpbWVyX3R5cGVgLCBvciBwb2ludGVycyBnb2luZyBoYXl3aXJlLCBvciBpbiBmdW5jdGlvbnMgbGlrZSBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgIGFuZCBgaWRsZXRpbWVyX3RnX3Nob3dgLiAgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29ycmVjdGx5IHVzaW5nIGBremFsbG9jX29iamAgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4KClRoaXMgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaW1lIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgYFdvcnRoRnV6emluZ2AuCgoqICAgKipTdWJzeXN0ZW06KiogSXQmIzM5O3MgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIEdvb2Qgc3RhcnQuCiogICAqKlJlYWNoYWJsZToqKiBZZXMsIHdlIGNhbiBjb25maWd1cmUgaXQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IG9wdGlvbnMsIG5ldGxpbmssIGlwdGFibGVzLCBldGMuCiogICAqKk5vbi1rZXJuZWwvTm9uLWV4ZWN1dGFibGU6KiogTm8sIGl0JiMzOTtzIHB1cmUgQyBsb2dpYyB3aXRoaW4gYSBrZXJuZWwgbW9kdWxlLCBzbyBpdCYjMzk7cyBmYWlyIGdhbWUuCiogICAqKlVucmVhY2hhYmxlIEhhcmR3YXJlOioqIEl0JiMzOTtzIHNvZnR3YXJlLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGNvbmNlcm4uCiogICAqKlRlYXJkb3duLW9ubHkgb3Igbm9uLUFNRDY0OioqIE5vLCBkb2VzbiYjMzk7dCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBXZSYjMzk7dmUgZ290IGEgcmVhY2hhYmxlLCBleHBsb2l0YWJsZSBjaGFuZ2UgaW4gZXhlY3V0YWJsZSBrZXJuZWwgY29kZSEKCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGluIGB4dF9JRExFVElNRVIuY2A/IFdlJiMzOTt2ZSBnb3Q6CgoqICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIChhIHN0YXRpYyBmdW5jdGlvbjsgd2UmIzM5O2xsIGNoZWNrIGl0cyBjYWxsIGNoYWluIHZpYSBgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFgIHRvIGNoZWNrIGZvciBpbmxpbmluZyBwb3NzaWJpbGl0aWVzKS4KKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAKKiAgIGBpZGxldGltZXJfdGdfdGFyZ2V0X3YxYAoqICAgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYAoqICAgYGlkbGV0aW1lcl90Z19zaG93YAoqICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgCgpgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaXMgaW5kZWVkIHN0YXRpYzogYHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pYC4gIFRoZSBvdGhlcnMgYXJlIHRoZSB0eXBpY2FsIHRhcmdldCBvcGVyYXRpb25zIGNhbGxiYWNrcy4gU28sIG91ciBmb2N1cyBzeW1ib2xzIGFyZToKCiogICBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAKKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAKKiAgIGBpZGxldGltZXJfdGdfdGFyZ2V0X3YxYAoqICAgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYAoKRmluYWxseSwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGlzPyBXZSBkZWZpbml0ZWx5IG5lZWQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYC4gIFdlIGNhbiBjaGVjayBkZXBlbmRlbmNpZXMuIFRoZSBLY29uZmlnIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGNvbmZpcm1zOgoKYGBgCmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUgoJdHJpc3RhdGUgJiMzNDtJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnQmIzM0OwoJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKYGBgCgpTbyB3ZSBhbHNvIG5lZWQgYE5FVEZJTFRFUmAgKGJhc2UpLCBgTkVURklMVEVSX1hUQUJMRVNgIGFuZCBvZiBjb3Vyc2UsIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAuIFRpbWUgdG8gY2hlY2sgYHh0X0lETEVUSU1FUi5jYCBmb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgYGdyZXBgIGZvciBgQ09ORklHX2Agb3IgYGlmZGVmYCB3aXRoaW4gdGhlIGZpbGUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZkZWZ8Q09ORklHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jPTQzNT1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpZGxldGltZXJfdGdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMtNDU2LVx0fSxcbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmM6NDU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpXG5uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jLTQ1OC1cdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRXhhbWluaW5nIHh0X0lETEVUSU1FUi5jJiMzOTtzIFRhaWwgRW5kKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHRhaWwgZW5kIG9mIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZXkgbGVmdCBvZmYgd2l0aCB0aGlzIG1vZHVsZSwgZXNwZWNpYWxseSBhZnRlciB0aGF0IGxhc3QgY29kZSByZXZpZXcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbGF0ZXN0IGNvbW1pdHMgdG91Y2hlZC4gV2VyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyBmaXhlcyBpbiB0aGUgY2xlYW51cCBmdW5jdGlvbnM/IEFueSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRvIHRoZSBpZGxlIHRpbWVyIGl0c2VsZiB0aGF0IG1pZ2h0IGhhdmUgc251Y2sgaW4gdGhlcmU/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBlZGdlIGNhc2VzIGR1cmluZyB0ZWFyZG93biwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gdGhvc2Ugc2hhcmVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIHlvdSBrbm93LiBNYWtlIHN1cmUgdGhlIG11dGV4ZXMgYXJlIGJlaW5nIHJlbGVhc2VkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGUtaW5pdCByb3V0aW5lcyBmaXJzdCwgdGhlbiBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nLiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiA0MzE6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDQzMjpcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcbiA0MzU6XHRzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpZGxldGltZXJfdGdbXSBfX3JlYWRfbW9zdGx5ID0ge1xuIDQzNjpcdFx0e1xuIDQzNzpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0Mzg6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNCxcbiA0Mzk6XHRcdFx0LnRhcmdldFx0XHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXG4gNDQwOlx0XHRcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxuIDQ0MTpcdFx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXG4gNDQyOlx0XHRcdC5jaGVja2VudHJ5XHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5LFxuIDQ0MzpcdFx0XHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcbiA0NDQ6XHRcdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4gNDQ1Olx0XHR9LFxuIDQ0NjpcdFx0e1xuIDQ0NzpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NDg6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNCxcbiA0NDk6XHRcdFx0LnJldmlzaW9uXHQ9IDEsXG4gNDUwOlx0XHRcdC50YXJnZXRcdFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxuIDQ1MTpcdFx0XHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxKSxcbiA0NTI6XHRcdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxuIDQ1MzpcdFx0XHQuY2hlY2tlbnRyeVx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcbiA0NTQ6XHRcdFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXG4gNDU1Olx0XHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuIDQ1NjpcdFx0fSxcbiA0NTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVA2X05GX0lQVEFCTEVTKVxuIDQ1ODpcdFx0e1xuIDQ1OTpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NjA6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbiA0NjE6XHRcdFx0LnRhcmdldFx0XHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXG4gNDYyOlx0XHRcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxuIDQ2MzpcdFx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXG4gNDY0Olx0XHRcdC5jaGVja2VudHJ5XHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5LFxuIDQ2NTpcdFx0XHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcbiA0NjY6XHRcdFx0Lm1lXHRcdD0gVEhJU19NT0RVTEUsXG4gNDY3Olx0XHR9LFxuIDQ2ODpcdFx0e1xuIDQ2OTpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O0lETEVUSU1FUlwmIzM0OyxcbiA0NzA6XHRcdFx0LmZhbWlseVx0XHQ9IE5GUFJPVE9fSVBWNixcbiA0NzE6XHRcdFx0LnJldmlzaW9uXHQ9IDEsXG4gNDcyOlx0XHRcdC50YXJnZXRcdFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxuIDQ3MzpcdFx0XHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxKSxcbiA0NzQ6XHRcdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxuIDQ3NTpcdFx0XHQuY2hlY2tlbnRyeVx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcbiA0NzY6XHRcdFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXG4gNDc3Olx0XHRcdC5tZVx0XHQ9IFRISVNfTU9EVUxFLFxuIDQ3ODpcdFx0fSxcbiA0Nzk6XHQjZW5kaWZcbiA0ODA6XHR9O1xuIDQ4MTpcdFxuIDQ4MjpcdHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlkbGV0aW1lcl90Z19jbGFzcztcbiA0ODM6XHRcbiA0ODQ6XHRzdGF0aWMgc3RydWN0IGRldmljZSAqaWRsZXRpbWVyX3RnX2RldmljZTtcbiA0ODU6XHRcbiA0ODY6XHRzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIDQ4NzpcdHtcbiA0ODg6XHRcdGludCBlcnI7XG4gNDg5Olx0XG4gNDkwOlx0XHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCYjMzQ7eHRfaWRsZXRpbWVyXCYjMzQ7KTtcbiA0OTE6XHRcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKTtcbiA0OTI6XHRcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKSkge1xuIDQ5MzpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIGRldmljZSBjbGFzc1xcblwmIzM0Oyk7XG4gNDk0Olx0XHRcdGdvdG8gb3V0O1xuIDQ5NTpcdFx0fVxuIDQ5NjpcdFxuIDQ5NzpcdFx0aWRsZXRpbWVyX3RnX2RldmljZSA9IGRldmljZV9jcmVhdGUoaWRsZXRpbWVyX3RnX2NsYXNzLCBOVUxMLFxuIDQ5ODpcdFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwmIzM0O3RpbWVyc1wmIzM0Oyk7XG4gNDk5Olx0XHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xuIDUwMDpcdFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkge1xuIDUwMTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcXG5cJiMzNDspO1xuIDUwMjpcdFx0XHRnb3RvIG91dF9jbGFzcztcbiA1MDM6XHRcdH1cbiA1MDQ6XHRcbiA1MDU6XHRcdGlkbGV0aW1lcl90Z19rb2JqID0gXHUwMDI2aWRsZXRpbWVyX3RnX2RldmljZS1cdTAwM2Vrb2JqO1xuIDUwNjpcdFxuIDUwNzpcdFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XG4gNTA4Olx0XG4gNTA5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDYxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElETEVUSU1FUiBOZXRmaWx0ZXIgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAsIHNwZWNpZmljYWxseSB0aGUgc3dpdGNoIGZyb20gYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBmdXp6YWJsZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFzIGluZGljYXRlZCBieSBsaW5lcyA5MTgtOTIwLiBGdXJ0aGVybW9yZSwgdGhlIGBNYWtlZmlsZWAgY29uZmlybXMgaXRzIGluY2x1c2lvbjogYG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgJiM0Mzs9IHh0X0lETEVUSU1FUi5vYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBORVRGSUxURVJfWFRBQkxFU2AgaXMgYWxzbyBwcm9iYWJseSBuZWVkZWQuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFuZCBgTkVURklMVEVSX1hUQUJMRVNgLgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCwgYGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxYCwgYGlkbGV0aW1lcl90Z190YXJnZXRfdjFgLCBhbmQgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBEb2VzIHRoaXMgbWFrZSBmb3IgYSBnb29kIGZ1enogdGFyZ2V0PyBUaGUgcmVhc29uaW5nIGNsZWFybHkgc3RhdGVzIHRoZSBjaGFuZ2UgaW52b2x2ZXMgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAuIFdlJiMzOTtyZSBnb2luZyBmcm9tIHJlZ3VsYXIgYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBDcnVjaWFsbHksIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGlwdGFibGVzIHJ1bGVzLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHllcywgdGhpcyBsb29rcyBsaWtlIGEgd29ydGh3aGlsZSBmdXp6IHRhcmdldC4KCkkmIzM5O20gY29uZmlkZW50IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jcmVhdGVfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEmIzM0OywKICAgICYjMzQ7aWRsZXRpbWVyX3RnX3RhcmdldF92MSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfZGVzdHJveV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpZGxldGltZXJfdGdfY3JlYXRlX3YxKCkgaW4gbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyB0byB1c2Uga3phbGxvY19vYmogaW5zdGVhZCBvZiBrbWFsbG9jX29iaiB3aGVuIGFsbG9jYXRpbmcgdGhlIGlkbGV0aW1lcl90ZyBzdHJ1Y3QsIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldGZpbHRlciB4dGFibGVzIHRhcmdldCBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmQ5NGNlYjc3MGQxNzViNmVjOWI2OGVlNDlkMjRiYTU0NzdiMDUxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDA6MjU6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwppbmRleCBmZTdkOGQxOTYyOWI0Li44YTFkOTVkMjE5OTE3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKQEAgLTE5Niw3ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbykKIHsKIAlpbnQgcmV0OwogCi0JaW5mby0mZ3Q7dGltZXIgPSBrbWFsbG9jX29iaigqaW5mby0mZ3Q7dGltZXIpOwomIzQzOwlpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7CiAJaWYgKCFpbmZvLSZndDt0aW1lcikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElETEVUSU1FUiBNb2R1bGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGB4dF9JRExFVElNRVIuY2AgbW9kdWxlIHdpdGhpbiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIE5vIHNlbnNlIGluIHN0YXJ0aW5nIGJsaW5kLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGFuZCBhbGxvdyBtZSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZGlzc2VjdCB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAxODE6XHRcbiAxODI6XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDE4MzpcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDE4NDpcdFxuIDE4NTpcdFx0cmV0dXJuIDA7XG4gMTg2Olx0XG4gMTg3Olx0b3V0X2ZyZWVfYXR0cjpcbiAxODg6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDE4OTpcdG91dF9mcmVlX3RpbWVyOlxuIDE5MDpcdFx0a2ZyZWUoaW5mby1cdTAwM2V0aW1lcik7XG4gMTkxOlx0b3V0OlxuIDE5MjpcdFx0cmV0dXJuIHJldDtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiAxOTY6XHR7XG4gMTk3Olx0XHRpbnQgcmV0O1xuIDE5ODpcdFxuIDE5OTpcdFx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiAyMDA6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIDIwMTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDIwMjpcdFx0XHRnb3RvIG91dDtcbiAyMDM6XHRcdH1cbiAyMDQ6XHRcbiAyMDU6XHRcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVx1MDAzZWxhYmVsKSk7XG4gMjA2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDIwNzpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDIwODpcdFxuIDIwOTpcdFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAyMTA6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuIDIxMTpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gMjEyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMjEzOlx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMjE0Olx0XHR9XG4gMjE1Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcbiAyMTY6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5zaG93ID0gaWRsZXRpbWVyX3RnX3Nob3c7XG4gMjE3Olx0XG4gMjE4Olx0XHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDIxOTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDIyMDpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1xcblwmIzM0Oyk7XG4gMjIxOlx0XHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiAyMjI6XHRcdH1cbiAyMjM6XHRcbiAyMjQ6XHRcdC8qICBub3RpZnkgdXNlcnNwYWNlICAqL1xuIDIyNTpcdFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xuIDIyNjpcdFxuIDIyNzpcdFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuIDIyODpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIDIyOTpcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIDIzMDpcdFxuIDIzMTpcdFx0SU5JVF9XT1JLKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xuIDIzMjpcdFxuIDIzMzpcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4gMjM0Olx0XHRcdGFsYXJtX2luaXQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSwgQUxBUk1fQk9PVFRJTUUsXG4gMjM1Olx0XHRcdFx0ICAgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyk7XG4gMjM2Olx0XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYWxhcm0uZGF0YSA9IGluZm8tXHUwMDNldGltZXI7XG4gMjM3Olx0XHRcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cdTAwM2V0aW1lciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyMzg6XHRcdH0gZWxzZSB7XG4gMjM5Olx0XHRcdHRpbWVyX3NldHVwKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcbiAyNDA6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gMjQxOlx0XHRcdFx0XHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTtcbiAyNDI6XHRcdH1cbiAyNDM6XHRcbiAyNDQ6XHRcdHJldHVybiAwO1xuIDI0NTpcdFxuIDI0NjpcdG91dF9mcmVlX2F0dHI6XG4gMjQ3Olx0XHRrZnJlZShpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiAyNDg6XHRvdXRfZnJlZV90aW1lcjpcbiAyNDk6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXIpO1xuIDI1MDpcdG91dDpcbiAyNTE6XHRcdHJldHVybiByZXQ7XG4gMjUyOlx0fVxuIDI1MzpcdFxuIDI1NDpcdC8qXG4gMjU1Olx0ICogVGhlIGFjdHVhbCB4dF90YWJsZXMgcGx1Z2luLlxuIDI1NjpcdCAqL1xuIDI1NzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDI1ODpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIDI1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSURMRVRJTUVSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYElETEVUSU1FUmAgdGFyZ2V0IHdpdGhpbiBOZXRmaWx0ZXIuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYCByaWdodCBub3cuIE15IGtleSBpbnRlcmVzdCBpcyBhcm91bmQgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgdGFyZ2V0IGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb24gMCBhbmQgdmVyc2lvbiAxIHRoYXQgd2VyZSBpbXBsZW1lbnRlZC4gSSBhbHNvIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBzdHJ1Y3QgYWN0dWFsbHkgKmNvbnRhaW5zKi4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGRlZmluZWQgaW5zaWRlIG9mIHRoZSBzdHJ1Y3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBicmVhayBpdCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0ICAgICFzdHJjbXAobmFtZSwgXCYjMzQ7dWV2ZW50XCYjMzQ7KSlcbiAxNDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQyOlx0XG4gMTQzOlx0XHRyZXR1cm4gMDtcbiAxNDQ6XHR9XG4gMTQ1Olx0XG4gMTQ2Olx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiAxNDc6XHR7XG4gMTQ4Olx0XHRpbnQgcmV0O1xuIDE0OTpcdFxuIDE1MDpcdFx0aW5mby1cdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVx1MDAzZXRpbWVyKTtcbiAxNTE6XHRcdGlmICghaW5mby1cdTAwM2V0aW1lcikge1xuIDE1MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDE1MzpcdFx0XHRnb3RvIG91dDtcbiAxNTQ6XHRcdH1cbiAxNTU6XHRcbiAxNTY6XHRcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVx1MDAzZWxhYmVsKSk7XG4gMTU3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE1ODpcdFx0XHRnb3RvIG91dF9mcmVlX3RpbWVyO1xuIDE1OTpcdFxuIDE2MDpcdFx0c3lzZnNfYXR0cl9pbml0KFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiAxNjE6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUgPSBrc3RyZHVwKGluZm8tXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xuIDE2MjpcdFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKSB7XG4gMTYzOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTY0Olx0XHRcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XG4gMTY1Olx0XHR9XG4gMTY2Olx0XHRpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcbiAxNjc6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5zaG93ID0gaWRsZXRpbWVyX3RnX3Nob3c7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIDE3MDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE3MTpcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1xcblwmIzM0Oyk7XG4gMTcyOlx0XHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiAxNzM6XHRcdH1cbiAxNzQ6XHRcbiAxNzU6XHRcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbiAxNzY6XHRcbiAxNzc6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcbiAxNzg6XHRcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdElOSVRfV09SSyhcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcbiAxODE6XHRcbiAxODI6XHRcdG1vZF90aW1lcihcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyLFxuIDE4MzpcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIDE4NDpcdFxuIDE4NTpcdFx0cmV0dXJuIDA7XG4gMTg2Olx0XG4gMTg3Olx0b3V0X2ZyZWVfYXR0cjpcbiAxODg6XHRcdGtmcmVlKGluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuIDE4OTpcdG91dF9mcmVlX3RpbWVyOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSWRsZXRpbWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGttYWxsb2Nfb2JqYCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBpbmZvLSZndDt0aW1lcmAsIGJ1dCB0aGUgcGF0Y2ggc3dhcHMgdGhhdCBvdXQgZm9yIGBremFsbG9jX29iamAuIEFoLCB0aGUgbGlnaHRidWxiIG1vbWVudCEgVGhpcyBpcyBjbGVhcmx5IGEgZml4IGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gSSByZWNhbGwgdGhhdCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBtZW1vcnkgYnV0IGRvZXNuJiMzOTt0IHplcm8gaXQsIHdoZXJlYXMgYGt6YWxsb2Nfb2JqYCBkb2VzLiBUaGlzIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQmIzM5O3Mgc3VidGxlLCBidXQgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgc3RhcnRzIHdpdGggY2xlYW4gZGF0YS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGlkbGV0aW1lcl90Z19jcmVhdGVgIGFscmVhZHkgdXNpbmcgYGt6YWxsb2Nfb2JqYD8gU28sIHRoaXMgcGF0Y2ggYnJpbmdzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBvZiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaW4gbGluZSB3aXRoIGl0cyBzaWJsaW5nIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gQ29uc2lzdGVuY3kgaXMgZ29vZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aW1lciBzdHJ1Y3R1cmVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBpZGxldGltZXJfdGdgIHdlcmUgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBhbmQgY2F1c2luZyBwcm9ibGVtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3R1cmUgYWN0dWFsbHkgY29udGFpbnMuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIGxpbnV4L25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIE5ldGZpbHRlciBtb2R1bGUgdG8gdHJpZ2dlciBhIHRpbWVyIHdoZW4gcGFja2V0IG1hdGNoZXMuXG4gICA2Olx0ICogQWZ0ZXIgdGltZXIgZXhwaXJlcyBhIGtldmVudCB3aWxsIGJlIHNlbnQuXG4gICA3Olx0ICpcbiAgIDg6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTm9raWEgQ29ycG9yYXRpb25cbiAgIDk6XHQgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgXHUwMDNjZXh0LXRpbW8udGVyYXNAbm9raWEuY29tXHUwMDNlXG4gIDEwOlx0ICpcbiAgMTE6XHQgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIHJld29ya2VkIGZvciB1cHN0cmVhbSBpbmNsdXNpb25cbiAgMTI6XHQgKiBieSBMdWNpYW5vIENvZWxobyBcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cdTAwM2VcbiAgMTM6XHQgKlxuICAxNDpcdCAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIFx1MDAzY2x1Y2lhbm8uY29lbGhvQG5va2lhLmNvbVx1MDAzZVxuICAxNTpcdCAqL1xuICAxNjpcdFxuICAxNzpcdCNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gIDE4Olx0XG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWxhcm10aW1lci5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZGV2X3QuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuICAzMTpcdFxuICAzMjpcdHN0cnVjdCBpZGxldGltZXJfdGcge1xuICAzMzpcdFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcbiAgMzQ6XHRcdHN0cnVjdCBhbGFybSBhbGFybTtcbiAgMzU6XHRcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuICAzNjpcdFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gIDM3Olx0XG4gIDM4Olx0XHRzdHJ1Y3Qga29iamVjdCAqa29iajtcbiAgMzk6XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7XG4gIDQwOlx0XG4gIDQxOlx0XHR1bnNpZ25lZCBpbnQgcmVmY250O1xuICA0MjpcdFx0dTggdGltZXJfdHlwZTtcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0YXRpYyBMSVNUX0hFQUQoaWRsZXRpbWVyX3RnX2xpc3QpO1xuICA0NjpcdHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9tdXRleCk7XG4gIDQ3Olx0XG4gIDQ4Olx0c3RhdGljIHN0cnVjdCBrb2JqZWN0ICppZGxldGltZXJfdGdfa29iajtcbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWNcbiAgNTE6XHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICpfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGNvbnN0IGNoYXIgKmxhYmVsKVxuICA1MjpcdHtcbiAgNTM6XHRcdHN0cnVjdCBpZGxldGltZXJfdGcgKmVudHJ5O1xuICA1NDpcdFxuICA1NTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QsIGVudHJ5KSB7XG4gIDU2Olx0XHRcdGlmICghc3RyY21wKGxhYmVsLCBlbnRyeS1cdTAwM2VhdHRyLmF0dHIubmFtZSkpXG4gIDU3Olx0XHRcdFx0cmV0dXJuIGVudHJ5O1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzgKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogNjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJlYXNvbmluZyBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiAqYHN0cnVjdCBpZGxldGltZXJfdGdgIGlzIHRoZSBrZXkgc3RydWN0IGhlcmUsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBpdHMgYWxsb2NhdGlvbi4gYGttYWxsb2Nfb2JqYCB3YXMgdXNlZCBwcmV2aW91c2x5LCBtZWFuaW5nIGZpZWxkcyBsaWtlIGBrb2JqYCwgcG90ZW50aWFsbHkgZXZlbiBgYWxhcm1gIGFuZCBgdGltZXJgIGRlcGVuZGluZyBvbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgY291bGQgaGF2ZSBoZWxkIHVuaW5pdGlhbGl6ZWQgZGF0YS4gWWVzLCBgYWxhcm1faW5pdGAgb3IgYHRpbWVyX3NldHVwYCBoYW5kbGVzIHNvbWUgb2YgdGhlbSwgYnV0IG5vdCBuZWNlc3NhcmlseSBhbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3QuKgoKKk5vdywgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiB0byBga3phbGxvY19vYmpgLiBFZmZlY3RpdmVseSwgaXQgaXMgKipmaXhpbmcqKiBhIHBvdGVudGlhbCBwcm9ibGVtIGJ5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBpZGxldGltZXJfdGdgIHVwb24gYWxsb2NhdGlvbi4gQnJpbGxpYW50ISBJdCBlbGltaW5hdGVzIHRoZSByaXNrLioKCipEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgcmlza3M/IEFic29sdXRlbHkgbm90LiBJdCByZW1vdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5ICpndWFyYW50ZWVpbmcqIHplcm8taW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgZ29vZC4qCgoqVGltZSB0byBjb25zaWRlciB0aGUgS01TQU4gcnVsZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOioKKiAgICpSdWxlIDE6IFN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOby4qCiogICAqUnVsZSAyOiBDb25kaXRpb25hbCBsb2dpYyB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBtZW1vcnkgaXMgemVyb2VkIG91dC4qCiogICAqUnVsZSAzOiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQuKgoqICAgKlJ1bGUgNDogQm91bmRzIGNoZWNrcyBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhPyBOby4qCgoqVGhlIG9wcG9zaXRlIGlzIHRydWUgLSBieSB1c2luZyBga3phbGxvY19vYmpgLCBhbGwgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdCBpZGxldGltZXJfdGdgIGFyZSB6ZXJvZWQgb3V0Ki4KCipUaGVyZWZvcmUsIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZTogYE5lZWRzS01TQU4gPSBmYWxzZWAuKgoKKkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdlIGNhbiBmaW5kIGBpbmZvLSZndDt0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLSZndDt0aW1lcik7YCBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXIsIHNvIHRoZSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4gVGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW1wbG95ZWQgaGVyZS4qCgoqVGhlIEtNU0FOIHJlYXNvbmluZyB3aWxsIGJlIGFzIGNvbmNpc2UgYXMgcG9zc2libGUuKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYW4gdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb24gKGBrbWFsbG9jX29iamApIHdpdGggYSB6ZXJvLWluaXRpYWxpemluZyBhbGxvY2F0aW9uIChga3phbGxvY19vYmpgKSBmb3IgYHN0cnVjdCBpZGxldGltZXJfdGdgIGluIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxKClgLiBUaGlzIGNoYW5nZSBmaXhlcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyByaXNrcyBvciBleHBvc3VyZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbGwgZmllbGRzIGluIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGFyZSBub3cgZnVsbHkgemVyb2VkIHVwb24gYWxsb2NhdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MTguMTQ3MDM1NDU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNzQxNjc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkVURklMVEVSX1hUQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxldGltZXJfdGdfY3JlYXRlX3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX3RhcmdldF92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpIGluIG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgdG8gdXNlIGt6YWxsb2Nfb2JqIGluc3RlYWQgb2Yga21hbGxvY19vYmogd2hlbiBhbGxvY2F0aW5nIHRoZSBpZGxldGltZXJfdGcgc3RydWN0LCBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgeHRhYmxlcyB0YXJnZXQgY29uZmlndXJhdGlvbiBhbmQgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToxOC4xNDcwNDA4ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzQxMDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMDoyNToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGluZm8tXFx1MDAzZXRpbWVyID0ga21hbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0aW5mby1cXHUwMDNldGltZXIgPSBremFsbG9jX29iaigqaW5mby1cXHUwMDNldGltZXIpO1xcbiBcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToxOC43MDE0MTI2MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNzU1NjMyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5FVEZJTFRFUl9YVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWRsZXRpbWVyX3RnX2NyZWF0ZV92MVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z190YXJnZXRfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19kZXN0cm95X3YxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpIGluIG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgdG8gdXNlIGt6YWxsb2Nfb2JqIGluc3RlYWQgb2Yga21hbGxvY19vYmogd2hlbiBhbGxvY2F0aW5nIHRoZSBpZGxldGltZXJfdGcgc3RydWN0LCBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXRmaWx0ZXIgeHRhYmxlcyB0YXJnZXQgY29uZmlndXJhdGlvbiBhbmQgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4rXHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MTguNzAxNDE1MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU1NDc0MDYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElETEVUSU1FUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBJIHNlZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYDogYSBga21hbGxvY19vYmpgIGNhbGwgaXMgYmVpbmcgc3dhcHBlZCBvdXQgZm9yIGEgYGt6YWxsb2Nfb2JqYCBjYWxsLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBgaW5mby1cdTAwM2V0aW1lcmAgZmllbGQuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQsIHdoaWNoIGlzIGdvb2QgdGhleSBhcmUgYWRkcmVzc2luZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgYXJvdW5kIGxpbmUgMTk2LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGF0IGBpbmZvLVx1MDAzZXRpbWVyYCBzdHJ1Y3R1cmUg4oCTIGl0cyBkZWZpbml0aW9uLCBob3cgaXQncyB1c2VkIGJlZm9yZSBhbmQgYWZ0ZXIgYWxsb2NhdGlvbiwgYW5kIGltcG9ydGFudGx5LCBob3cgdGhpcyB0aW1lciBpcyAqaW5pdGlhbGl6ZWQqIGFmdGVyIGFsbG9jYXRpb24gKG9yLCBwcmV2aW91c2x5LCBsYWNrIHRoZXJlb2YpLiBJIG5lZWQgdG8gc2VlIGlmIHRoZSB6ZXJvaW5nIGlzIGFjdHVhbGx5ICpuZWNlc3NhcnkqIG9yIGp1c3QgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIGB4dF9JRExFVElNRVJgIGlzIGFsc28gaW4gb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MjIuMjU2MTU4NDQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTcxOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAxNzg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDE4MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcbiAxODc6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMTg4OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDE4OTpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMTkwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTkxOlxcdG91dDpcXG4gMTkyOlxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpbnQgcmV0O1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDIwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIDIwMTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAyMDI6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXFx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cXHUwMDNlbGFiZWwpKTtcXG4gMjA2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyMDc6XFx0XFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0c3lzZnNfYXR0cl9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMjEwOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbiAyMTE6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDIxMzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAyMTQ6XFx0XFx0fVxcbiAyMTU6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcXG4gMjE2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMjE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDIyMDpcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXFxuXFxcIik7XFxuIDIyMTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdC8qICBub3RpZnkgdXNlcnNwYWNlICAqL1xcbiAyMjU6XFx0XFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHRsaXN0X2FkZChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWVudHJ5LCBcXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xcbiAyMjg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlO1xcbiAyMjk6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIDIzNDpcXHRcXHRcXHRhbGFybV9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0sIEFMQVJNX0JPT1RUSU1FLFxcbiAyMzU6XFx0XFx0XFx0XFx0ICAgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyk7XFxuIDIzNjpcXHRcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0uZGF0YSA9IGluZm8tXFx1MDAzZXRpbWVyO1xcbiAyMzc6XFx0XFx0XFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVxcdTAwM2V0aW1lciwgaW5mby1cXHUwMDNldGltZW91dCk7XFxuIDIzODpcXHRcXHR9IGVsc2Uge1xcbiAyMzk6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAyNDA6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI0MTpcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdG91dF9mcmVlX2F0dHI6XFxuIDI0NzpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xcbiAyNDg6XFx0b3V0X2ZyZWVfdGltZXI6XFxuIDI0OTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjIyLjI1NjIzNjgyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTc2MzEwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgeHRfSURMRVRJTUVSYCBOZXRmaWx0ZXIgRXh0ZW5zaW9uKipcblxuQWxyaWdodCwgc28gYHh0X0lETEVUSU1FUi5jYC4uLnRoYXQncyBhIG5ldGZpbHRlciB0YXJnZXQgZXh0ZW5zaW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgdGhpcyBmaXQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbj8gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiBpdCdzIGVuYWJsZWQgYW5kIGhvdyB0byBjb25maWd1cmUgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGFuZCBob3cgaXQgaXMgY29udHJvbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGBLY29uZmlnYCBoYXMgdG8gc2F5IGFib3V0IGB4dF9JRExFVElNRVJgLiBJIGV4cGVjdCB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIG1vZHVsZSwgcGVyaGFwcyBzb21lIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjI0LjMxMzg3MjAyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3NDU2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnPTc2PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3NzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnLTc4LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnOjEyMzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZy0xMjQtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEPW1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MjAwPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjIwMTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjAyLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRD1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTIxNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTIxOC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQ9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTEyMj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjEyMzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy0xMjQtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc9MTE4PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnOjExOTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctMTIwLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9MTI1PUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6MTI2OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTEyNy1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTExNT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy0xMTctQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZz0xMTc9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZzoxMTg6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctMTE5LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTExNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoxMTc6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnLTExOC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTEzNj1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjEzNzpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0xMzgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnPTExND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6MTE1OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMTE2LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz0xMTU9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjExNjpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTExNy1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0xMTY9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6MTE3OkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy0xMTgtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnPTExMT1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc6MTEyOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMTEzLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MTEyPUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MTEzOkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTExNC1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0c9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTI0ND1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjI0NTpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0yNDYtQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTE9HPW1cXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0yMzU9Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUks9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyMzY6Q09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjM3LUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cXHR0cmlzdGF0ZSAgXFxcIklETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg2PW9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSArPSB4dF9UUkFDRS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSKSArPSB4dF9JRExFVElNRVIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToyNi42NjEzNDM0MDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODEyNzAzMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIExpbmUgOTE4IHNvdW5kcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbi4gTXkgbWVudGFsIG1hcCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIHByZXR0eSBzb2xpZCwgc28gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgZmFpcmx5IHNwZWNpZmljIG5lYXIgdGhhdCBsaW5lLiBJdCBjb3VsZCBiZSBhIHNwZWNpZmljIGZlYXR1cmUncyBlbmFibGUvZGlzYWJsZSBvcHRpb24sIG1heWJlIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiwgb3IgcGVyaGFwcyBzb21lIGhlbHAgdGV4dCB0aGF0IHdpbGwgaWxsdW1pbmF0ZSBteSBjdXJyZW50IHF1ZXJ5LiBJJ2xsIG1lbnRhbGx5IHByZXBhcmUgbXlzZWxmIHRvIHBhcnNlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGZvciBjbHVlcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNToyOC40NzQwNDk0MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRcXG4gOTE2OlxcdFxcdFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkxNzpcXHRcXG4gOTE4OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxcbiA5MTk6XFx0XFx0dHJpc3RhdGUgIFxcXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuIDkyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA5MjE6XFx0XFx0aGVscFxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVInIHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XFxuIDkyNDpcXHRcXHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXFxuIDkyNTpcXHRcXHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXFxuIDkyNjpcXHRcXHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyOTpcXHRcXG4gOTMwOlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0xFRFxcbiA5MzE6XFx0XFx0dHJpc3RhdGUgJ1xcXCJMRURcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTIFxcdTAwMjZcXHUwMDI2IExFRFNfVFJJR0dFUlNcXG4gOTMzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDkzNDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjI4LjQ3NDE4MDM2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzczMzY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjb2RlLCBzdW1tYXJpemVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHh0X0lETEVUSU1FUi5jKipcblxuT2theSwgdGltZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdWxsIHNjb3BlLiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgZXhhbWluaW5nIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gbWFwcGluZyBvdXQgZXZlcnl0aGluZyAtIGV2ZXJ5IGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluLCBldmVyeSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRob3NlIGZ1bmN0aW9ucywgYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kIGV2ZXJ5IHNpbmdsZSBwb2ludCB3aGVyZSB0aGV5IGFsbCBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBpcyBjcml0aWNhbC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGJlaW5nIGludm9rZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgdGhpcyBJRExFVElNRVIgbW9kdWxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuIE5vIGRldGFpbCBjYW4gYmUgb3Zlcmxvb2tlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozMC42MTE1MjAyNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGxpbnV4L25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBOZXRmaWx0ZXIgbW9kdWxlIHRvIHRyaWdnZXIgYSB0aW1lciB3aGVuIHBhY2tldCBtYXRjaGVzLlxcbiAgIDY6XFx0ICogQWZ0ZXIgdGltZXIgZXhwaXJlcyBhIGtldmVudCB3aWxsIGJlIHNlbnQuXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uXFxuICAgOTpcXHQgKiBXcml0dGVuIGJ5IFRpbW8gVGVyYXMgXFx1MDAzY2V4dC10aW1vLnRlcmFzQG5va2lhLmNvbVxcdTAwM2VcXG4gIDEwOlxcdCAqXFxuICAxMTpcXHQgKiBDb252ZXJ0ZWQgdG8geF90YWJsZXMgYW5kIHJld29ya2VkIGZvciB1cHN0cmVhbSBpbmNsdXNpb25cXG4gIDEyOlxcdCAqIGJ5IEx1Y2lhbm8gQ29lbGhvIFxcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cXHUwMDNlXFxuICAxMzpcXHQgKlxcbiAgMTQ6XFx0ICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gXFx1MDAzY2x1Y2lhbm8uY29lbGhvQG5va2lhLmNvbVxcdTAwM2VcXG4gIDE1OlxcdCAqL1xcbiAgMTY6XFx0XFxuICAxNzpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAxODpcXHRcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDIwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsYXJtdGltZXIuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmhcXHUwMDNlXFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2Rldl90LmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgMzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0cnVjdCBpZGxldGltZXJfdGcge1xcbiAgMzM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcXG4gIDM0OlxcdFxcdHN0cnVjdCBhbGFybSBhbGFybTtcXG4gIDM1OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xcbiAgMzY6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdHN0cnVjdCBrb2JqZWN0ICprb2JqO1xcbiAgMzk6XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cjtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0dW5zaWduZWQgaW50IHJlZmNudDtcXG4gIDQyOlxcdFxcdHU4IHRpbWVyX3R5cGU7XFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgTElTVF9IRUFEKGlkbGV0aW1lcl90Z19saXN0KTtcXG4gIDQ2OlxcdHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9tdXRleCk7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaWRsZXRpbWVyX3RnX2tvYmo7XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpY1xcbiAgNTE6XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChjb25zdCBjaGFyICpsYWJlbClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKmVudHJ5O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QsIGVudHJ5KSB7XFxuICA1NjpcXHRcXHRcXHRpZiAoIXN0cmNtcChsYWJlbCwgZW50cnktXFx1MDAzZWF0dHIuYXR0ci5uYW1lKSlcXG4gIDU3OlxcdFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyBzc2l6ZV90IGlkbGV0aW1lcl90Z19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXI7XFxuICA2NzpcXHRcXHR1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSAwO1xcbiAgNjg6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ge307XFxuICA2OTpcXHRcXHRsb25nIHRpbWVfZGlmZiA9IDA7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHR0aW1lciA9XFx0X19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChhdHRyLVxcdTAwM2VhdHRyLm5hbWUpO1xcbiAgNzQ6XFx0XFx0aWYgKHRpbWVyKSB7XFxuICA3NTpcXHRcXHRcXHRpZiAodGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gIDc2OlxcdFxcdFxcdFxcdGt0aW1lX3QgZXhwaXJlc19hbGFybSA9IGFsYXJtX2V4cGlyZXNfcmVtYWluaW5nKFxcdTAwMjZ0aW1lci1cXHUwMDNlYWxhcm0pO1xcbiAgNzc6XFx0XFx0XFx0XFx0a3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NChleHBpcmVzX2FsYXJtKTtcXG4gIDc4OlxcdFxcdFxcdFxcdHRpbWVfZGlmZiA9IGt0aW1lc3BlYy50dl9zZWM7XFxuICA3OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAgODA6XFx0XFx0XFx0XFx0ZXhwaXJlcyA9IHRpbWVyLVxcdTAwM2V0aW1lci5leHBpcmVzO1xcbiAgODE6XFx0XFx0XFx0XFx0dGltZV9kaWZmID0gamlmZmllc190b19tc2VjcyhleHBpcmVzIC0gamlmZmllcykgLyAxMDAwO1xcbiAgODI6XFx0XFx0XFx0fVxcbiAgODM6XFx0XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAodGltZV9hZnRlcihleHBpcmVzLCBqaWZmaWVzKSB8fCBrdGltZXNwZWMudHZfc2VjIFxcdTAwM2UgMClcXG4gIDg4OlxcdFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsZFxcXFxuXFxcIiwgdGltZV9kaWZmKTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMFxcXFxuXFxcIik7XFxuICA5MTpcXHR9XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZGxldGltZXJfdGcsXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHdvcmspO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRzeXNmc19ub3RpZnkoaWRsZXRpbWVyX3RnX2tvYmosIE5VTEwsIHRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuICA5OTpcXHR9XFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MzAuNjExNjYwNDc5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE5MDM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gdHJ5aW5nIHRvIGJlIGVmZmljaWVudDpcblxuKipGb2N1c2luZyBvbiBSZWdpc3RyYXRpb24gYW5kIFRhcmdldCBJbmZvcm1hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEZvcmdldCB0aGUgcHJlYW1ibGUgYW5kIHRoZSBmbHVmZi4gSSBuZWVkIHRvIGdldCBzdHJhaWdodCB0byB0aGUgcmVnaXN0cmF0aW9uIGFuZCB0YXJnZXQgZGV0YWlscy4gTGluZXMgMTAxIHRvIDM1MCwgdGhhdCdzIHdoZXJlIHRoZSBtZWF0IGlzLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlIHdpdGggdGhpcyBkYXRhIHN0cnVjdHVyZS4gSSdsbCByZWFkIHRob3NlIGxpbmVzIHdpdGggbGFzZXIgZm9jdXMsIGZpbHRlcmluZyBvdXQgYW55dGhpbmcgaXJyZWxldmFudCB0byB0aG9zZSBzcGVjaWZpYyBlbGVtZW50cy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGtleSBpZGVudGlmaWVycywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhvc2UgbGluZXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG1lbnRhbGx5IHByZXBhcmVkIHRvIHBpY2sgdXAgb24gdGhvc2UgcXVpY2tseS4gTXkgZ29hbCBpcyB0byBleHRyYWN0IHRoZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgcmVnaXN0cmF0aW9ucyB0aGVtc2VsdmVzIGFuZCB3aGF0ZXZlciBpcyBiZWluZyByZWdpc3RlcmVkIGFzIHRoZSB0YXJnZXQgYW5kIGl0cyBwcm9wZXJ0aWVzLiBJJ20gaG9waW5nIGl0J3Mgc3RyYWlnaHRmb3J3YXJkIGJ1dCBJJ20gcmVhZHkgdG8gZGVhbCB3aXRoIGNvbXBsZXhpdHkgb3IgYW55IHVuZXhwZWN0ZWQgZGF0YSBmb3JtYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozMi41OTM1NzY1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiAxMDI6XFx0e1xcbiAxMDM6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSB0aW1lcl9jb250YWluZXJfb2YodGltZXIsIHQsIHRpbWVyKTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiAxMDY6XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cXHUwMDNlZGF0YTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiAxMTM6XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRzdGF0aWMgdm9pZCBpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoc3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIsIGt0aW1lX3QgdGltZW91dClcXG4gMTE2OlxcdHtcXG4gMTE3OlxcdFxcdC8qXFxuIDExODpcXHRcXHQgKiBUaGUgdGltZXIgc2hvdWxkIGFsd2F5cyBiZSBxdWV1ZWQgYXMgQHRvdXQgaXQgc2hvdWxkIGJlIGxlYXN0IG9uZVxcbiAxMTk6XFx0XFx0ICogc2Vjb25kLCBidXQgaGFuZGxlIGl0IGNvcnJlY3RseSBpbiBhbnkgY2FzZS4gVmlydCB3aWxsIG1hbmFnZSFcXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0aWYgKCFhbGFybV9zdGFydF90aW1lcihcXHUwMDI2dGltZXItXFx1MDAzZWFsYXJtLCB0aW1lb3V0LCB0cnVlKSlcXG4gMTIyOlxcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnRpbWVyLVxcdTAwM2V3b3JrKTtcXG4gMTIzOlxcdH1cXG4gMTI0OlxcdFxcbiAxMjU6XFx0c3RhdGljIHZvaWQgaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciwgdW5zaWduZWQgaW50IHNlY29uZHMpXFxuIDEyNjpcXHR7XFxuIDEyNzpcXHRcXHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUodGltZXIsIGt0aW1lX3NldChzZWNvbmRzLCAwKSk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUpXFxuIDEzMTpcXHR7XFxuIDEzMjpcXHRcXHRpbnQgcmV0O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXQgPSB4dF9jaGVja19wcm9jX25hbWUobmFtZSwgc2l6ZSk7XFxuIDEzNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTM2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICghc3RyY21wKG5hbWUsIFxcXCJwb3dlclxcXCIpIHx8XFxuIDEzOTpcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBcXFwic3Vic3lzdGVtXFxcIikgfHxcXG4gMTQwOlxcdFxcdCAgICAhc3RyY21wKG5hbWUsIFxcXCJ1ZXZlbnRcXFwiKSlcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRyZXR1cm4gMDtcXG4gMTQ0OlxcdH1cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gMTQ3OlxcdHtcXG4gMTQ4OlxcdFxcdGludCByZXQ7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTUxOlxcdFxcdGlmICghaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMTUyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDE1MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTU0OlxcdFxcdH1cXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVxcdTAwM2VsYWJlbCkpO1xcbiAxNTc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE1ODpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAxNjE6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XFxuIDE2MjpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiAxNjM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTY0OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xcbiAxNjc6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAxNzA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTcxOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMTcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lciwgaWRsZXRpbWVyX3RnX2V4cGlyZWQsIDApO1xcbiAxNzg6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmssIGlkbGV0aW1lcl90Z193b3JrKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDE4MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTg2OlxcdFxcbiAxODc6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMTg4OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDE4OTpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMTkwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMTkxOlxcdG91dDpcXG4gMTkyOlxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpbnQgcmV0O1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDIwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjMyLjU5MzcyMzM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzQxMTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBmdW5jdGlvbiBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkndmUgc2VlbiBpdCwgSSB1bmRlcnN0YW5kIHRoZSBiYXNpYyBwdXJwb3NlLCBidXQgdGhlIHJlYWwgbWVhdCBpcyBhbHdheXMgaW4gdGhlIGNvbnRleHQuIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZXN0IG9mIHRoaXMgZmlsZS4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCB0aGUgY29uZGl0aW9uYWwgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNhbGwsIGFuZCBvZiBjb3Vyc2UsIHdoZXJlIGluIHRoZSBjb2RlIHRoaXMgdGhpbmcgaXMgZXZlbiBiZWluZyBpbnZva2VkLiBUaGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgaXRzIGV4ZWN1dGlvbi4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IGhpZ2hsaWdodCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByZXNvdXJjZSBjb25zdHJhaW50cyBvciBtYXliZSBldmVuIGhpbnQgYXQgaG93IHRoZSB0aW1lcnMgYXJlIG1hbmFnZWQgYW5kIGRlc3Ryb3llZCwgd2hpY2ggaXMgYWx3YXlzIHVzZWZ1bC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjM0Ljg2NzgzNzM1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0b3V0OlxcbiAyNTE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjUyOlxcdH1cXG4gMjUzOlxcdFxcbiAyNTQ6XFx0LypcXG4gMjU1OlxcdCAqIFRoZSBhY3R1YWwgeHRfdGFibGVzIHBsdWdpbi5cXG4gMjU2OlxcdCAqL1xcbiAyNTc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI2MzpcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXR1cm4gWFRfQ09OVElOVUU7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdC8qXFxuIDI2OTpcXHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXFxuIDI3MDpcXHQgKi9cXG4gMjcxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNzI6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gMjczOlxcdHtcXG4gMjc0OlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbiAyNzc6XFx0XFx0XFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVxcdTAwM2V0aW1lciwgaW5mby1cXHUwMDNldGltZW91dCk7XFxuIDI3ODpcXHRcXHR9IGVsc2Uge1xcbiAyNzk6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMjgxOlxcdFxcdH1cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0cmV0dXJuIFhUX0NPTlRJTlVFO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVvdXQgPT0gMCkge1xcbiAyODk6XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidGltZW91dCB2YWx1ZSBpcyB6ZXJvXFxcXG5cXFwiKTtcXG4gMjkwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyOTE6XFx0XFx0fVxcbiAyOTI6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVvdXQgXFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcXG4gMjkzOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInRpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xcXFxuXFxcIik7XFxuIDI5NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VsYWJlbFswXSA9PSAnXFxcXDAnIHx8XFxuIDI5NzpcXHRcXHQgICAgc3RybmxlbihpbmZvLVxcdTAwM2VsYWJlbCxcXG4gMjk4OlxcdFxcdFxcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xcbiAyOTk6XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4gMzAwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMDE6XFx0XFx0fVxcbiAzMDI6XFx0XFx0cmV0dXJuIDA7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcbiAzMDY6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY2hlY2tlbnRyeShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDMwOTpcXHRcXHRpbnQgcmV0O1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xcbiAzMTI6XFx0XFx0aWYocmV0IFxcdTAwM2MgMClcXG4gMzEzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLVxcdTAwM2VsYWJlbCk7XFxuIDMxNzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMzE4OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbiAzMTk6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzIwOlxcdFxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiKTtcXG4gMzIxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMjI6XFx0XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250Kys7XFxuIDMyNTpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMzI2OlxcdFxcdFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIDMyNzpcXHRcXHR9IGVsc2Uge1xcbiAzMjg6XFx0XFx0XFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcXG4gMzI5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDMzMDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzMzE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMyOlxcdFxcdFxcdH1cXG4gMzMzOlxcdFxcdH1cXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzM2OlxcdFxcdHJldHVybiAwO1xcbiAzMzc6XFx0fVxcbiAzMzg6XFx0XFxuIDMzOTpcXHRzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gMzQyOlxcdFxcdGludCByZXQ7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VzZW5kX25sX21zZylcXG4gMzQ1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XFxuIDM0ODpcXHRcXHRpZihyZXQgXFx1MDAzYyAwKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjM0Ljg2NzkyOTQwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ0MDY3MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCByZXF1ZXN0LCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgTGluZXMgMzUwLTQyMDogQSBGb2N1c2VkIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYSBzcGVjaWZpYyBibG9jayBvZiB0ZXh0LCBsaW5lcyAzNTAgdG8gNDIwLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGZldyBsaWtlbHkgcmVhc29ucy4gUGVyaGFwcyBJJ3ZlIGJlZW4gZGlyZWN0ZWQgdG8gYW5hbHl6ZSB0aGlzIHNlY3Rpb24gZm9yIGEgcGFydGljdWxhciBjb25jZXB0LCBhcmd1bWVudCwgb3IgcGVyaGFwcyBpdCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGFyZ3VtZW50LiBNYXliZSB0aGlzIGlzIGEgcmVsZXZhbnQgc2VnbWVudCBpbiB3aGljaCB0byBleHBsb3JlIHRoZSB2YWxpZGl0eSBvZiBteSBoeXBvdGhlc2VzLiBQZXJoYXBzIEkgYW0gaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBrZXkgcG9pbnQgd2l0aGluIGEgbXVjaCBsYXJnZXIgYm9keSBvZiB3b3JrLiBJIHdpbGwgYmUgbG9va2luZyBmb3Iga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRleHQncyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTozNi42MTE5OTkzNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcbiAzNTE6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAzZSBYVF9JRExFVElNRVJfQUxBUk0pXFxuIDM1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLVxcdTAwM2VsYWJlbCk7XFxuIDM1NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMzU4OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSAhPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlKSB7XFxuIDM1OTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzNjA6XFx0XFx0XFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbiAzNjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2MjpcXHRcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQrKztcXG4gMzY1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIDM2NjpcXHRcXHRcXHRcXHQvKiBjYWxjdWxhdGUgcmVtYWluaW5nIGV4cGlyeSB0aW1lICovXFxuIDM2NzpcXHRcXHRcXHRcXHRrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWFsYXJtKTtcXG4gMzY4OlxcdFxcdFxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IGt0aW1lc3BlYyA9IGt0aW1lX3RvX3RpbWVzcGVjNjQodG91dCk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdFxcdFxcdGlmIChrdGltZXNwZWMudHZfc2VjIFxcdTAwM2UgMClcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9rdGltZShpbmZvLVxcdTAwM2V0aW1lciwgdG91dCk7XFxuIDM3MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNzM6XFx0XFx0XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIDM3NDpcXHRcXHRcXHRcXHRcXHRcXHRzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMzc1OlxcdFxcdFxcdH1cXG4gMzc2OlxcdFxcdH0gZWxzZSB7XFxuIDM3NzpcXHRcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xcbiAzNzg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMzc5OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIDM4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODE6XFx0XFx0XFx0fVxcbiAzODI6XFx0XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzODU6XFx0XFx0cmV0dXJuIDA7XFxuIDM4NjpcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG4gMzg5OlxcdHtcXG4gMzkwOlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbiAzOTU6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gMzk2OlxcdFxcdFxcdHJldHVybjtcXG4gMzk3OlxcdFxcdH1cXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSk7XFxuIDQwMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIpO1xcbiA0MDM6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmspO1xcbiA0MDQ6XFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gNDA1OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDQwNjpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuIDQwNzpcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcXG4gNDEwOlxcdHtcXG4gNDExOlxcdFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbiA0MTY6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gNDE3OlxcdFxcdFxcdHJldHVybjtcXG4gNDE4OlxcdFxcdH1cXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VlbnRyeSk7XFxuIDQyMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gNDI0OlxcdFxcdFxcdGFsYXJtX2NhbmNlbChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWFsYXJtKTtcXG4gNDI1OlxcdFxcdH0gZWxzZSB7XFxuIDQyNjpcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIpO1xcbiA0Mjc6XFx0XFx0fVxcbiA0Mjg6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXdvcmspO1xcbiA0Mjk6XFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6MzYuNjEyMjI0OTQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMzYwMzA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRExFVElNRVIgVGFyZ2V0IGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGB4dF9JRExFVElNRVJgLCB3aGljaCBpcyBhbiBpcHRhYmxlcy94X3RhYmxlcyB0YXJnZXQgZXh0ZW5zaW9uLiBJdCdzIHJlZ2lzdGVyZWQgdmlhIGB4dF9yZWdpc3Rlcl90YXJnZXRzYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIGl0IGluIGEgdHlwaWNhbCBzeXprYWxsZXIvUUVNVSBzZXR1cD8gWWVzLCB3ZSBjYW4sIHVzaW5nIGlwdGFibGVzL3hfdGFibGVzJyBgc2V0c29ja29wdGAgd2l0aCBgSVBUX1NPX1NFVF9SRVBMQUNFYCwgb3IgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBgbmZfdGFibGVzYCBjb21wYXRpYmlsaXR5LCBvciBldmVuIHN0YW5kYXJkIGBpcHRhYmxlc2Agc29ja2V0IG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBgSURMRVRJTUVSYCB0YXJnZXQuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGV5IHVzZWQgYGttYWxsb2Nfb2JqYCBvbiB0aGUgYGluZm8tXHUwMDNldGltZXJgIHN0cnVjdCwgd2hpY2ggbGVhdmVzIHBhcnRzIG9mIHRoZSBzdHJ1Y3QgdW5pbml0aWFsaXplZC4gIEkgcmVtZW1iZXIgYGlkbGV0aW1lcl90Z19jcmVhdGVgICh2MCkgdXNlZCBga3phbGxvY19vYmpgLi4uIHNvIHRoZXkgY2hhbmdlZCBpdCBhbmQgYnJva2UgaXQhIFRoaXMgaXMgYmFkIG5ld3MsIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBjYW4gZGVmaW5pdGVseSBsZWFkIHRvIGJ1Z3MgZG93biB0aGUgbGluZS4gSXQncyByaXBlIGZvciBleHBsb2l0YXRpb24sIGVzcGVjaWFsbHkgd2l0aCBmaWVsZHMgaW4gYHN0cnVjdCB0aW1lcl9saXN0YCwgYHN0cnVjdCBhbGFybWAsIGB0aW1lcl90eXBlYCwgb3IgcG9pbnRlcnMgZ29pbmcgaGF5d2lyZSwgb3IgaW4gZnVuY3Rpb25zIGxpa2UgYGlkbGV0aW1lcl90Z19kZXN0cm95X3YxYCBhbmQgYGlkbGV0aW1lcl90Z19zaG93YC4gIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcnJlY3RseSB1c2luZyBga3phbGxvY19vYmpgIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24uXG5cblRoaXMgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiB0aGUgZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaW1lIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgYFdvcnRoRnV6emluZ2AuXG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCdzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBHb29kIHN0YXJ0LlxuKiAgICoqUmVhY2hhYmxlOioqIFllcywgd2UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgb3B0aW9ucywgbmV0bGluaywgaXB0YWJsZXMsIGV0Yy5cbiogICAqKk5vbi1rZXJuZWwvTm9uLWV4ZWN1dGFibGU6KiogTm8sIGl0J3MgcHVyZSBDIGxvZ2ljIHdpdGhpbiBhIGtlcm5lbCBtb2R1bGUsIHNvIGl0J3MgZmFpciBnYW1lLlxuKiAgICoqVW5yZWFjaGFibGUgSGFyZHdhcmU6KiogSXQncyBzb2Z0d2FyZSwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uXG4qICAgKipUZWFyZG93bi1vbmx5IG9yIG5vbi1BTUQ2NDoqKiBObywgZG9lc24ndCBmYWxsIGludG8gdGhvc2UgY2F0ZWdvcmllcy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFdlJ3ZlIGdvdCBhIHJlYWNoYWJsZSwgZXhwbG9pdGFibGUgY2hhbmdlIGluIGV4ZWN1dGFibGUga2VybmVsIGNvZGUhXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW4gYHh0X0lETEVUSU1FUi5jYD8gV2UndmUgZ290OlxuXG4qICAgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIChhIHN0YXRpYyBmdW5jdGlvbjsgd2UnbGwgY2hlY2sgaXRzIGNhbGwgY2hhaW4gdmlhIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWAgdG8gY2hlY2sgZm9yIGlubGluaW5nIHBvc3NpYmlsaXRpZXMpLlxuKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWBcbiogICBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWBcbiogICBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgXG4qICAgYGlkbGV0aW1lcl90Z19zaG93YFxuKiAgIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYFxuXG5gaWRsZXRpbWVyX3RnX2NyZWF0ZV92MWAgaXMgaW5kZWVkIHN0YXRpYzogYHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pYC4gIFRoZSBvdGhlcnMgYXJlIHRoZSB0eXBpY2FsIHRhcmdldCBvcGVyYXRpb25zIGNhbGxiYWNrcy4gU28sIG91ciBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYFxuKiAgIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MWBcbiogICBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWBcbiogICBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgXG5cbkZpbmFsbHksIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcz8gV2UgZGVmaW5pdGVseSBuZWVkIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAuICBXZSBjYW4gY2hlY2sgZGVwZW5kZW5jaWVzLiBUaGUgS2NvbmZpZyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBjb25maXJtczpcblxuYGBgXG5jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcblx0dHJpc3RhdGUgXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuYGBgXG5cblNvIHdlIGFsc28gbmVlZCBgTkVURklMVEVSYCAoYmFzZSksIGBORVRGSUxURVJfWFRBQkxFU2AgYW5kIG9mIGNvdXJzZSwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYC4gVGltZSB0byBjaGVjayBgeHRfSURMRVRJTUVSLmNgIGZvciBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbnMuIExldCdzIGBncmVwYCBmb3IgYENPTkZJR19gIG9yIGBpZmRlZmAgd2l0aGluIHRoZSBmaWxlIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NDMuNjQ4MjU4NTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI4MzgyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWZ8Q09ORklHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYz00MzU9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaWRsZXRpbWVyX3RnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMtNDU2LVxcdH0sXFxubmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYzo0NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQNl9ORl9JUFRBQkxFUylcXG5uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jLTQ1OC1cXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjQ0LjE2MTEwMTYyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU3ODQwMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRXhhbWluaW5nIHh0X0lETEVUSU1FUi5jJ3MgVGFpbCBFbmQqKlxuXG5Pa2F5LCB0aW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSB0YWlsIGVuZCBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGV5IGxlZnQgb2ZmIHdpdGggdGhpcyBtb2R1bGUsIGVzcGVjaWFsbHkgYWZ0ZXIgdGhhdCBsYXN0IGNvZGUgcmV2aWV3LiBMZXQncyBzZWUgd2hhdCB0aGUgbGF0ZXN0IGNvbW1pdHMgdG91Y2hlZC4gV2VyZSB0aGVyZSBhbnkgcmVjZW50IGJ1ZyBmaXhlcyBpbiB0aGUgY2xlYW51cCBmdW5jdGlvbnM/IEFueSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHRvIHRoZSBpZGxlIHRpbWVyIGl0c2VsZiB0aGF0IG1pZ2h0IGhhdmUgc251Y2sgaW4gdGhlcmU/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBkdXJpbmcgdGVhcmRvd24sIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIHRob3NlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBidWdzLCB5b3Uga25vdy4gTWFrZSBzdXJlIHRoZSBtdXRleGVzIGFyZSBiZWluZyByZWxlYXNlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSSdsbCBmb2N1cyBvbiB0aGUgZGUtaW5pdCByb3V0aW5lcyBmaXJzdCwgdGhlbiBjaXJjbGUgYmFjayBhbmQgY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nLiBSaWdodCwgbGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTo0Ni40MTg5NDUxODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDQzMTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lcik7XFxuIDQzMjpcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcbiA0MzU6XFx0c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaWRsZXRpbWVyX3RnW10gX19yZWFkX21vc3RseSA9IHtcXG4gNDM2OlxcdFxcdHtcXG4gNDM3OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiSURMRVRJTUVSXFxcIixcXG4gNDM4OlxcdFxcdFxcdC5mYW1pbHlcXHRcXHQ9IE5GUFJPVE9fSVBWNCxcXG4gNDM5OlxcdFxcdFxcdC50YXJnZXRcXHRcXHQ9IGlkbGV0aW1lcl90Z190YXJnZXQsXFxuIDQ0MDpcXHRcXHRcXHQudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvKSxcXG4gNDQxOlxcdFxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvLCB0aW1lciksXFxuIDQ0MjpcXHRcXHRcXHQuY2hlY2tlbnRyeVxcdD0gaWRsZXRpbWVyX3RnX2NoZWNrZW50cnksXFxuIDQ0MzpcXHRcXHRcXHQuZGVzdHJveSAgICAgICAgPSBpZGxldGltZXJfdGdfZGVzdHJveSxcXG4gNDQ0OlxcdFxcdFxcdC5tZVxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIDQ0NTpcXHRcXHR9LFxcbiA0NDY6XFx0XFx0e1xcbiA0NDc6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJRExFVElNRVJcXFwiLFxcbiA0NDg6XFx0XFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY0LFxcbiA0NDk6XFx0XFx0XFx0LnJldmlzaW9uXFx0PSAxLFxcbiA0NTA6XFx0XFx0XFx0LnRhcmdldFxcdFxcdD0gaWRsZXRpbWVyX3RnX3RhcmdldF92MSxcXG4gNDUxOlxcdFxcdFxcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEpLFxcbiA0NTI6XFx0XFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEsIHRpbWVyKSxcXG4gNDUzOlxcdFxcdFxcdC5jaGVja2VudHJ5XFx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSxcXG4gNDU0OlxcdFxcdFxcdC5kZXN0cm95ICAgICAgICA9IGlkbGV0aW1lcl90Z19kZXN0cm95X3YxLFxcbiA0NTU6XFx0XFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gNDU2OlxcdFxcdH0sXFxuIDQ1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVA2X05GX0lQVEFCTEVTKVxcbiA0NTg6XFx0XFx0e1xcbiA0NTk6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJRExFVElNRVJcXFwiLFxcbiA0NjA6XFx0XFx0XFx0LmZhbWlseVxcdFxcdD0gTkZQUk9UT19JUFY2LFxcbiA0NjE6XFx0XFx0XFx0LnRhcmdldFxcdFxcdD0gaWRsZXRpbWVyX3RnX3RhcmdldCxcXG4gNDYyOlxcdFxcdFxcdC50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8pLFxcbiA0NjM6XFx0XFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8sIHRpbWVyKSxcXG4gNDY0OlxcdFxcdFxcdC5jaGVja2VudHJ5XFx0PSBpZGxldGltZXJfdGdfY2hlY2tlbnRyeSxcXG4gNDY1OlxcdFxcdFxcdC5kZXN0cm95ICAgICAgICA9IGlkbGV0aW1lcl90Z19kZXN0cm95LFxcbiA0NjY6XFx0XFx0XFx0Lm1lXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gNDY3OlxcdFxcdH0sXFxuIDQ2ODpcXHRcXHR7XFxuIDQ2OTpcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcIklETEVUSU1FUlxcXCIsXFxuIDQ3MDpcXHRcXHRcXHQuZmFtaWx5XFx0XFx0PSBORlBST1RPX0lQVjYsXFxuIDQ3MTpcXHRcXHRcXHQucmV2aXNpb25cXHQ9IDEsXFxuIDQ3MjpcXHRcXHRcXHQudGFyZ2V0XFx0XFx0PSBpZGxldGltZXJfdGdfdGFyZ2V0X3YxLFxcbiA0NzM6XFx0XFx0XFx0LnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSksXFxuIDQ3NDpcXHRcXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSwgdGltZXIpLFxcbiA0NzU6XFx0XFx0XFx0LmNoZWNrZW50cnlcXHQ9IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxLFxcbiA0NzY6XFx0XFx0XFx0LmRlc3Ryb3kgICAgICAgID0gaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEsXFxuIDQ3NzpcXHRcXHRcXHQubWVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiA0Nzg6XFx0XFx0fSxcXG4gNDc5OlxcdCNlbmRpZlxcbiA0ODA6XFx0fTtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIHN0cnVjdCBjbGFzcyAqaWRsZXRpbWVyX3RnX2NsYXNzO1xcbiA0ODM6XFx0XFxuIDQ4NDpcXHRzdGF0aWMgc3RydWN0IGRldmljZSAqaWRsZXRpbWVyX3RnX2RldmljZTtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0c3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcXG4gNDg3OlxcdHtcXG4gNDg4OlxcdFxcdGludCBlcnI7XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcXFwieHRfaWRsZXRpbWVyXFxcIik7XFxuIDQ5MTpcXHRcXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XFxuIDQ5MjpcXHRcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcXG4gNDkzOlxcdFxcdFxcdHByX2VycihcXFwiY291bGRuJ3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXFxcXG5cXFwiKTtcXG4gNDk0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0OTU6XFx0XFx0fVxcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZGxldGltZXJfdGdfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShpZGxldGltZXJfdGdfY2xhc3MsIE5VTEwsXFxuIDQ5ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFxcXCJ0aW1lcnNcXFwiKTtcXG4gNDk5OlxcdFxcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2RldmljZSk7XFxuIDUwMDpcXHRcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7XFxuIDUwMTpcXHRcXHRcXHRwcl9lcnIoXFxcImNvdWxkbid0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcXFxcblxcXCIpO1xcbiA1MDI6XFx0XFx0XFx0Z290byBvdXRfY2xhc3M7XFxuIDUwMzpcXHRcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlkbGV0aW1lcl90Z19rb2JqID0gXFx1MDAyNmlkbGV0aW1lcl90Z19kZXZpY2UtXFx1MDAzZWtvYmo7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdGVyciA9IHh0X3JlZ2lzdGVyX3RhcmdldHMoaWRsZXRpbWVyX3RnLCBBUlJBWV9TSVpFKGlkbGV0aW1lcl90ZykpO1xcbiA1MDg6XFx0XFxuIDUwOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNTo0Ni40MTkwODU4NjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkxODAyMDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElETEVUSU1FUiBOZXRmaWx0ZXIgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLCBzcGVjaWZpY2FsbHkgdGhlIHN3aXRjaCBmcm9tIGBrbWFsbG9jX29iamAgdG8gYGt6YWxsb2Nfb2JqYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgLiBBIHF1aWNrIHNjYW4gb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFzIGluZGljYXRlZCBieSBsaW5lcyA5MTgtOTIwLiBGdXJ0aGVybW9yZSwgdGhlIGBNYWtlZmlsZWAgY29uZmlybXMgaXRzIGluY2x1c2lvbjogYG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUikgKz0geHRfSURMRVRJTUVSLm9gLiBUaGlzIHRlbGxzIG1lIHRoYXQgYE5FVEZJTFRFUl9YVEFCTEVTYCBpcyBhbHNvIHByb2JhYmx5IG5lZWRlZC5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgYXJlIGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgYE5FVEZJTFRFUl9YVEFCTEVTYC5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLCBgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFgLCBgaWRsZXRpbWVyX3RnX3RhcmdldF92MWAsIGFuZCBgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjFgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIG1ha2UgZm9yIGEgZ29vZCBmdXp6IHRhcmdldD8gVGhlIHJlYXNvbmluZyBjbGVhcmx5IHN0YXRlcyB0aGUgY2hhbmdlIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgLiBXZSdyZSBnb2luZyBmcm9tIHJlZ3VsYXIgYGttYWxsb2Nfb2JqYCB0byBga3phbGxvY19vYmpgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBDcnVjaWFsbHksIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGlwdGFibGVzIHJ1bGVzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgeWVzLCB0aGlzIGxvb2tzIGxpa2UgYSB3b3J0aHdoaWxlIGZ1enogdGFyZ2V0LlxuXG5JJ20gY29uZmlkZW50IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjEsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuMzM3MTEwNjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5OTMxNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGV0aW1lcl90Z19jcmVhdGVfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfdGFyZ2V0X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfZGVzdHJveV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfWFRBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGV0aW1lcl90Z19jcmVhdGVfdjFcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfdGFyZ2V0X3YxXCIsXG4gICAgXCJpZGxldGltZXJfdGdfZGVzdHJveV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKSBpbiBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jIHRvIHVzZSBremFsbG9jX29iaiBpbnN0ZWFkIG9mIGttYWxsb2Nfb2JqIHdoZW4gYWxsb2NhdGluZyB0aGUgaWRsZXRpbWVyX3RnIHN0cnVjdCwgZW5zdXJpbmcgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0ZmlsdGVyIHh0YWJsZXMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuNDU3MDQ4OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2NDE0MDkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjUwLjQ1NzUwNjA3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3ODYzNjc4MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkOTRjZWI3NzBkMTc1YjZlYzliNjhlZTQ5ZDI0YmE1NDc3YjA1MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjI1OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGZlN2Q4ZDE5NjI5YjQuLjhhMWQ5NWQyMTk5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGluZm8tXHUwMDNldGltZXIgPSBrbWFsbG9jX29iaigqaW5mby1cdTAwM2V0aW1lcik7XG4rXHRpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO1xuIFx0aWYgKCFpbmZvLVx1MDAzZXRpbWVyKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTAuNDU3NTA3Mzg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NTE1NTgwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJRExFVElNRVIgTW9kdWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCdzIGltcGFjdGluZyB0aGUgYHh0X0lETEVUSU1FUi5jYCBtb2R1bGUgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIEknbSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AuIE5vIHNlbnNlIGluIHN0YXJ0aW5nIGJsaW5kLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlbGluZSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGFuZCBhbGxvdyBtZSB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGRpc3NlY3QgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI1OjU4LjkwOTA2OTU0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMTgzOlxcdFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdHJldHVybiAwO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRvdXRfZnJlZV9hdHRyOlxcbiAxODg6XFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcXG4gMTg5OlxcdG91dF9mcmVlX3RpbWVyOlxcbiAxOTA6XFx0XFx0a2ZyZWUoaW5mby1cXHUwMDNldGltZXIpO1xcbiAxOTE6XFx0b3V0OlxcbiAxOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTkzOlxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcXG4gMTk2OlxcdHtcXG4gMTk3OlxcdFxcdGludCByZXQ7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMjAwOlxcdFxcdGlmICghaW5mby1cXHUwMDNldGltZXIpIHtcXG4gMjAxOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDIwMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjAzOlxcdFxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0cmV0ID0gaWRsZXRpbWVyX2NoZWNrX3N5c2ZzX25hbWUoaW5mby1cXHUwMDNlbGFiZWwsIHNpemVvZihpbmZvLVxcdTAwM2VsYWJlbCkpO1xcbiAyMDY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIwNzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRzeXNmc19hdHRyX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAyMTA6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lID0ga3N0cmR1cChpbmZvLVxcdTAwM2VsYWJlbCwgR0ZQX0tFUk5FTCk7XFxuIDIxMTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSkge1xcbiAyMTI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMjEzOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfdGltZXI7XFxuIDIxNDpcXHRcXHR9XFxuIDIxNTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm1vZGUgPSAwNDQ0O1xcbiAyMTY6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuc2hvdyA9IGlkbGV0aW1lcl90Z19zaG93O1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIpO1xcbiAyMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMjIwOlxcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcXG5cXFwiKTtcXG4gMjIxOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0LyogIG5vdGlmeSB1c2Vyc3BhY2UgICovXFxuIDIyNTpcXHRcXHRrb2JqZWN0X3VldmVudChpZGxldGltZXJfdGdfa29iaixLT0JKX0FERCk7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuIDIyODpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXFx1MDAzZXRpbWVyX3R5cGU7XFxuIDIyOTpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250ID0gMTtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNld29yaywgaWRsZXRpbWVyX3RnX3dvcmspO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4gMjM0OlxcdFxcdFxcdGFsYXJtX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhbGFybSwgQUxBUk1fQk9PVFRJTUUsXFxuIDIzNTpcXHRcXHRcXHRcXHQgICBpZGxldGltZXJfdGdfYWxhcm1wcm9jKTtcXG4gMjM2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhbGFybS5kYXRhID0gaW5mby1cXHUwMDNldGltZXI7XFxuIDIzNzpcXHRcXHRcXHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXFx1MDAzZXRpbWVyLCBpbmZvLVxcdTAwM2V0aW1lb3V0KTtcXG4gMjM4OlxcdFxcdH0gZWxzZSB7XFxuIDIzOTpcXHRcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLCBpZGxldGltZXJfdGdfZXhwaXJlZCwgMCk7XFxuIDI0MDpcXHRcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcixcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiAyNDI6XFx0XFx0fVxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0b3V0X2ZyZWVfYXR0cjpcXG4gMjQ3OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuIDI0ODpcXHRvdXRfZnJlZV90aW1lcjpcXG4gMjQ5OlxcdFxcdGtmcmVlKGluZm8tXFx1MDAzZXRpbWVyKTtcXG4gMjUwOlxcdG91dDpcXG4gMjUxOlxcdFxcdHJldHVybiByZXQ7XFxuIDI1MjpcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdC8qXFxuIDI1NTpcXHQgKiBUaGUgYWN0dWFsIHh0X3RhYmxlcyBwbHVnaW4uXFxuIDI1NjpcXHQgKi9cXG4gMjU3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gMjU5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjU6NTguOTA5Mjg5MDg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDI2NzIyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSURMRVRJTUVSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBgSURMRVRJTUVSYCB0YXJnZXQgd2l0aGluIE5ldGZpbHRlci4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY2AgcmlnaHQgbm93LiBNeSBrZXkgaW50ZXJlc3QgaXMgYXJvdW5kIHRoZSBgaWRsZXRpbWVyX3RnX2NyZWF0ZWAgZnVuY3Rpb24g4oCTIHRoYXQncyB3aGVyZSB0aGUgdGFyZ2V0IGdldHMgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHZlcnNpb24gMCBhbmQgdmVyc2lvbiAxIHRoYXQgd2VyZSBpbXBsZW1lbnRlZC4gSSBhbHNvIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBzdHJ1Y3QgYWN0dWFsbHkgKmNvbnRhaW5zKi4gSSB3YW50IHRvIHNlZSBldmVyeXRoaW5nIGRlZmluZWQgaW5zaWRlIG9mIHRoZSBzdHJ1Y3QuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAwLjc1MTk2NDE0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBcXFwidWV2ZW50XFxcIikpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIDA7XFxuIDE0NDpcXHR9XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRpbnQgcmV0O1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lciA9IGt6YWxsb2Nfb2JqKCppbmZvLVxcdTAwM2V0aW1lcik7XFxuIDE1MTpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIDE1MjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdHJldCA9IGlkbGV0aW1lcl9jaGVja19zeXNmc19uYW1lKGluZm8tXFx1MDAzZWxhYmVsLCBzaXplb2YoaW5mby1cXHUwMDNlbGFiZWwpKTtcXG4gMTU3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxNTg6XFx0XFx0XFx0Z290byBvdXRfZnJlZV90aW1lcjtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0c3lzZnNfYXR0cl9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMTYxOlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSA9IGtzdHJkdXAoaW5mby1cXHUwMDNlbGFiZWwsIEdGUF9LRVJORUwpO1xcbiAxNjI6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpIHtcXG4gMTYzOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDE2NDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3RpbWVyO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0ci5tb2RlID0gMDQ0NDtcXG4gMTY3OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VhdHRyLnNob3cgPSBpZGxldGltZXJfdGdfc2hvdztcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gMTcwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuIDE3MTpcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXFxuXFxcIik7XFxuIDE3MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIDE3MzpcXHRcXHR9XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsIGlkbGV0aW1lcl90Z19leHBpcmVkLCAwKTtcXG4gMTc4OlxcdFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQgPSAxO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V3b3JrLCBpZGxldGltZXJfdGdfd29yayk7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdG1vZF90aW1lcihcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLFxcbiAxODM6XFx0XFx0XFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cXHUwMDNldGltZW91dCkgKyBqaWZmaWVzKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0cmV0dXJuIDA7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdG91dF9mcmVlX2F0dHI6XFxuIDE4ODpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xcbiAxODk6XFx0b3V0X2ZyZWVfdGltZXI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAwLjc1MjA1Njg5N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkzNjY1NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSWRsZXRpbWVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBrbWFsbG9jX29iamAgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgaW5mby1cdTAwM2V0aW1lcmAsIGJ1dCB0aGUgcGF0Y2ggc3dhcHMgdGhhdCBvdXQgZm9yIGBremFsbG9jX29iamAuIEFoLCB0aGUgbGlnaHRidWxiIG1vbWVudCEgVGhpcyBpcyBjbGVhcmx5IGEgZml4IGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gSSByZWNhbGwgdGhhdCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBtZW1vcnkgYnV0IGRvZXNuJ3QgemVybyBpdCwgd2hlcmVhcyBga3phbGxvY19vYmpgIGRvZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJdCdzIHN1YnRsZSwgYnV0IGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgYGlkbGV0aW1lcl90Z19jcmVhdGVfdjFgIHN0YXJ0cyB3aXRoIGNsZWFuIGRhdGEuXG5cbldhaXQgYSBzZWNvbmQsIHdhc24ndCBgaWRsZXRpbWVyX3RnX2NyZWF0ZWAgYWxyZWFkeSB1c2luZyBga3phbGxvY19vYmpgPyBTbywgdGhpcyBwYXRjaCBicmluZ3MgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIGBpZGxldGltZXJfdGdfY3JlYXRlX3YxYCBpbiBsaW5lIHdpdGggaXRzIHNpYmxpbmcgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLiBDb25zaXN0ZW5jeSBpcyBnb29kLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRpbWVyIHN0cnVjdHVyZXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCB3ZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYW5kIGNhdXNpbmcgcHJvYmxlbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgc3RydWN0dXJlIGFjdHVhbGx5IGNvbnRhaW5zLiBMZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjI2OjAzLjM0NTcyNTAyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBsaW51eC9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogTmV0ZmlsdGVyIG1vZHVsZSB0byB0cmlnZ2VyIGEgdGltZXIgd2hlbiBwYWNrZXQgbWF0Y2hlcy5cXG4gICA2OlxcdCAqIEFmdGVyIHRpbWVyIGV4cGlyZXMgYSBrZXZlbnQgd2lsbCBiZSBzZW50LlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvblxcbiAgIDk6XFx0ICogV3JpdHRlbiBieSBUaW1vIFRlcmFzIFxcdTAwM2NleHQtdGltby50ZXJhc0Bub2tpYS5jb21cXHUwMDNlXFxuICAxMDpcXHQgKlxcbiAgMTE6XFx0ICogQ29udmVydGVkIHRvIHhfdGFibGVzIGFuZCByZXdvcmtlZCBmb3IgdXBzdHJlYW0gaW5jbHVzaW9uXFxuICAxMjpcXHQgKiBieSBMdWNpYW5vIENvZWxobyBcXHUwMDNjbHVjaWFuby5jb2VsaG9Abm9raWEuY29tXFx1MDAzZVxcbiAgMTM6XFx0ICpcXG4gIDE0OlxcdCAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIFxcdTAwM2NsdWNpYW5vLmNvZWxob0Bub2tpYS5jb21cXHUwMDNlXFxuICAxNTpcXHQgKi9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbGFybXRpbWVyLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tkZXZfdC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiAgMzE6XFx0XFxuICAzMjpcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnIHtcXG4gIDMzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XFxuICAzNDpcXHRcXHRzdHJ1Y3QgYWxhcm0gYWxhcm07XFxuICAzNTpcXHRcXHRzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjtcXG4gIDM2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiAgMzc6XFx0XFxuICAzODpcXHRcXHRzdHJ1Y3Qga29iamVjdCAqa29iajtcXG4gIDM5OlxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHVuc2lnbmVkIGludCByZWZjbnQ7XFxuICA0MjpcXHRcXHR1OCB0aW1lcl90eXBlO1xcbiAgNDM6XFx0fTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIExJU1RfSEVBRChpZGxldGltZXJfdGdfbGlzdCk7XFxuICA0NjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgc3RydWN0IGtvYmplY3QgKmlkbGV0aW1lcl90Z19rb2JqO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRzdGF0aWNcXG4gIDUxOlxcdHN0cnVjdCBpZGxldGltZXJfdGcgKl9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoY29uc3QgY2hhciAqbGFiZWwpXFxuICA1MjpcXHR7XFxuICA1MzpcXHRcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICplbnRyeTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmlkbGV0aW1lcl90Z19saXN0LCBlbnRyeSkge1xcbiAgNTY6XFx0XFx0XFx0aWYgKCFzdHJjbXAobGFiZWwsIGVudHJ5LVxcdTAwM2VhdHRyLmF0dHIubmFtZSkpXFxuICA1NzpcXHRcXHRcXHRcXHRyZXR1cm4gZW50cnk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDoyNjowMy4zNDU4NjIyNjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTI5MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6ICpgc3RydWN0IGlkbGV0aW1lcl90Z2AgaXMgdGhlIGtleSBzdHJ1Y3QgaGVyZSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgaXRzIGFsbG9jYXRpb24uIGBrbWFsbG9jX29iamAgd2FzIHVzZWQgcHJldmlvdXNseSwgbWVhbmluZyBmaWVsZHMgbGlrZSBga29iamAsIHBvdGVudGlhbGx5IGV2ZW4gYGFsYXJtYCBhbmQgYHRpbWVyYCBkZXBlbmRpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGNvdWxkIGhhdmUgaGVsZCB1bmluaXRpYWxpemVkIGRhdGEuIFllcywgYGFsYXJtX2luaXRgIG9yIGB0aW1lcl9zZXR1cGAgaGFuZGxlcyBzb21lIG9mIHRoZW0sIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0LipcblxuKk5vdywgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiB0byBga3phbGxvY19vYmpgLiBFZmZlY3RpdmVseSwgaXQgaXMgKipmaXhpbmcqKiBhIHBvdGVudGlhbCBwcm9ibGVtIGJ5IHplcm8taW5pdGlhbGl6aW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBpZGxldGltZXJfdGdgIHVwb24gYWxsb2NhdGlvbi4gQnJpbGxpYW50ISBJdCBlbGltaW5hdGVzIHRoZSByaXNrLipcblxuKkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcz8gQWJzb2x1dGVseSBub3QuIEl0IHJlbW92ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgKmd1YXJhbnRlZWluZyogemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBpcyBnb29kLipcblxuKlRpbWUgdG8gY29uc2lkZXIgdGhlIEtNU0FOIHJ1bGVzLiBMZXQncyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzOipcbiogICAqUnVsZSAxOiBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uKlxuKiAgICpSdWxlIDI6IENvbmRpdGlvbmFsIGxvZ2ljIHdpdGggdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LipcbiogICAqUnVsZSAzOiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQuKlxuKiAgICpSdWxlIDQ6IEJvdW5kcyBjaGVja3MgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uKlxuXG4qVGhlIG9wcG9zaXRlIGlzIHRydWUgLSBieSB1c2luZyBga3phbGxvY19vYmpgLCBhbGwgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdCBpZGxldGltZXJfdGdgIGFyZSB6ZXJvZWQgb3V0Ki5cblxuKlRoZXJlZm9yZSwgZ2l2ZW4gdGhlIEtNU0FOIGd1aWRhbmNlOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4qXG5cbipMZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdlIGNhbiBmaW5kIGBpbmZvLVx1MDAzZXRpbWVyID0ga3phbGxvY19vYmooKmluZm8tXHUwMDNldGltZXIpO2AgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYnVmZmVyLCBzbyB0aGUgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW1wbG95ZWQgaGVyZS4qXG5cbipUaGUgS01TQU4gcmVhc29uaW5nIHdpbGwgYmUgYXMgY29uY2lzZSBhcyBwb3NzaWJsZS4qXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzgsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6MjY6MDguMzIxMTU3MTU0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhbiB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbiAoYGttYWxsb2Nfb2JqYCkgd2l0aCBhIHplcm8taW5pdGlhbGl6aW5nIGFsbG9jYXRpb24gKGBremFsbG9jX29iamApIGZvciBgc3RydWN0IGlkbGV0aW1lcl90Z2AgaW4gYGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoKWAuIFRoaXMgY2hhbmdlIGZpeGVzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IHJpc2tzIG9yIGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFsbCBmaWVsZHMgaW4gdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYXJlIG5vdyBmdWxseSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGFuIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9uIChga21hbGxvY19vYmpgKSB3aXRoIGEgemVyby1pbml0aWFsaXppbmcgYWxsb2NhdGlvbiAoYGt6YWxsb2Nfb2JqYCkgZm9yIGBzdHJ1Y3QgaWRsZXRpbWVyX3RnYCBpbiBgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MSgpYC4gVGhpcyBjaGFuZ2UgZml4ZXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyByYXRoZXIgdGhhbiBpbnRyb2R1Y2luZyBuZXcgcmlza3Mgb3IgZXhwb3N1cmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQWxsIGZpZWxkcyBpbiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBhcmUgbm93IGZ1bGx5IHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[1] Phase: Succeeded StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 00:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 00:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2] Phase: Succeeded StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 00:26:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 00:26:19 +0000 UTC FinishedAt: 2026-09-08 00:26:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2881315345/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 00:26:29 +0000 UTC FinishedAt: 2026-09-08 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 00:26:29 +0000 UTC FinishedAt: 2026-09-08 00:42:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3549ca90-7d83-4391-aa03-4195b72d6576,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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2881315345/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": "073a94e7-4f48-4f45-918a-cc3f67e1948c", "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-workflowrxvp4/series-workflowrxvp4-build-action-3102688191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 00:26:29 +0000 UTC FinishedAt: 2026-09-08 00:42:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3549ca90-7d83-4391-aa03-4195b72d6576,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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2881315345/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": "073a94e7-4f48-4f45-918a-cc3f67e1948c", "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-workflowrxvp4/series-workflowrxvp4-build-action-3102688191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 00:42:27 +0000 UTC FinishedAt: 2026-09-08 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 00:42:27 +0000 UTC FinishedAt: 2026-09-08 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 00:42:27 +0000 UTC FinishedAt: 2026-09-08 00:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 00:42:27 +0000 UTC FinishedAt: 2026-09-08 00:42:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2594196196/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 00:42:37 +0000 UTC FinishedAt: 2026-09-08 00:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 00:42:37 +0000 UTC FinishedAt: 2026-09-08 00:44:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*073a94e7-4f48-4f45-918a-cc3f67e1948c,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-workflowrxvp4/series-workflowrxvp4-build-action-3102688191/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-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 00:44:54 +0000 UTC FinishedAt: 2026-09-08 00:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 00:44:54 +0000 UTC FinishedAt: 2026-09-08 00:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 00:44:54 +0000 UTC FinishedAt: 2026-09-08 01:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 00:44:54 +0000 UTC FinishedAt: 2026-09-08 01:01:19 +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:*3549ca90-7d83-4391-aa03-4195b72d6576,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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2594196196/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": "f4a1e881-61e4-4f23-b2cc-0c3e44404efc", "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-workflowrxvp4/series-workflowrxvp4-build-action-2040419440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 00:44:54 +0000 UTC FinishedAt: 2026-09-08 01:01:09 +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:*3549ca90-7d83-4391-aa03-4195b72d6576,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-workflowrxvp4/series-workflowrxvp4-convert-artifact-2594196196/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": "f4a1e881-61e4-4f23-b2cc-0c3e44404efc", "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-workflowrxvp4/series-workflowrxvp4-build-action-2040419440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 01:01:19 +0000 UTC FinishedAt: 2026-09-08 01:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 01:01:19 +0000 UTC FinishedAt: 2026-09-08 01:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 01:01:19 +0000 UTC FinishedAt: 2026-09-08 01:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 01:01:19 +0000 UTC FinishedAt: 2026-09-08 01:03:08 +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:*f4a1e881-61e4-4f23-b2cc-0c3e44404efc,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-workflowrxvp4/series-workflowrxvp4-build-action-2040419440/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-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"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:*073a94e7-4f48-4f45-918a-cc3f67e1948c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4a1e881-61e4-4f23-b2cc-0c3e44404efc,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-workflowrxvp4/series-workflowrxvp4-build-action-3102688191/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-workflowrxvp4/series-workflowrxvp4-build-action-2040419440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 01:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 01:03:23 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"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-workflowrxvp4/series-workflowrxvp4-convert-artifact-642693485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 01:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 01:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:03:18 +0000 UTC FinishedAt: 2026-09-08 01:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 01:03:28 +0000 UTC FinishedAt: 2026-09-08 04:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxvp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["idletimer_tg_create_v1","idletimer_tg_checkentry_v1","idletimer_tg_target_v1","idletimer_tg_destroy_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_IDLETIMER","NETFILTER_ADVANCED","NETFILTER_XTABLES"],"series_id":"526f16f5-75e0-4aaf-99b4-252e9e2b2ff7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 01:03:28 +0000 UTC FinishedAt: 2026-09-08 04:06:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*073a94e7-4f48-4f45-918a-cc3f67e1948c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4a1e881-61e4-4f23-b2cc-0c3e44404efc,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-workflowrxvp4/series-workflowrxvp4-build-action-3102688191/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-workflowrxvp4/series-workflowrxvp4-build-action-2040419440/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-workflowrxvp4/series-workflowrxvp4-convert-artifact-642693485/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,}