Name: series-workflow9kbdf Phase: Succeeded StartedAt: 2026-09-05 15:20:09 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[0] Phase: Succeeded StartedAt: 2026-09-05 15:20:09 +0000 UTC FinishedAt: 2026-09-05 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 15:20:09 +0000 UTC FinishedAt: 2026-09-05 16:05:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "af5f12805e5cefa4fe68d6127c7e1fb78cd5535c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "af5f12805e5cefa4fe68d6127c7e1fb78cd5535c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "a509e22d-9b28-4f52-a959-a951da2f707c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_fill_super", "ext4_fill_super", "print_daily_error_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7cHJpbnRfZGFpbHlfZXJyb3JfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGV4dDQgbW91bnQgaW4gX19leHQ0X2ZpbGxfc3VwZXIoKSB0byB1c2UgdGltZXJfc2h1dGRvd25fc3luYygpIGluc3RlYWQgb2YgdGltZXJfZGVsZXRlX3N5bmMoKSBvbiBzX2Vycl9yZXBvcnQsIHByZXZlbnRpbmcgdGltZXIgcmUtYXJtaW5nIGR1cmluZyBmaWxlc3lzdGVtIHRlYXJkb3duLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgVkZTL2ZpbGVzeXN0ZW0gbW91bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNzZhM2M1NmZlZjZjNTI1YWYxMThiNjUzODdiM2NmNjBkZjIzYTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNjowNDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IGJjYTBkYzg3ZDBiN2MuLjE1NGUwMDkwMTAxNzQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuJiM0MztcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG4gXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDpcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3ByaW50X2RhaWx5X2Vycm9yX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc2YTNjNTZmZWY2YzUyNWFmMTE4YjY1Mzg3YjNjZjYwZGYyM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KIAlmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX3NiX3VwZF93b3JrKTsKIAlleHQ0X3N0b3BfbW1wZChzYmkpOwotCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwomIzQzOwl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwogCWV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ6CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlc3lzdGVtIFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGZzL2V4dDQvc3VwZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGhhbmRsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gc2h1dGRvd24gb3IgdW5tb3VudCwgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBgZmFpbGVkX21vdW50YCBsYWJlbC4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcXVpdGUgdGFyZ2V0ZWQ6IGl0JiMzOTtzIHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBhIHN0cm9uZyBvcGVyYXRpb24sIGRlc2lnbmVkIHRvIGRlbGV0ZSBhIHRpbWVyIGltbWVkaWF0ZWx5LiBgdGltZXJfc2h1dGRvd25fc3luY2AgaXMgcHJvYmFibHkgZ2VudGxlciwgYWxsb3dpbmcgYW55IHBlbmRpbmcgdGltZXIgd29yayB0byBjb21wbGV0ZSBiZWZvcmUgc2h1dHRpbmcgZG93biB0aGUgdGltZXIuIFRoZSBkaWZmZXJlbmNlIGxpa2VseSByZXZvbHZlcyBhcm91bmQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgYXZvaWRpbmcgcG90ZW50aWFsIHJhY2VzIGR1cmluZyB1bW91bnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIGhhcyBwb3RlbnRpYWxseSBiZWVuIGlkZW50aWZpZWQgYXMgcHJvYmxlbWF0aWMuIFBlcmhhcHMgdGhlIG9sZCB0aW1lciBkZWxldGlvbiB3YXMgbGVhZGluZyB0byBhIGtlcm5lbCBwYW5pYyBpbiBjZXJ0YWluLCBzcGVjaWZpYyBzaXR1YXRpb25zPyBPciBwb3NzaWJseSwgaXQgd2FzIGJlaW5nIG92ZXJ6ZWFsb3VzIGFuZCBwcmV2ZW50aW5nIGEgZ3JhY2VmdWwgdW5tb3VudD8gSXQgd291bGQgc2VlbSByZWFzb25hYmxlLCB0aGVyZWZvcmUsIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aHkgdGhlIG5ldyBtZXRob2Qgd2FzIGNob3Nlbi4KCkkmIzM5O2xsIGNoZWNrIHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA1ODA5IGluIGBmcy9leHQ0L3N1cGVyLmNgLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzgwOlx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjU3ODE6XHRmYWlsZWRfbW91bnQ1OlxuNTc4MjpcdFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xuNTc4MzpcdFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XG41Nzg0Olx0XHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuNTc4NTpcdGZhaWxlZF9tb3VudDRhOlxuNTc4NjpcdFx0ZHB1dChzYi1cdTAwM2VzX3Jvb3QpO1xuNTc4NzpcdFx0c2ItXHUwMDNlc19yb290ID0gTlVMTDtcbjU3ODg6XHRmYWlsZWRfbW91bnQ0OlxuNTc4OTpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDttb3VudCBmYWlsZWRcJiMzNDspO1xuNTc5MDpcdFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuNTc5MTpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG41NzkyOlx0ZmFpbGVkX21vdW50X3dxOlxuNTc5MzpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xuNTc5NDpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTc5NTpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbjU3OTY6XHRcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbjU3OTc6XHRcbjU3OTg6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSk7XG41Nzk5Olx0XHRzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XG41ODAwOlx0XG41ODAxOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTgwMjpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTgwMzpcdFx0fVxuNTgwNDpcdGZhaWxlZF9tb3VudDNhOlxuNTgwNTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuNTgwNjpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTgwNzpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG41ODA4Olx0ZmFpbGVkX21vdW50MzpcbjU4MDk6XHRcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG41ODEwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX3NiX3VwZF93b3JrKTtcbjU4MTE6XHRcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG41ODEyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuNTgxMzpcdFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbjU4MTQ6XHRmYWlsZWRfbW91bnQ6XG41ODE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXG41ODE2Olx0XHR1dGY4X3VubG9hZChzYi1cdTAwM2VzX2VuY29kaW5nKTtcbjU4MTc6XHQjZW5kaWZcbjU4MTg6XHRcbjU4MTk6XHQjaWZkZWYgQ09ORklHX1FVT1RBXG41ODIwOlx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkmIzQzOyYjNDM7KVxuNTgyMTpcdFx0XHRrZnJlZShnZXRfcWZfbmFtZShzYiwgc2JpLCBpKSk7XG41ODIyOlx0I2VuZGlmXG41ODIzOlx0XHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFx1MDAyNnNiaS1cdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xuNTgyNDpcdFx0YnJlbHNlKHNiaS1cdTAwM2VzX3NiaCk7XG41ODI1Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpIHtcbjU4MjY6XHRcdFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xuNTgyNzpcdFx0XHRmc19iZGV2X2ZpbGVfcmVsZWFzZShzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xuNTgyODpcdFx0fVxuNTgyOTpcdG91dF9mYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBleHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBJIGtub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1c3BlY3RlZCBhcmVhIC0gbGluZXMgNTQwMCB0aHJvdWdoIDU4MDAuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gaGVhZGVyIHdvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgdG8gbG9jYXRlIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgc28gSSBjYW4gc3RhcnQgdG8gZm9sbG93IHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTgzNC1cbmZzL2V4dDQvc3VwZXIuYzo1ODM1OnN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy01ODM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIE1vdW50IEZhaWx1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBmYWlsZWRfbW91bnQ4YCBpcyBjb21pbmcgZnJvbSwgb3IsIGFsdGVybmF0aXZlbHksIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDU4MDkuIFRpbWUgdG8gY3JhY2sgb3BlbiBgZnMvZXh0NC9zdXBlci5jYC4gU2luY2UgSSBoYXZlIGEgcHJldHR5IGdvb2QgbWVtb3J5IGZvciB0aGUgZ2VuZXJhbCBsYXlvdXQgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBjb2RlLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgdGFrZSBhIGxvb2sgYXQgYSByYW5nZSBvZiBsaW5lczogNTc1MCB0byA1ODQwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIGlzIGVub3VnaCB0byBwaW5wb2ludCB0aGUgaXNzdWUgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NTA6XHRcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1x0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXG41NzUxOlx0XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuNTc1MjpcdFx0XHRcdFx0ICBqaWZmaWVzICYjNDM7IHNlY3NfdG9famlmZmllcyhzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYykpO1xuNTc1MzpcdFx0fVxuNTc1NDpcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xuNTc1NTpcdFxuNTc1NjpcdFx0LyogRW5hYmxlIG1lc3NhZ2UgcmF0ZWxpbWl0aW5nLiBEZWZhdWx0IGlzIDEwIG1lc3NhZ2VzIHBlciA1IHNlY3MuICovXG41NzU3Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NTg6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNnNiaS1cdTAwM2VzX3dhcm5pbmdfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NTk6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNnNiaS1cdTAwM2VzX21zZ19yYXRlbGltaXRfc3RhdGUsIDUgKiBIWiwgMTApO1xuNTc2MDpcdFx0YXRvbWljX3NldChcdTAwMjZzYmktXHUwMDNlc193YXJuaW5nX2NvdW50LCAwKTtcbjU3NjE6XHRcdGF0b21pY19zZXQoXHUwMDI2c2JpLVx1MDAzZXNfbXNnX2NvdW50LCAwKTtcbjU3NjI6XHRcbjU3NjM6XHRcdC8qIFJlZ2lzdGVyIHN5c2ZzIGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMgYXJlIGNvbXBsZXRlLiAqL1xuNTc2NDpcdFx0ZXJyID0gZXh0NF9yZWdpc3Rlcl9zeXNmcyhzYik7XG41NzY1Olx0XHRpZiAoZXJyKVxuNTc2NjpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDk7XG41NzY3Olx0XG41NzY4Olx0XHRyZXR1cm4gMDtcbjU3Njk6XHRcbjU3NzA6XHRmYWlsZWRfbW91bnQ5OlxuNTc3MTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG41NzcyOlx0XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG41NzczOlx0XHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbjU3NzQ6XHRmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuNTc3NTpcdFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbjU3NzY6XHRmYWlsZWRfbW91bnQ3OlxuNTc3NzpcdFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuNTc3ODpcdGZhaWxlZF9tb3VudDY6XG41Nzc5Olx0XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuNTc4MDpcdFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG41NzgxOlx0ZmFpbGVkX21vdW50NTpcbjU3ODI6XHRcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcbjU3ODM6XHRcdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuNTc4NDpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjU3ODU6XHRmYWlsZWRfbW91bnQ0YTpcbjU3ODY6XHRcdGRwdXQoc2ItXHUwMDNlc19yb290KTtcbjU3ODc6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG41Nzg4Olx0ZmFpbGVkX21vdW50NDpcbjU3ODk6XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7bW91bnQgZmFpbGVkXCYjMzQ7KTtcbjU3OTA6XHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbjU3OTE6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuNTc5MjpcdGZhaWxlZF9tb3VudF93cTpcbjU3OTM6XHRcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbjU3OTQ6XHRcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbjU3OTU6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG41Nzk2Olx0XHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG41Nzk3Olx0XG41Nzk4Olx0XHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfYmxvY2tfY2FjaGUpO1xuNTc5OTpcdFx0c2JpLVx1MDAzZXNfZWFfYmxvY2tfY2FjaGUgPSBOVUxMO1xuNTgwMDpcdFxuNTgwMTpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbjU4MDI6XHRcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbjU4MDM6XHRcdH1cbjU4MDQ6XHRmYWlsZWRfbW91bnQzYTpcbjU4MDU6XHRcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbjU4MDY6XHRcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbjU4MDc6XHRcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuNTgwODpcdGZhaWxlZF9tb3VudDM6XG41ODA5Olx0XHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuNTgxMDpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19zYl91cGRfd29yayk7XG41ODExOlx0XHRleHQ0X3N0b3BfbW1wZChzYmkpO1xuNTgxMjpcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbjU4MTM6XHRcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG41ODE0Olx0ZmFpbGVkX21vdW50OlxuNTgxNTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuNTgxNjpcdFx0dXRmOF91bmxvYWQoc2ItXHUwMDNlc19lbmNvZGluZyk7XG41ODE3Olx0I2VuZGlmXG41ODE4Olx0XG41ODE5Olx0I2lmZGVmIENPTkZJR19RVU9UQVxuNTgyMDpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEVYVDRfTUFYUVVPVEFTOyBpJiM0MzsmIzQzOylcbjU4MjE6XHRcdFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xuNTgyMjpcdCNlbmRpZlxuNTgyMzpcdFx0ZnNjcnlwdF9mcmVlX2R1bW15X3BvbGljeShcdTAwMjZzYmktXHUwMDNlc19kdW1teV9lbmNfcG9saWN5KTtcbjU4MjQ6XHRcdGJyZWxzZShzYmktXHUwMDNlc19zYmgpO1xuNTgyNTpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XG41ODI2Olx0XHRcdGludmFsaWRhdGVfYmRldihmaWxlX2JkZXYoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpKTtcbjU4Mjc6XHRcdFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUsIHNiKTtcbjU4Mjg6XHRcdH1cbjU4Mjk6XHRvdXRfZmFpbDpcbjU4MzA6XHRcdGludmFsaWRhdGVfYmRldihzYi1cdTAwM2VzX2JkZXYpO1xuNTgzMTpcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbjU4MzI6XHRcdHJldHVybiBlcnI7XG41ODMzOlx0fVxuNTgzNDpcdFxuNTgzNTpcdHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbjU4MzY6XHR7XG41ODM3Olx0XHRzdHJ1Y3QgZXh0NF9mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuNTgzODpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpO1xuNTgzOTpcdFx0Y29uc3QgY2hhciAqZGVzY3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBDb2RlIFNlY3Rpb24gNTc1MC01ODMzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBsaW5lcywgNTc1MCB0byA1ODMzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmFjayB1cCBhIGJpdCBhbmQgZXN0YWJsaXNoIHRoZSBmdW5jdGlvbiB0aG9zZSBsaW5lcyBhcmUgcGFydCBvZi4gRGlyZWN0bHkganVtcGluZyBpbnRvIHRob3NlIGxpbmVzIG1pZ2h0IGJlIGVmZmljaWVudCBmb3IgcXVpY2sgY2hhbmdlcywgYnV0IEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIG92ZXJ2aWV3IHRvIGZpbmQgdGhlIG1haW4gdXNlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lIDUwMDAgdG8gNTIwMC4gQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBqdXN0IGdyZXAgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSBpZiB0aGF0IHF1aWNrbHkgbmFycm93cyB0aGluZ3MgZG93bi4gRWl0aGVyIHdheSwgdGhhdCBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gYSBwcm9wZXIgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBtaW51dGlhZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBbYS16MC05XyAqXSYjNDM7ZXh0NF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZnMvZXh0NC9zdXBlci5jLTYzLVxuZnMvZXh0NC9zdXBlci5jOjY0OnN0YXRpYyBzdHJ1Y3QgZXh0NF9sYXp5X2luaXQgKmV4dDRfbGlfaW5mbztcbmZzL2V4dDQvc3VwZXIuYy02NS1zdGF0aWMgREVGSU5FX01VVEVYKGV4dDRfbGlfbXR4KTtcbmZzL2V4dDQvc3VwZXIuYzo2NjpzdGF0aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBleHQ0X21vdW50X21zZ19yYXRlbGltaXQ7XG5mcy9leHQ0L3N1cGVyLmMtNjctXG5mcy9leHQ0L3N1cGVyLmM6Njg6c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKixcbmZzL2V4dDQvc3VwZXIuYy02OS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgam91cm5hbF9kZXZudW0pO1xuZnMvZXh0NC9zdXBlci5jOjcwOnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xuZnMvZXh0NC9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9zdXBlci5jOjcyOnN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6NzM6c3RhdGljIGludCBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy03NC1cdFx0XHRcdFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcbmZzL2V4dDQvc3VwZXIuYzo3NTpzdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy03Ni1cdFx0XHRcdCAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcbmZzL2V4dDQvc3VwZXIuYzo3NzpzdGF0aWMgaW50IGV4dDRfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7XG5mcy9leHQ0L3N1cGVyLmM6Nzg6c3RhdGljIGludCBleHQ0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xuZnMvZXh0NC9zdXBlci5jOjc5OnN0YXRpYyBpbnQgZXh0NF91bmZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4MDpzdGF0aWMgaW50IGV4dDRfZnJlZXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9zdXBlci5jLTgxLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmVhdHVyZV9zZXRfb2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM9ODI9c3RhdGljIGlubGluZSBpbnQgZXh0M19mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4MzpzdGF0aWMgdm9pZCBleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4NDpzdGF0aWMgdm9pZCBleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCh2b2lkKTtcbmZzL2V4dDQvc3VwZXIuYzo4NTpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2dldF9qb3VybmFsX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtODYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgam91cm5hbF9pbnVtKTtcbmZzL2V4dDQvc3VwZXIuYzo4NzpzdGF0aWMgaW50IGV4dDRfdmFsaWRhdGVfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjg4OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTg5LVx0XHRcdFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTA6c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTE6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xuZnMvZXh0NC9zdXBlci5jOjkyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjkzOnN0YXRpYyBpbnQgZXh0NF9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbmZzL2V4dDQvc3VwZXIuYzo5NjpzdGF0aWMgdm9pZCBleHQ0X2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW107XG5mcy9leHQ0L3N1cGVyLmMtOTgtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEyNC1cbmZzL2V4dDQvc3VwZXIuYzoxMjU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXh0NF9jb250ZXh0X29wcyA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xMjYtXHQucGFyc2VfcGFyYW1cdD0gZXh0NF9wYXJzZV9wYXJhbSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTU5PU1PRFVMRV9BTElBUyhcJiMzNDtleHQzXCYjMzQ7KTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYyLVxuZnMvZXh0NC9zdXBlci5jOjE2MzpzdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuZnMvZXh0NC9zdXBlci5jLTE2NC1cdFx0XHRcdCAgYmlvX2VuZF9pb190IGVuZF9pbywgYm9vbCBzaW11X2ZhaWwpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxND1pbnQgZXh0NF9yZWFkX2JoX2xvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIyOS0gKi9cbmZzL2V4dDQvc3VwZXIuYzoyMzA6c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X3NiX2JyZWFkX2dmcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTIzMS1cdFx0XHRcdFx0ICAgICAgIHNlY3Rvcl90IGJsb2NrLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yNzg9dm9pZCBleHQ0X3NiX2JyZWFkYWhlYWRfdW5tb3ZhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yODktXG5mcy9leHQ0L3N1cGVyLmM6MjkwOnN0YXRpYyBpbnQgZXh0NF92ZXJpZnlfY3N1bV90eXBlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMjkxLVx0XHRcdFx0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmM9Mjk5PV9fbGUzMiBleHQ0X3N1cGVyYmxvY2tfY3N1bShzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMwOC1cbmZzL2V4dDQvc3VwZXIuYzozMDk6c3RhdGljIGludCBleHQ0X3N1cGVyYmxvY2tfY3N1bV92ZXJpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy0zMTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz00MzI9dm9pZCBleHQ0X2l0YWJsZV91bnVzZWRfc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQzOS1cbmZzL2V4dDQvc3VwZXIuYzo0NDA6c3RhdGljIHZvaWQgX19leHQ0X3VwZGF0ZV90c3RhbXAoX19sZTMyICpsbywgX191OCAqaGksIHRpbWU2NF90IG5vdylcbmZzL2V4dDQvc3VwZXIuYy00NDEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDctXG5mcy9leHQ0L3N1cGVyLmM6NDQ4OnN0YXRpYyB0aW1lNjRfdCBfX2V4dDRfZ2V0X3RzdGFtcChfX2xlMzIgKmxvLCBfX3U4ICpoaSlcbmZzL2V4dDQvc3VwZXIuYy00NDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzEtICovXG5mcy9leHQ0L3N1cGVyLmM6NDcyOnN0YXRpYyB2b2lkIGV4dDRfbWF5YmVfdXBkYXRlX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00NzMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDgtXG5mcy9leHQ0L3N1cGVyLmM6NTA5OnN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXG5mcy9leHQ0L3N1cGVyLmMtNTEwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTE4LVxuZnMvZXh0NC9zdXBlci5jOjUxOTpzdGF0aWMgYm9vbCBleHQ0X2pvdXJuYWxsZWRfd3JpdGVwYWdlX25lZWRzX3JlZGlydHkoc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSxcbmZzL2V4dDQvc3VwZXIuYy01MjAtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1MC1cbmZzL2V4dDQvc3VwZXIuYzo1NTE6c3RhdGljIGludCBleHQ0X2pvdXJuYWxsZWRfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU1Mi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4My1cbmZzL2V4dDQvc3VwZXIuYzo1ODQ6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU4NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU5NC1cbmZzL2V4dDQvc3VwZXIuYzo1OTU6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU5Ni17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYxMT1zdHJ1Y3QgZXh0NF9lcnJfdHJhbnNsYXRpb24ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy02MTctXG5mcy9leHQ0L3N1cGVyLmM6NjE4OnN0YXRpYyBzdHJ1Y3QgZXh0NF9lcnJfdHJhbnNsYXRpb24gZXJyX3RyYW5zbGF0aW9uW10gPSB7XG5mcy9leHQ0L3N1cGVyLmMtNjE5LVx0RVhUNF9FUlJfVFJBTlNMQVRFKEVJTyksXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYzNi1cbmZzL2V4dDQvc3VwZXIuYzo2Mzc6c3RhdGljIGludCBleHQ0X2Vycm5vX3RvX2NvZGUoaW50IGVycm5vKVxuZnMvZXh0NC9zdXBlci5jLTYzOC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTY0Nz1zdGF0aWMgdm9pZCBzYXZlX2Vycm9yX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy02OTUtICovXG5mcy9leHQ0L3N1cGVyLmM6Njk2OnN0YXRpYyB2b2lkIGV4dDRfaGFuZGxlX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZm9yY2Vfcm8sIGludCBlcnJvcixcbmZzL2V4dDQvc3VwZXIuYy02OTctXHRcdFx0ICAgICAgX191MzIgaW5vLCBfX3U2NCBibG9jayxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9OTg0PXZvaWQgX19leHQ0X21zZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMDA2LVxuZnMvZXh0NC9zdXBlci5jOjEwMDc6c3RhdGljIGludCBleHQ0X3dhcm5pbmdfcmF0ZWxpbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTAwOC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTExNjg9c3RhdGljIHZvaWQgZHVtcF9vcnBoYW5fbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTExODYtI2lmZGVmIENPTkZJR19RVU9UQVxuZnMvZXh0NC9zdXBlci5jOjExODc6c3RhdGljIGludCBleHQ0X3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7XG5mcy9leHQ0L3N1cGVyLmMtMTE4OC1cbmZzL2V4dDQvc3VwZXIuYzoxMTg5OnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3F1b3Rhc19vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG5mcy9leHQ0L3N1cGVyLmMtMTE5MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyMDI9c3RhdGljIGlubGluZSBjaGFyICpnZXRfcWZfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjA5LSNlbHNlXG5mcy9leHQ0L3N1cGVyLmM6MTIxMDpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9xdW90YXNfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuZnMvZXh0NC9zdXBlci5jLTEyMTEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjE0LVxuZnMvZXh0NC9zdXBlci5jOjEyMTU6c3RhdGljIGludCBleHQ0X3BlcmNwdV9wYXJhbV9pbml0KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbmZzL2V4dDQvc3VwZXIuYy0xMjE2LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTI0Ny1cbmZzL2V4dDQvc3VwZXIuYzoxMjQ4OnN0YXRpYyB2b2lkIGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTEyNDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjU3LVxuZnMvZXh0NC9zdXBlci5jOjEyNTg6c3RhdGljIHZvaWQgZXh0NF9ncm91cF9kZXNjX2ZyZWUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTEyNTkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjY4LVxuZnMvZXh0NC9zdXBlci5jOjEyNjk6c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbmZzL2V4dDQvc3VwZXIuYy0xMjcwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTI4MS1cbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTI4My17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzOTItXG5mcy9leHQ0L3N1cGVyLmM6MTM5MzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfaW5vZGVfY2FjaGVwO1xuZnMvZXh0NC9zdXBlci5jLTEzOTQtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzOTctICovXG5mcy9leHQ0L3N1cGVyLmM6MTM5ODpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTM5OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE0NDgtXG5mcy9leHQ0L3N1cGVyLmM6MTQ0OTpzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTE0NTAte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNDU5LVxuZnMvZXh0NC9zdXBlci5jOjE0NjA6c3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvc3VwZXIuYy0xNDYxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTQ3MC1cbmZzL2V4dDQvc3VwZXIuYzoxNDcxOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTE0NzIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNDkwLVxuZnMvZXh0NC9zdXBlci5jOjE0OTE6c3RhdGljIHZvaWQgZXh0NF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTE0OTIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNTM5PXZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNTc5LVxuZnMvZXh0NC9zdXBlci5jOjE1ODA6c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9uZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMTU4MS1cdFx0XHRcdFx0dTY0IGlubywgdTMyIGdlbmVyYXRpb24pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE1OTktXG5mcy9leHQ0L3N1cGVyLmM6MTYwMDpzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXh0NF9maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuZnMvZXh0NC9zdXBlci5jLTE2MDEtXHRcdFx0XHRcdGludCBmaF9sZW4sIGludCBmaF90eXBlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjA2LVxuZnMvZXh0NC9zdXBlci5jOjE2MDc6c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbmZzL2V4dDQvc3VwZXIuYy0xNjA4LVx0XHRcdFx0XHRpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYxMy1cbmZzL2V4dDQvc3VwZXIuYzoxNjE0OnN0YXRpYyBpbnQgZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L3N1cGVyLmMtMTYxNS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mjk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxdW90YXR5cGVzW10gPSBJTklUUUZOQU1FUztcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYzMS1cbmZzL2V4dDQvc3VwZXIuYzoxNjMyOnN0YXRpYyBpbnQgZXh0NF93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTtcbmZzL2V4dDQvc3VwZXIuYzoxNjMzOnN0YXRpYyBpbnQgZXh0NF9hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpO1xuZnMvZXh0NC9zdXBlci5jOjE2MzQ6c3RhdGljIGludCBleHQ0X3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XG5mcy9leHQ0L3N1cGVyLmM6MTYzNTpzdGF0aWMgaW50IGV4dDRfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KTtcbmZzL2V4dDQvc3VwZXIuYzoxNjM2OnN0YXRpYyBpbnQgZXh0NF93cml0ZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTtcbmZzL2V4dDQvc3VwZXIuYzoxNjM3OnN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCxcbmZzL2V4dDQvc3VwZXIuYy0xNjM4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG5mcy9leHQ0L3N1cGVyLmM6MTYzOTpzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGNoYXIgKmRhdGEsXG5mcy9leHQ0L3N1cGVyLmMtMTY0MC1cdFx0XHQgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7XG5mcy9leHQ0L3N1cGVyLmM6MTY0MTpzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLFxuZnMvZXh0NC9zdXBlci5jLTE2NDItXHRcdFx0XHRjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTtcbmZzL2V4dDQvc3VwZXIuYzoxNjQzOnN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXG5mcy9leHQ0L3N1cGVyLmMtMTY0NC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG5mcy9leHQ0L3N1cGVyLmMtMTY0NS1cbmZzL2V4dDQvc3VwZXIuYzoxNjQ2OnN0YXRpYyBzdHJ1Y3QgZHF1b3QgX19yY3UgKipleHQ0X2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvc3VwZXIuYy0xNjQ3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTY1MC1cbmZzL2V4dDQvc3VwZXIuYzoxNjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQ0X3F1b3RhX29wZXJhdGlvbnMgPSB7XG5mcy9leHQ0L3N1cGVyLmMtMTY1Mi1cdC5nZXRfcmVzZXJ2ZWRfc3BhY2VcdD0gZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2UsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2NjQtXG5mcy9leHQ0L3N1cGVyLmM6MTY2NTpzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBleHQ0X3FjdGxfb3BlcmF0aW9ucyA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNjY2LVx0LnF1b3RhX29uXHQ9IGV4dDRfcXVvdGFfb24sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2NzYtXG5mcy9leHQ0L3N1cGVyLmM6MTY3NzpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTE2NzgtXHQuYWxsb2NfaW5vZGVcdD0gZXh0NF9hbGxvY19pbm9kZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cbmZzL2V4dDQvc3VwZXIuYzoxNzAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXh0NF9leHBvcnRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3MDEtXHQuZW5jb2RlX2ZoID0gZ2VuZXJpY19lbmNvZGVfaW5vMzJfZmgsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3MDg9ZW51bSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3MzYtXG5mcy9leHQ0L3N1cGVyLmM6MTczNzpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZXJyb3JzW10gPSB7XG5mcy9leHQ0L3N1cGVyLmMtMTczOC1cdHtcJiMzNDtjb250aW51ZVwmIzM0OyxcdEVYVDRfTU9VTlRfRVJST1JTX0NPTlR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzQzLVxuZnMvZXh0NC9zdXBlci5jOjE3NDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RhdGFbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzQ1LVx0e1wmIzM0O2pvdXJuYWxcJiMzNDssXHRFWFQ0X01PVU5UX0pPVVJOQUxfREFUQX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3NTAtXG5mcy9leHQ0L3N1cGVyLmM6MTc1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZGF0YV9lcnJbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzUyLVx0e1wmIzM0O2Fib3J0XCYjMzQ7LFx0T3B0X2RhdGFfZXJyX2Fib3J0fSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc1Ni1cbmZzL2V4dDQvc3VwZXIuYzoxNzU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9qcWZtdFtdID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3NTgtXHR7XCYjMzQ7dmZzb2xkXCYjMzQ7LFx0UUZNVF9WRlNfT0xEfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc2My1cbmZzL2V4dDQvc3VwZXIuYzoxNzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9kYXhbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzY1LVx0e1wmIzM0O2Fsd2F5c1wmIzM0OyxcdE9wdF9kYXhfYWx3YXlzfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc3Ny0gKi9cbmZzL2V4dDQvc3VwZXIuYzoxNzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3NzktXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtic2RkZlwmIzM0OyxcdFx0T3B0X2JzZF9kZiksXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvc3VwZXIuYzoxOTcxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3Mge1xuZnMvZXh0NC9zdXBlci5jLTE5NzItXHRfX3UxNiBtYWdpYztcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk3OC1cbmZzL2V4dDQvc3VwZXIuYzoxOTc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3MgKlxuZnMvZXh0NC9zdXBlci5jLTE5ODAtZXh0NF9zYl9yZWFkX2VuY29kaW5nKGNvbnN0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjAxMz1zdHJ1Y3QgZXh0NF9mc19jb250ZXh0IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjA0My1cbmZzL2V4dDQvc3VwZXIuYzoyMDQ0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtMjA0NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxMjA9c3RhdGljIGludCB1bm5vdGVfcWZfbmFtZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGludCBxdHlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjEzMi1cbmZzL2V4dDQvc3VwZXIuYzoyMTMzOnN0YXRpYyBpbnQgZXh0NF9wYXJzZV90ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0sXG5mcy9leHQ0L3N1cGVyLmMtMjEzNC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjE4NT1FWFQ0X1RFU1RfQ1RYKG1vdW50X29wdDIpO1xuZnMvZXh0NC9zdXBlci5jLTIxODYtXG5mcy9leHQ0L3N1cGVyLmM6MjE4NzpzdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbmZzL2V4dDQvc3VwZXIuYy0yMTg4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjUyOD1zdGF0aWMgaW50IHBhcnNlX2FwcGx5X3NiX21vdW50X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjU4MS1cbmZzL2V4dDQvc3VwZXIuYzoyNTgyOnN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfcXVvdGFfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9leHQ0L3N1cGVyLmMtMjU4My1cdFx0XHRcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjYxOC0gKi9cbmZzL2V4dDQvc3VwZXIuYzoyNjE5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19xdW90YV9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9leHQ0L3N1cGVyLmMtMjYyMC1cdFx0XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjczNi1cbmZzL2V4dDQvc3VwZXIuYzoyNzM3OnN0YXRpYyBpbnQgZXh0NF9jaGVja190ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTI3MzgtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yNzc2LVxuZnMvZXh0NC9zdXBlci5jOjI3Nzc6c3RhdGljIHZvaWQgZXh0NF9hcHBseV90ZXN0X2R1bW15X2VuY3J5cHRpb24oc3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4LFxuZnMvZXh0NC9zdXBlci5jLTI3NzgtXHRcdFx0XHRcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjc4OC1cbmZzL2V4dDQvc3VwZXIuYzoyNzg5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTI3OTAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yODcwLVxuZnMvZXh0NC9zdXBlci5jOjI4NzE6c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0yODcyLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjkwMy1cbmZzL2V4dDQvc3VwZXIuYzoyOTA0OnN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy0yOTA1LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjkzMC1cbmZzL2V4dDQvc3VwZXIuYzoyOTMxOnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3Nob3dfcXVvdGFfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbmZzL2V4dDQvc3VwZXIuYy0yOTMyLVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yOTY2PXN0YXRpYyBjb25zdCBjaGFyICp0b2tlbjJzdHIoaW50IHRva2VuKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yOTgwLSAqL1xuZnMvZXh0NC9zdXBlci5jOjI5ODE6c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMjk4Mi1cdFx0XHQgICAgICBpbnQgbm9kZWZzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMTA2LVxuZnMvZXh0NC9zdXBlci5jOjMxMDc6c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbmZzL2V4dDQvc3VwZXIuYy0zMTA4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzExMj1pbnQgZXh0NF9zZXFfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMxMjItXG5mcy9leHQ0L3N1cGVyLmM6MzEyMzpzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuZnMvZXh0NC9zdXBlci5jLTMxMjQtXHRcdFx0ICAgIGludCByZWFkX29ubHkpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTMxODE9aW50IGV4dDRfYWxsb2NfZmxleF9iZ19hcnJheShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3Qgbmdyb3VwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMjI3LVxuZnMvZXh0NC9zdXBlci5jOjMyMjg6c3RhdGljIGludCBleHQ0X2ZpbGxfZmxleF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMzIyOS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTMyNjEtXG5mcy9leHQ0L3N1cGVyLmM6MzI2MjpzdGF0aWMgX19sZTE2IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxuZnMvZXh0NC9zdXBlci5jLTMyNjMtXHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTMzMTY9dm9pZCBleHQ0X2dyb3VwX2Rlc2NfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMzMjQtLyogQ2FsbGVkIGF0IG1vdW50LXRpbWUsIHN1cGVyLWJsb2NrIGlzIGxvY2tlZCAqL1xuZnMvZXh0NC9zdXBlci5jOjMzMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMzMyNi1cdFx0XHRcdCAgZXh0NF9mc2Jsa190IHNiX2Jsb2NrLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNDU4LSAqL1xuZnMvZXh0NC9zdXBlci5jOjM0NTk6c3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXG5mcy9leHQ0L3N1cGVyLmMtMzQ2MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM0OTMtICovXG5mcy9leHQ0L3N1cGVyLmM6MzQ5NDpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXG5mcy9leHQ0L3N1cGVyLmMtMzQ5NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTM1Njg9c3RhdGljIGV4dDRfZnNibGtfdCBkZXNjcmlwdG9yX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNjA2LSAqL1xuZnMvZXh0NC9zdXBlci5jOjM2MDc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0NF9nZXRfc3RyaXBlX3NpemUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTM2MDgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzc1MC0vKiBGaW5kIG5leHQgc3VpdGFibGUgZ3JvdXAgYW5kIHJ1biBleHQ0X2luaXRfaW5vZGVfdGFibGUgKi9cbmZzL2V4dDQvc3VwZXIuYzozNzUxOnN0YXRpYyBpbnQgZXh0NF9ydW5fbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXG5mcy9leHQ0L3N1cGVyLmMtMzc1Mi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM4MTEtICovXG5mcy9leHQ0L3N1cGVyLmM6MzgxMjpzdGF0aWMgdm9pZCBleHQ0X3JlbW92ZV9saV9yZXF1ZXN0KHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmVscilcbmZzL2V4dDQvc3VwZXIuYy0zODEzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzgyMS1cbmZzL2V4dDQvc3VwZXIuYzozODIyOnN0YXRpYyB2b2lkIGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMzgyMy17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM4MzUtXG5mcy9leHQ0L3N1cGVyLmM6MzgzNjpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpleHQ0X2xhenlpbml0X3Rhc2s7XG5mcy9leHQ0L3N1cGVyLmMtMzgzNy1cbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzg0Ni0gKi9cbmZzL2V4dDQvc3VwZXIuYzozODQ3OnN0YXRpYyBpbnQgZXh0NF9sYXp5aW5pdF90aHJlYWQodm9pZCAqYXJnKVxuZnMvZXh0NC9zdXBlci5jLTM4NDgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0zOTUzLVxuZnMvZXh0NC9zdXBlci5jOjM5NTQ6c3RhdGljIHZvaWQgZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3Qodm9pZClcbmZzL2V4dDQvc3VwZXIuYy0zOTU1LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzk2Ny1cbmZzL2V4dDQvc3VwZXIuYzozOTY4OnN0YXRpYyBpbnQgZXh0NF9ydW5fbGF6eWluaXRfdGhyZWFkKHZvaWQpXG5mcy9leHQ0L3N1cGVyLmMtMzk2OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM5OTEtICovXG5mcy9leHQ0L3N1cGVyLmM6Mzk5MjpzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfaGFzX3VuaW5pdF9pdGFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0zOTkzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDAxMS1cbmZzL2V4dDQvc3VwZXIuYzo0MDEyOnN0YXRpYyBpbnQgZXh0NF9saV9pbmZvX25ldyh2b2lkKVxuZnMvZXh0NC9zdXBlci5jLTQwMTMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00MDI5LVxuZnMvZXh0NC9zdXBlci5jOjQwMzA6c3RhdGljIHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmV4dDRfbGlfcmVxdWVzdF9uZXcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00MDMxLVx0XHRcdFx0XHQgICAgZXh0NF9ncm91cF90IHN0YXJ0KVxuLS1cbmZzL2V4dDQvc3VwZXIuYz00MDU3PWludCBleHQ0X3JlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDExOS0gKi9cbmZzL2V4dDQvc3VwZXIuYzo0MTIwOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9sYXp5aW5pdF90aHJlYWQodm9pZClcbmZzL2V4dDQvc3VwZXIuYy00MTIxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDI0OT1pbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDMwOC1cbmZzL2V4dDQvc3VwZXIuYzo0MzA5OnN0YXRpYyB2b2lkIGV4dDRfc2V0X3Jlc3ZfY2x1c3RlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MzEwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDMzOC1cbmZzL2V4dDQvc3VwZXIuYzo0MzM5OnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X3F1b3RhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MzQwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDM1My1cbmZzL2V4dDQvc3VwZXIuYzo0MzU0OnN0YXRpYyB2b2lkIGV4dDRfc2V0dXBfY3N1bV90cmlnZ2VyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDM1NS1cdFx0XHRcdCAgICBlbnVtIGV4dDRfam91cm5hbF90cmlnZ2VyX3R5cGUgdHlwZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDM2Ny1cbmZzL2V4dDQvc3VwZXIuYzo0MzY4OnN0YXRpYyB2b2lkIGV4dDRfZnJlZV9zYmkoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTQzNjkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00Mzc3LVxuZnMvZXh0NC9zdXBlci5jOjQzNzg6c3RhdGljIHN0cnVjdCBleHQ0X3NiX2luZm8gKmV4dDRfYWxsb2Nfc2JpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDM3OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDMtXG5mcy9leHQ0L3N1cGVyLmM6NDQwNDpzdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXHRcdFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDYwLVxuZnMvZXh0NC9zdXBlci5jOjQ0NjE6c3RhdGljIGludCBleHQ0X2hhbmRsZV9jbHVzdGVyc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTQ0NjIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTIyLSAqL1xuZnMvZXh0NC9zdXBlci5jOjQ1MjM6c3RhdGljIHZvaWQgZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTQ1MjQte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxuZnMvZXh0NC9zdXBlci5jOjQ1NDk6c3RhdGljIHZvaWQgZXh0NF9mYXN0X2NvbW1pdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ1NzMtXG5mcy9leHQ0L3N1cGVyLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfaW5vZGVfaW5mb19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDU3NS1cdFx0XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY0Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvc3VwZXIuYzo0NjQ3OnN0YXRpYyBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbmZzL2V4dDQvc3VwZXIuYy00NjQ4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY4Ny0jZWxzZVxuZnMvZXh0NC9zdXBlci5jOjQ2ODg6c3RhdGljIGlubGluZSBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbmZzL2V4dDQvc3VwZXIuYy00Njg5LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY5My1cbmZzL2V4dDQvc3VwZXIuYzo0Njk0OnN0YXRpYyBpbnQgZXh0NF9pbml0X21ldGFkYXRhX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuZnMvZXh0NC9zdXBlci5jLTQ2OTUte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzI5LVxuZnMvZXh0NC9zdXBlci5jOjQ3MzA6c3RhdGljIGludCBleHQ0X2NoZWNrX2ZlYXR1cmVfY29tcGF0aWJpbGl0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ3MzEtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ4MzMtXG5mcy9leHQ0L3N1cGVyLmM6NDgzNDpzdGF0aWMgaW50IGV4dDRfY2hlY2tfZ2VvbWV0cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00ODM1LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5MTItXG5mcy9leHQ0L3N1cGVyLmM6NDkxMzpzdGF0aWMgaW50IGV4dDRfZ3JvdXBfZGVzY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDkxNC1cdFx0XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDk3Mi1cbmZzL2V4dDQvc3VwZXIuYzo0OTczOnN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00OTc0LVx0XHRcdFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDU2LVxuZnMvZXh0NC9zdXBlci5jOjUwNTc6c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTA1OC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwODktXG5mcy9leHQ0L3N1cGVyLmM6NTA5MDpzdGF0aWMgY29uc3QgY2hhciAqZXh0NF9oYXNfam91cm5hbF9vcHRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MDkxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTExNC1cdFx0dW1pbihNQVhfUEFHRUNBQ0hFX09SREVSLCAoMTEgJiM0MzsgKHNiKS1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzIC0gUEFHRV9TSElGVCkpXG5mcy9leHQ0L3N1cGVyLmM6NTExNTpzdGF0aWMgdm9pZCBleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTUxMTYte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01MTI0LVxuZnMvZXh0NC9zdXBlci5jOjUxMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2xhcmdlX2ZvbGlvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTEyNi17XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgTW91bnQgRmFpbHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBgZmFpbGVkX21vdW50OGAgZXJyb3IsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIHdyb25nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgYGZhaWxlZF9tb3VudDhgIGlzIGRlZmluZWQgb3IgY2FsbGVkLgoKU2luY2UgdGhhdCBtaWdodCBiZSB0b28gbmFycm93LCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2guIEkmIzM5O2xsIGFsc28gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgZmFpbGVkX21vdW50YCBpbiBnZW5lcmFsLCBhbmQgdGhlbiBJJiMzOTtsbCBjb25zaWRlciBsb29raW5nIGludG8gYGV4dDRfZmlsbF9zdXBlcmAuIFRoaXMgaXMgYSBjb21tb24gZnVuY3Rpb24gdXNlZCBkdXJpbmcgbW91bnQgb3BlcmF0aW9ucywgc28gaXQgY291bGQgYmUgcmVsYXRlZC4gSSBhbSBmYW1pbGlhciB3aXRoIHRoYXQgcGFydCBvZiB0aGUgY29kZSwgc28gdGhhdCB3aWxsIGd1aWRlIG1lLgoKVG8gZ2V0IHNvbWUgY29udGV4dCwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgYXJlYSBvZiB0aGUgY29kZSBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBmYWlsdXJlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lcyA1NjUwIHRvIDU3NTAsIGFuZCBhbHNvIGxpbmVzIDU3MDAtNTgzMyBhbmQgdGhlaXIgZW5jbG9zaW5nIGZ1bmN0aW9uIGlmIHRoYXQgZ2l2ZXMgbWUgZW5vdWdoIGNsdWVzLiBCeSBmb2N1c2luZyBvbiB0aGlzIHJlZ2lvbiwgSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIHRoYXQgcmVsYXRlIHRvIHRoZXNlIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2ODA6XHRcdGlmIChlcnIpIHtcbjU2ODE6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBtYmFsbG9jICglZClcJiMzNDssXG41NjgyOlx0XHRcdFx0IGVycik7XG41NjgzOlx0XHRcdGdvdG8gZmFpbGVkX21vdW50NTtcbjU2ODQ6XHRcdH1cbjU2ODU6XHRcbjU2ODY6XHRcdC8qXG41Njg3Olx0XHQgKiBXZSBjYW4gb25seSBzZXQgdXAgdGhlIGpvdXJuYWwgY29tbWl0IGNhbGxiYWNrIG9uY2VcbjU2ODg6XHRcdCAqIG1iYWxsb2MgaXMgaW5pdGlhbGl6ZWRcbjU2ODk6XHRcdCAqL1xuNTY5MDpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpXG41NjkxOlx0XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9jb21taXRfY2FsbGJhY2sgPVxuNTY5MjpcdFx0XHRcdGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2s7XG41NjkzOlx0XG41Njk0Olx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mbGV4X2JnKHNiKSlcbjU2OTU6XHRcdFx0aWYgKCFleHQ0X2ZpbGxfZmxleF9pbmZvKHNiKSkge1xuNTY5NjpcdFx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbjU2OTc6XHRcdFx0XHQgICAgICAgXCYjMzQ7dW5hYmxlIHRvIGluaXRpYWxpemUgXCYjMzQ7XG41Njk4Olx0XHRcdFx0ICAgICAgIFwmIzM0O2ZsZXhfYmcgbWV0YSBpbmZvIVwmIzM0Oyk7XG41Njk5Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjU3MDA6XHRcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDY7XG41NzAxOlx0XHRcdH1cbjU3MDI6XHRcbjU3MDM6XHRcdGVyciA9IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzYiwgZmlyc3Rfbm90X3plcm9lZCk7XG41NzA0Olx0XHRpZiAoZXJyKVxuNTcwNTpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDY7XG41NzA2Olx0XG41NzA3Olx0XHRlcnIgPSBleHQ0X2luaXRfb3JwaGFuX2luZm8oc2IpO1xuNTcwODpcdFx0aWYgKGVycilcbjU3MDk6XHRcdFx0Z290byBmYWlsZWRfbW91bnQ3O1xuNTcxMDpcdCNpZmRlZiBDT05GSUdfUVVPVEFcbjU3MTE6XHRcdC8qIEVuYWJsZSBxdW90YSB1c2FnZSBkdXJpbmcgbW91bnQuICovXG41NzEyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9xdW90YShzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG41NzEzOlx0XHRcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XG41NzE0Olx0XHRcdGlmIChlcnIpXG41NzE1Olx0XHRcdFx0Z290byBmYWlsZWRfbW91bnQ4O1xuNTcxNjpcdFx0fVxuNTcxNzpcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXG41NzE4Olx0XG41NzE5Olx0XHQvKlxuNTcyMDpcdFx0ICogU2F2ZSB0aGUgb3JpZ2luYWwgYmRldiBtYXBwaW5nJiMzOTtzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxuNTcyMTpcdFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxuNTcyMjpcdFx0ICovXG41NzIzOlx0XHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXHUwMDI2c2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX21hcHBpbmctXHUwMDNld2JfZXJyLFxuNTcyNDpcdFx0XHRcdFx0IFx1MDAyNnNiaS1cdTAwM2VzX2JkZXZfd2JfZXJyKTtcbjU3MjU6XHRcdEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgfD0gRVhUNF9PUlBIQU5fRlM7XG41NzI2Olx0XHRleHQ0X29ycGhhbl9jbGVhbnVwKHNiLCBlcyk7XG41NzI3Olx0XHRFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xuNTcyODpcdFx0LypcbjU3Mjk6XHRcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcbjU3MzA6XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcbjU3MzE6XHRcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXG41NzMyOlx0XHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxuNTczMzpcdFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cbjU3MzQ6XHRcdCAqL1xuNTczNTpcdFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcbjU3MzY6XHRcdGlmIChuZWVkc19yZWNvdmVyeSkge1xuNTczNzpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZWNvdmVyeSBjb21wbGV0ZVwmIzM0Oyk7XG41NzM4Olx0XHRcdGVyciA9IGV4dDRfbWFya19yZWNvdmVyeV9jb21wbGV0ZShzYiwgZXMpO1xuNTczOTpcdFx0XHRpZiAoZXJyKVxuNTc0MDpcdFx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3NDE6XHRcdH1cbjU3NDI6XHRcbjU3NDM6XHRcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXHUwMDI2XHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXHUwMDNlc19iZGV2KSkge1xuNTc0NDpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuNTc0NTpcdFx0XHRcdCBcJiMzNDttb3VudGluZyB3aXRoIFxcXCYjMzQ7ZGlzY2FyZFxcXCYjMzQ7IG9wdGlvbiwgYnV0IHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBkaXNjYXJkXCYjMzQ7KTtcbjU3NDY6XHRcdFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcbjU3NDc6XHRcdH1cbjU3NDg6XHRcbjU3NDk6XHRcdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUcmFjaW5nIEV4ZWN1dGlvbiBGbG93KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIGluaXRpYXRlcyBiZWZvcmUgYSBzcGVjaWZpYyBsaW5lIG9mIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lIDU2ODAuIEl0JiMzOTtzIGEgY29tbW9uIGRlYnVnZ2luZyBvciBhbmFseXNpcyB0ZWNobmlxdWUuIEluc3RlYWQgb2YgYmxpbmRseSBzZWFyY2hpbmcgdGhlIGVudGlyZSBjb2RlYmFzZSwgSSYjMzk7bGwgdXNlIGEgc3RyYXRlZ2ljIGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgdG8gaW52ZXN0aWdhdGUgaXMgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUxNTAtNTIwMC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBsaW5lIDU2ODAgc3RhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBzZWN0aW9uIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBpdHMgZXhlY3V0aW9uIHBhdGggYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBUaGlzIGlzIGEgY29tbW9uIG1ldGhvZCBvZiByZXZlcnNlIGVuZ2luZWVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE1MDpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbjUxNTE6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNTE1MjpcdFx0aW50IGJsb2Nrc2l6ZTtcbjUxNTM6XHRcbjUxNTQ6XHRcdGJsb2Nrc2l6ZSA9IHNiX21pbl9ibG9ja3NpemUoc2IsIEVYVDRfTUlOX0JMT0NLX1NJWkUpO1xuNTE1NTpcdFx0aWYgKCFibG9ja3NpemUpIHtcbjUxNTY6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDt1bmFibGUgdG8gc2V0IGJsb2Nrc2l6ZVwmIzM0Oyk7XG41MTU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTE1ODpcdFx0fVxuNTE1OTpcdFxuNTE2MDpcdFx0LypcbjUxNjE6XHRcdCAqIFRoZSBleHQ0IHN1cGVyYmxvY2sgd2lsbCBub3QgYmUgYnVmZmVyIGFsaWduZWQgZm9yIG90aGVyIHRoYW4gMWtCXG41MTYyOlx0XHQgKiBibG9jayBzaXplcy4gIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSBidWZmZXIgc3RhcnQuXG41MTYzOlx0XHQgKi9cbjUxNjQ6XHRcdGlmIChibG9ja3NpemUgIT0gRVhUNF9NSU5fQkxPQ0tfU0laRSkge1xuNTE2NTpcdFx0XHRsb2dpY2FsX3NiX2Jsb2NrID0gc2JpLVx1MDAzZXNfc2JfYmxvY2sgKiBFWFQ0X01JTl9CTE9DS19TSVpFO1xuNTE2NjpcdFx0XHRvZmZzZXQgPSBkb19kaXYobG9naWNhbF9zYl9ibG9jaywgYmxvY2tzaXplKTtcbjUxNjc6XHRcdH0gZWxzZSB7XG41MTY4Olx0XHRcdGxvZ2ljYWxfc2JfYmxvY2sgPSBzYmktXHUwMDNlc19zYl9ibG9jaztcbjUxNjk6XHRcdH1cbjUxNzA6XHRcbjUxNzE6XHRcdGJoID0gZXh0NF9zYl9icmVhZF91bm1vdmFibGUoc2IsIGxvZ2ljYWxfc2JfYmxvY2spO1xuNTE3MjpcdFx0aWYgKElTX0VSUihiaCkpIHtcbjUxNzM6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDt1bmFibGUgdG8gcmVhZCBzdXBlcmJsb2NrXCYjMzQ7KTtcbjUxNzQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmgpO1xuNTE3NTpcdFx0fVxuNTE3NjpcdFx0LypcbjUxNzc6XHRcdCAqIE5vdGU6IHNfZXMgbXVzdCBiZSBpbml0aWFsaXplZCBhcyBzb29uIGFzIHBvc3NpYmxlIGJlY2F1c2VcbjUxNzg6XHRcdCAqICAgICAgIHNvbWUgZXh0NCBtYWNyby1pbnN0cnVjdGlvbnMgZGVwZW5kIG9uIGl0cyB2YWx1ZVxuNTE3OTpcdFx0ICovXG41MTgwOlx0XHRlcyA9IChzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqKSAoYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZnNldCk7XG41MTgxOlx0XHRzYmktXHUwMDNlc19lcyA9IGVzO1xuNTE4MjpcdFx0c2ItXHUwMDNlc19tYWdpYyA9IGxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfbWFnaWMpO1xuNTE4MzpcdFx0aWYgKHNiLVx1MDAzZXNfbWFnaWMgIT0gRVhUNF9TVVBFUl9NQUdJQykge1xuNTE4NDpcdFx0XHRpZiAoIXNpbGVudClcbjUxODU6XHRcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFwmIzM0O1ZGUzogQ2FuJiMzOTt0IGZpbmQgZXh0NCBmaWxlc3lzdGVtXCYjMzQ7KTtcbjUxODY6XHRcdFx0Z290byBvdXQ7XG41MTg3Olx0XHR9XG41MTg4Olx0XG41MTg5Olx0XHRpZiAobGUzMl90b19jcHUoZXMtXHUwMDNlc19sb2dfYmxvY2tfc2l6ZSkgXHUwMDNlXG41MTkwOlx0XHQgICAgKEVYVDRfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XG41MTkxOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbjUxOTI6XHRcdFx0XHQgXCYjMzQ7SW52YWxpZCBsb2cgYmxvY2sgc2l6ZTogJXVcJiMzNDssXG41MTkzOlx0XHRcdFx0IGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfbG9nX2Jsb2NrX3NpemUpKTtcbjUxOTQ6XHRcdFx0Z290byBvdXQ7XG41MTk1Olx0XHR9XG41MTk2Olx0XHRpZiAobGUzMl90b19jcHUoZXMtXHUwMDNlc19sb2dfY2x1c3Rlcl9zaXplKSBcdTAwM2VcbjUxOTc6XHRcdCAgICAoRVhUNF9NQVhfQ0xVU1RFUl9MT0dfU0laRSAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFKSkge1xuNTE5ODpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG41MTk5Olx0XHRcdFx0IFwmIzM0O0ludmFsaWQgbG9nIGNsdXN0ZXIgc2l6ZTogJXVcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqRGVidWdnaW5nIFRpbWUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBUaGUgaXNzdWUgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbjsgSSBzdXNwZWN0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gUmlnaHQsIHNvLCBwZXIgdGhlIHVzdWFsLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGxpbmVzIDUxMzAtNTE1NS4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBsb2dpYywgdmFyaWFibGVzIGFuZCByZXR1cm4gdG8gZGlhZ25vc2UgdGhpcyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTEzMDpcdFx0XHRlcnJfc3RyID0gXCYjMzQ7ZW5jcnlwdFwmIzM0OztcbjUxMzE6XHRcbjUxMzI6XHRcdGlmICghZXJyX3N0cikge1xuNTEzMzpcdFx0XHRleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzYik7XG41MTM0Olx0XHR9IGVsc2UgaWYgKHNiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzZSBQQUdFX1NJWkUpIHtcbjUxMzU6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDticyglbHUpIFx1MDAzZSBwcyglbHUpIHVuc3VwcG9ydGVkIGZvciAlc1wmIzM0OyxcbjUxMzY6XHRcdFx0XHQgc2ItXHUwMDNlc19ibG9ja3NpemUsIFBBR0VfU0laRSwgZXJyX3N0cik7XG41MTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTEzODpcdFx0fVxuNTEzOTpcdFxuNTE0MDpcdFx0cmV0dXJuIDA7XG41MTQxOlx0fVxuNTE0MjpcdFxuNTE0MzpcdHN0YXRpYyBpbnQgZXh0NF9sb2FkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCAqbHNiLFxuNTE0NDpcdFx0XHRcdCAgIGludCBzaWxlbnQpXG41MTQ1Olx0e1xuNTE0NjpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG41MTQ3Olx0XHRzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7XG41MTQ4Olx0XHRleHQ0X2ZzYmxrX3QgbG9naWNhbF9zYl9ibG9jaztcbjUxNDk6XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDtcbjUxNTA6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG41MTUxOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjUxNTI6XHRcdGludCBibG9ja3NpemU7XG41MTUzOlx0XG41MTU0Olx0XHRibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBFWFQ0X01JTl9CTE9DS19TSVpFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIGV4dDQgU3VwZXJibG9jayBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGV4dDRfbG9hZF9zdXBlcmAg4oCTIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBzdXBlcmJsb2NrLCBhIGNyaXRpY2FsIHN0cnVjdHVyZS4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCBhbmQgdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hlcmUgdGhhdCBjb2RlIGJsb2NrIGlzLiBJdCBsb29rcyBsaWtlIGl0IHNwYW5zIGZyb20gbGluZSA1MTQzIHRvIGFib3V0IDU4MzMsIHJvdWdobHkuIFRoZSBsYWJlbHMgYGZhaWxlZF9tb3VudDpgIGFuZCBgb3V0X2ZhaWw6YCBsaWtlbHkgbWFyayB0aGUgZXhpdCBwb2ludHMgZm9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2JpLSZndDtzX2Vycl9yZXBvcnRgIHRpbWVyIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVuIGFuZCBob3cgdGhlc2UgdGltZXJzIGFyZSBzZXQgdXAsIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuIEEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCB0aGF0IGluZm9ybWF0aW9uLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGxpc3Qgb2YgYWxsIGluc3RhbmNlcyBvZiBgc19lcnJfcmVwb3J0YCB0aGF0IEkgY2FuIHRoZW4gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c19lcnJfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xNTkyPXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE3NDgtXHQvKiB0aW1lciBmb3IgcGVyaW9kaWMgZXJyb3Igc3RhdHMgcHJpbnRpbmcgKi9cbmZzL2V4dDQvZXh0NC5oOjE3NDk6XHRzdHJ1Y3QgdGltZXJfbGlzdCBzX2Vycl9yZXBvcnQ7XG5mcy9leHQ0L2V4dDQuaDoxNzUwOlx0LyogdGltZW91dCBpbiBzZWNvbmRzIGZvciBzX2Vycl9yZXBvcnQ7IDAgZGlzYWJsZXMgdGhlIHRpbWVyLiAqL1xuZnMvZXh0NC9leHQ0Lmg6MTc1MTpcdHVuc2lnbmVkIGxvbmcgc19lcnJfcmVwb3J0X3NlYztcbmZzL2V4dDQvZXh0NC5oLTE3NTItXG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTMyMi1cdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuZnMvZXh0NC9zdXBlci5jOjEzMjM6XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuZnMvZXh0NC9zdXBlci5jLTEzMjQtXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbmZzL2V4dDQvc3VwZXIuYy0zNzA2LXtcbmZzL2V4dDQvc3VwZXIuYzozNzA3Olx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy0zNzA4LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cdTAwM2VzX3NiO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxuZnMvZXh0NC9zdXBlci5jOjM3NDY6XHRpZiAoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXG5mcy9leHQ0L3N1cGVyLmM6Mzc0NzpcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNTc9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU0NTgtXG5mcy9leHQ0L3N1cGVyLmM6NTQ1OTpcdHRpbWVyX3NldHVwKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIHByaW50X2RhaWx5X2Vycm9yX2luZm8sIDApO1xuZnMvZXh0NC9zdXBlci5jLTU0NjAtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmktXHUwMDNlc19lcnJvcl9sb2NrKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc0OS1cdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG5mcy9leHQ0L3N1cGVyLmM6NTc1MDpcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1x0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXG5mcy9leHQ0L3N1cGVyLmM6NTc1MTpcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3VwZXIuYy01NzUzLVx0fVxuZnMvZXh0NC9zdXBlci5jOjU3NTQ6XHRzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXG5mcy9leHQ0L3N1cGVyLmMtNTc1NS1cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODExLVx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYzo1ODEyOlx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy01ODEzLVx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjI1MD1zdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy02MzEwLVx0XHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24mIzM5O3QgYmVlblxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XHRcdCAqIHN0YXJ0ZWQgYWxyZWFkeSBhbmQgc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cbmZzL2V4dDQvc3VwZXIuYy02MzEyLVx0XHQgKi9cbmZzL2V4dDQvc3VwZXIuYzo2MzEzOlx0XHRpZiAoIWVzLVx1MDAzZXNfZXJyb3JfY291bnQgXHUwMDI2XHUwMDI2ICFzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcbmZzL2V4dDQvc3VwZXIuYzo2MzE0Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuZnMvZXh0NC9zdXBlci5jOjYzMTU6XHRcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3VwZXIuYy02MzE2LVx0XHRsZTMyX2FkZF9jcHUoXHUwMDI2ZXMtXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVx1MDAzZXNfYWRkX2Vycm9yX2NvdW50KTtcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MTM0PXN0YXRpYyBzc2l6ZV90IGVycl9yZXBvcnRfc2VjX3N0b3JlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMTQ3LVxuZnMvZXh0NC9zeXNmcy5jOjE0ODpcdGlmIChzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9PSB0KVx0XHQvKm5vdGhpbmcgdG8gZG8qL1xuZnMvZXh0NC9zeXNmcy5jLTE0OS1cdFx0Z290byBvdXQ7XG5mcy9leHQ0L3N5c2ZzLmM6MTUwOlx0ZWxzZSBpZiAoIXNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIFx1MDAyNlx1MDAyNiB0KSB7XG5mcy9leHQ0L3N5c2ZzLmM6MTUxOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBwcmludF9kYWlseV9lcnJvcl9pbmZvLCAwKTtcbmZzL2V4dDQvc3lzZnMuYzoxNTI6XHR9IGVsc2UgaWYgKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIFx1MDAyNlx1MDAyNiAhdCkge1xuZnMvZXh0NC9zeXNmcy5jOjE1MzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N5c2ZzLmMtMTU0LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMTU2LVxuZnMvZXh0NC9zeXNmcy5jOjE1NzpcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gdDtcbmZzL2V4dDQvc3lzZnMuYzoxNTg6XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3lzZnMuYy0xNTktXG4tLVxuZnMvZXh0NC9zeXNmcy5jPTI0OT1FWFQ0X0FUVFJfT0ZGU0VUKG1iX2Jlc3RfYXZhaWxfbWF4X3RyaW1fb3JkZXIsIDA2NDQsIG1iX29yZGVyLFxuZnMvZXh0NC9zeXNmcy5jLTI1MC1cdFx0IGV4dDRfc2JfaW5mbywgc19tYl9iZXN0X2F2YWlsX21heF90cmltX29yZGVyKTtcbmZzL2V4dDQvc3lzZnMuYzoyNTE6RVhUNF9BVFRSX09GRlNFVChlcnJfcmVwb3J0X3NlYywgMDY0NCwgZXJyX3JlcG9ydF9zZWMsIGV4dDRfc2JfaW5mbywgc19lcnJfcmVwb3J0X3NlYyk7XG5mcy9leHQ0L3N5c2ZzLmMtMjUyLUVYVDRfUldfQVRUUl9TQklfVUkoaW5vZGVfZ29hbCwgc19pbm9kZV9nb2FsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIGZyb20gYHRpbWVyX2RlbGV0ZV9zeW5jYCB0byBgdGltZXJfc2h1dGRvd25fc3luY2AgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBpbiB0aGUgYGZhaWxlZF9tb3VudDNgIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgZXh0NF9zYl9pbmZvYCBhbmQgaXRzIGFzc29jaWF0ZWQgYHNfZXJyX3JlcG9ydGAgdGltZXIuCgpJIHJlbWVtYmVyIHRoYXQgYHRpbWVyX3NodXRkb3duX3N5bmNgIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkLCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY3VycmVudCBjYWxsYmFjayB0byBmaW5pc2guIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nOiBjb3VsZCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AsIHdoaWNoIGlzIHRoZSBjYWxsYmFjayBmb3IgYHNfZXJyX3JlcG9ydGAsIHBvdGVudGlhbGx5IHJlLWFybSB0aGUgdGltZXIgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBkZWxldGVkPyBJIGNoZWNrIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCBhbmQgeWVwLCB0aGVyZSYjMzk7cyBhIGBtb2RfdGltZXJgIGNhbGwgaW4gdGhlcmUsIHJlLWFybWluZyB0aGUgdGltZXIgYmFzZWQgb24gYHNiaS0mZ3Q7c19lcnJfcmVwb3J0X3NlY2AuIFNvLCB0aGUgb2xkIGNvZGUsIHVzaW5nIGB0aW1lcl9kZWxldGVfc3luY2AsIGhhZCBhICpkZWZpbml0ZSogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgdGltZXIgd2FzIGRlbGV0ZWQgd2hpbGUgdGhlIGNhbGxiYWNrIHdhcyBydW5uaW5nLCBpdCBjb3VsZCBwb3RlbnRpYWxseSByZS1hcm0gdGhlIHRpbWVyIGp1c3QgYWZ0ZXIgdGhlIGRlbGV0ZSBmaW5pc2hlZCwgY3JlYXRpbmcgYSBVc2UtQWZ0ZXItRnJlZSBzaXR1YXRpb24gb24gYHNiaWAgd2hlbiBpdCBnZXRzIGZyZWVkLiBgdGltZXJfc2h1dGRvd25fc3luY2AgYXZvaWRzIHRoYXQgcmUtYXJtaW5nLiBHb29kIGNhdGNoLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enphYmxlLiBJIGFwcGx5IG15IHRyaWFnZSBjcml0ZXJpYToKCiogICAqKlJlYWNoYWJpbGl0eToqKiBFeHQ0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciB1c2VzIGl0IGV4dGVuc2l2ZWx5LCBpbmNsdWRpbmcgbW91bnRpbmcgaW50ZW50aW9uYWxseSBjb3JydXB0ZWQgaW1hZ2VzIHRvIHRyaWdnZXIgbW91bnQgZmFpbHVyZXMuIFRoZSBgZmFpbGVkX21vdW50M2AgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoqICAgKipDb2RlIE1vZGlmaWNhdGlvbjoqKiBZZXMsIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBpcyBhIGNoYW5nZSBmcm9tIGRlbGV0ZSB0byBzaHV0ZG93bi4gVGhpcyBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdHJ1c3QgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGNsYWltcywgaWYgdGhlIGNvZGUgY2hhbmdlcywgaXQgKm11c3QqIGJlIGZ1enplZC4gQW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBFeHQ0IGlzIGEgY29yZSBWRlMgZmlsZXN5c3RlbS4KClNvLCB0aGlzIGhpdHMgbXkgZnV6emluZyBjcml0ZXJpYSBwZXJmZWN0bHkuIEkgYW0gY2VydGFpbiB0aGF0IHRoaXMgaXMgV29ydGhGdXp6aW5nID0gdHJ1ZS4gVGltZSB0byBjaGVjayB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLiBJIHdpbGwgd2FudCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgbmVhciBvciBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgZXhhY3QgY2hhbmdlIHRha2VzIHBsYWNlLCBhbmQgaG93IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGNoYW5nZXMuIEkgd2lsbCBjaGVjayBsaW5lIDUzNTcgaW4gYGZzL2V4dDQvc3VwZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzU1Olx0fVxuNTM1NjpcdFxuNTM1NzpcdHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuNTM1ODpcdHtcbjUzNTk6XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IE5VTEw7XG41MzYwOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbjUzNjE6XHRcdGV4dDRfZnNibGtfdCBsb2dpY2FsX3NiX2Jsb2NrO1xuNTM2MjpcdFx0c3RydWN0IGlub2RlICpyb290O1xuNTM2MzpcdFx0aW50IG5lZWRzX3JlY292ZXJ5O1xuNTM2NDpcdFx0aW50IGVycjtcbjUzNjU6XHRcdGV4dDRfZ3JvdXBfdCBmaXJzdF9ub3RfemVyb2VkO1xuNTM2NjpcdFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbjUzNjc6XHRcdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuNTM2ODpcdFxuNTM2OTpcdFx0LyogU2V0IGRlZmF1bHRzIGZvciB0aGUgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSBzZXQgZHVyaW5nIHBhcnNpbmcgKi9cbjUzNzA6XHRcdGlmICghKGN0eC1cdTAwM2VzcGVjIFx1MDAyNiBFWFQ0X1NQRUNfSk9VUk5BTF9JT1BSSU8pKVxuNTM3MTpcdFx0XHRjdHgtXHUwMDNlam91cm5hbF9pb3ByaW8gPSBFWFQ0X0RFRl9KT1VSTkFMX0lPUFJJTztcbjUzNzI6XHRcbjUzNzM6XHRcdHNiaS1cdTAwM2VzX2lub2RlX3JlYWRhaGVhZF9ibGtzID0gRVhUNF9ERUZfSU5PREVfUkVBREFIRUFEX0JMS1M7XG41Mzc0Olx0XHRzYmktXHUwMDNlc19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQgPVxuNTM3NTpcdFx0XHRwYXJ0X3N0YXRfcmVhZChzYi1cdTAwM2VzX2JkZXYsIHNlY3RvcnNbU1RBVF9XUklURV0pO1xuNTM3NjpcdFxuNTM3NzpcdFx0ZXJyID0gZXh0NF9sb2FkX3N1cGVyKHNiLCBcdTAwMjZsb2dpY2FsX3NiX2Jsb2NrLCBzaWxlbnQpO1xuNTM3ODpcdFx0aWYgKGVycilcbjUzNzk6XHRcdFx0Z290byBvdXRfZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0OTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGVidWdnaW5nIHRoZSBleHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSYjMzk7cyBpbml0aWFsaXphdGlvbi4gTXkgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzcGVjaWZpY2FsbHkgbGluZSA1ODEyLiBUaGF0IGxpbmUgY2FsbHMgYHRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydCk7YC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgcmVsYXRlZCB0byBlcnJvciByZXBvcnRpbmcgZHVyaW5nIHRoZSBmaWxlc3lzdGVtJiMzOTtzIHN0YXJ0dXAuCgpOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBfX2V4dDRfZmlsbF9zdXBlcmAuIEFmdGVyIGEgcXVpY2sgbG9va3VwLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZXh0NF9maWxsX3N1cGVyYC4KClNpbmNlIEkga25vdyBgZXh0NF9maWxsX3N1cGVyYCBjYWxscyBgX19leHQ0X2ZpbGxfc3VwZXJgLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA1ODM1IGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaW4gd2hpY2ggdGhlIGVycm9yIGlzIGJlaW5nIHJlcG9ydGVkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgbW9yZSBjb250ZXh0IG9uIGhvdyB0aGlzIGNhbGwgc2VxdWVuY2UgaXMgc3RydWN0dXJlZCB0byBzZWUgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlIG9jY3VycmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4MzU6XHRzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG41ODM2Olx0e1xuNTgzNzpcdFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbjU4Mzg6XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTtcbjU4Mzk6XHRcdGNvbnN0IGNoYXIgKmRlc2NyO1xuNTg0MDpcdFx0aW50IHJldDtcbjU4NDE6XHRcbjU4NDI6XHRcdHNiaSA9IGV4dDRfYWxsb2Nfc2JpKHNiKTtcbjU4NDM6XHRcdGlmICghc2JpKVxuNTg0NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU4NDU6XHRcbjU4NDY6XHRcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IHNiaTtcbjU4NDc6XHRcbjU4NDg6XHRcdC8qIENsZWFudXAgc3VwZXJibG9jayBuYW1lICovXG41ODQ5Olx0XHRzdHJyZXBsYWNlKHNiLVx1MDAzZXNfaWQsICYjMzk7LyYjMzk7LCAmIzM5OyEmIzM5Oyk7XG41ODUwOlx0XG41ODUxOlx0XHRzYmktXHUwMDNlc19zYl9ibG9jayA9IDE7XHQvKiBEZWZhdWx0IHN1cGVyIGJsb2NrIGxvY2F0aW9uICovXG41ODUyOlx0XHRpZiAoY3R4LVx1MDAzZXNwZWMgXHUwMDI2IEVYVDRfU1BFQ19zX3NiX2Jsb2NrKVxuNTg1MzpcdFx0XHRzYmktXHUwMDNlc19zYl9ibG9jayA9IGN0eC1cdTAwM2VzX3NiX2Jsb2NrO1xuNTg1NDpcdFxuNTg1NTpcdFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcbjU4NTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG41ODU3Olx0XHRcdGdvdG8gZnJlZV9zYmk7XG41ODU4Olx0XG41ODU5Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTg2MDpcdFx0XHRpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKVxuNTg2MTpcdFx0XHRcdGRlc2NyID0gXCYjMzQ7IGpvdXJuYWxsZWQgZGF0YSBtb2RlXCYjMzQ7O1xuNTg2MjpcdFx0XHRlbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9PUkRFUkVEX0RBVEEpXG41ODYzOlx0XHRcdFx0ZGVzY3IgPSBcJiMzNDsgb3JkZXJlZCBkYXRhIG1vZGVcJiMzNDs7XG41ODY0Olx0XHRcdGVsc2VcbjU4NjU6XHRcdFx0XHRkZXNjciA9IFwmIzM0OyB3cml0ZWJhY2sgZGF0YSBtb2RlXCYjMzQ7O1xuNTg2NjpcdFx0fSBlbHNlXG41ODY3Olx0XHRcdGRlc2NyID0gXCYjMzQ7b3V0IGpvdXJuYWxcJiMzNDs7XG41ODY4Olx0XG41ODY5Olx0XHRpZiAoX19fcmF0ZWxpbWl0KFx1MDAyNmV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdCwgXCYjMzQ7RVhUNC1mcyBtb3VudFwmIzM0OykpXG41ODcwOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFwmIzM0O21vdW50ZWQgZmlsZXN5c3RlbSAlcFUgJXMgd2l0aCVzLiBcJiMzNDtcbjU4NzE6XHRcdFx0XHQgXCYjMzQ7UXVvdGEgbW9kZTogJXMuXCYjMzQ7LCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQsXG41ODcyOlx0XHRcdFx0IHNiX3Jkb25seShzYikgPyBcJiMzNDtyb1wmIzM0OyA6IFwmIzM0O3Ivd1wmIzM0OywgZGVzY3IsXG41ODczOlx0XHRcdFx0IGV4dDRfcXVvdGFfbW9kZShzYikpO1xuNTg3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRha2UgYSBsb29rIGF0IGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcsIGFuZCB0aGF0IGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGl0IG1pZ2h0IGhvbGQgc29tZSByZWxldmFudCBjbHVlcyB0byB0aGUgaXNzdWUuIFRoZW4sIEkgbmVlZCB0byBnZXQgbW9yZSBncmFudWxhci4gTGluZSAzNzA1IHRvIDM3NTAgaW4gYGZzL2V4dDQvc3VwZXIuY2AuLi4gdGhhdCBzZWN0aW9uIG9mIGNvZGUgaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBlcnJvciBleGlzdHMgaW4gdGhlIGxvd2VyIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgY2h1bmsgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3MDU6XHR2b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4zNzA2Olx0e1xuMzcwNzpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcbjM3MDg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXHUwMDNlc19zYjtcbjM3MDk6XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS1cdTAwM2VzX2VzO1xuMzcxMDpcdFxuMzcxMTpcdFx0aWYgKGVzLVx1MDAzZXNfZXJyb3JfY291bnQpXG4zNzEyOlx0XHRcdC8qIGZzY2sgbmV3ZXIgdGhhbiB2MS40MS4xMyBpcyBuZWVkZWQgdG8gY2xlYW4gdGhpcyBjb25kaXRpb24uICovXG4zNzEzOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX05PVElDRSwgXCYjMzQ7ZXJyb3IgY291bnQgc2luY2UgbGFzdCBmc2NrOiAldVwmIzM0OyxcbjM3MTQ6XHRcdFx0XHQgbGUzMl90b19jcHUoZXMtXHUwMDNlc19lcnJvcl9jb3VudCkpO1xuMzcxNTpcdFx0aWYgKGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfdGltZSkge1xuMzcxNjpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7RVhUNC1mcyAoJXMpOiBpbml0aWFsIGVycm9yIGF0IHRpbWUgJWxsdTogJS4qczolZFwmIzM0OyxcbjM3MTc6XHRcdFx0ICAgICAgIHNiLVx1MDAzZXNfaWQsXG4zNzE4Olx0XHRcdCAgICAgICBleHQ0X2dldF90c3RhbXAoZXMsIHNfZmlyc3RfZXJyb3JfdGltZSksXG4zNzE5Olx0XHRcdCAgICAgICAoaW50KSBzaXplb2YoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jKSxcbjM3MjA6XHRcdFx0ICAgICAgIGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfZnVuYyxcbjM3MjE6XHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfbGluZSkpO1xuMzcyMjpcdFx0XHRpZiAoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pXG4zNzIzOlx0XHRcdFx0cHJpbnRrKEtFUk5fQ09OVCBcJiMzNDs6IGlub2RlICV1XCYjMzQ7LFxuMzcyNDpcdFx0XHRcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cdTAwM2VzX2ZpcnN0X2Vycm9yX2lubykpO1xuMzcyNTpcdFx0XHRpZiAoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaylcbjM3MjY6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogYmxvY2sgJWxsdVwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylcbjM3Mjc6XHRcdFx0XHQgICAgICAgbGU2NF90b19jcHUoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaykpO1xuMzcyODpcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0O1xcblwmIzM0Oyk7XG4zNzI5Olx0XHR9XG4zNzMwOlx0XHRpZiAoZXMtXHUwMDNlc19sYXN0X2Vycm9yX3RpbWUpIHtcbjM3MzE6XHRcdFx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O0VYVDQtZnMgKCVzKTogbGFzdCBlcnJvciBhdCB0aW1lICVsbHU6ICUuKnM6JWRcJiMzNDssXG4zNzMyOlx0XHRcdCAgICAgICBzYi1cdTAwM2VzX2lkLFxuMzczMzpcdFx0XHQgICAgICAgZXh0NF9nZXRfdHN0YW1wKGVzLCBzX2xhc3RfZXJyb3JfdGltZSksXG4zNzM0Olx0XHRcdCAgICAgICAoaW50KSBzaXplb2YoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMpLFxuMzczNTpcdFx0XHQgICAgICAgZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMsXG4zNzM2Olx0XHRcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cdTAwM2VzX2xhc3RfZXJyb3JfbGluZSkpO1xuMzczNzpcdFx0XHRpZiAoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2lubylcbjM3Mzg6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogaW5vZGUgJXVcJiMzNDssXG4zNzM5Olx0XHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfbGFzdF9lcnJvcl9pbm8pKTtcbjM3NDA6XHRcdFx0aWYgKGVzLVx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaylcbjM3NDE6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogYmxvY2sgJWxsdVwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylcbjM3NDI6XHRcdFx0XHQgICAgICAgbGU2NF90b19jcHUoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Jsb2NrKSk7XG4zNzQzOlx0XHRcdHByaW50ayhLRVJOX0NPTlQgXCYjMzQ7XFxuXCYjMzQ7KTtcbjM3NDQ6XHRcdH1cbjM3NDU6XHRcbjM3NDY6XHRcdGlmIChzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcbjM3NDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG4zNzQ4Olx0fVxuMzc0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIGV4dDQqKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBJIGtub3cgdGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHQ0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGxvb2sgYXQgYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgZXh0NCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgYENPTkZJR2AgdmFsdWUgaXMgc2V0IHRvIGBFWFQ0X0ZTYCwgd2hpY2ggdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgRVhUNCBmaWxlc3lzdGVtLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGluaXRpYWxpemluZyBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgaGVyZSwgYW5kIHRob3NlIGFyZSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBgZXh0NF9maWxsX3N1cGVyYCwgYW5kIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYC4gVGhlbiBJIHNlZSBgc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKWAuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHVzZWZ1bCB2YXJpYXRpb24uIGB2b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpYCBpcyB0aGUgb3RoZXIgZm9jdXMsIHdoaWNoIGxvb2tzIGxpa2UgYW4gZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiBOb3csIGBleHQ0X2ZpbGxfc3VwZXJgIGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24sIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3MgZWl0aGVyIHBhcnQgb2YgYGV4dDRfY29udGV4dF9vcHNgIG9yIGlzIGNhbGxlZCBieSBgZXh0NF9nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZXh0NF9maWxsX3N1cGVyYCBpcyBhY3R1YWxseSBjYWxsZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2JhbGxvYy5jPTIzOT11bnNpZ25lZCBleHQ0X2ZyZWVfY2x1c3RlcnNfYWZ0ZXJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvYmFsbG9jLmMtMjU0LSAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suICBUaGUgZGVzY3JpcHRvcnMgYXJlIGxvYWRlZCBpbiBtZW1vcnlcbmZzL2V4dDQvYmFsbG9jLmM6MjU1OiAqIHdoZW4gYSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIChzZWUgZXh0NF9maWxsX3N1cGVyKS5cbmZzL2V4dDQvYmFsbG9jLmMtMjU2LSAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00NzM5PXN0YXRpYyBpbnQgZXh0NF9pbm9kZV9ibG9ja3Nfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQ3NTktXHQgKiBhbGxvd2VkIHRoaXMsIHNiLVx1MDAzZXNfbWF4Ynl0ZXMgd2FzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGh1Z2VfZmlsZVxuZnMvZXh0NC9pbm9kZS5jOjQ3NjA6XHQgKiBmZWF0dXJlIGluIGV4dDRfZmlsbF9zdXBlcigpLlxuZnMvZXh0NC9pbm9kZS5jLTQ3NjEtXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0xMDYxPXN0YXRpYyBpbnQgZXh0NF9tYl9zY2FuX2dyb3Vwc19iZXN0X2F2YWlsKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMTA4NS1cdFx0ICogV2UgYXJlIGFzc3VtaW5nIHRoYXQgc3RyaXBlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2ZcbmZzL2V4dDQvbWJhbGxvYy5jOjEwODY6XHRcdCAqIGNsdXN0ZXIgcmF0aW8gb3RoZXJ3aXNlIF9fZXh0NF9maWxsX3N1cGVyIGV4aXN0cyBlYXJseS5cbmZzL2V4dDQvbWJhbGxvYy5jLTEwODctXHRcdCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzUwPXN0YXRpYyBib29sIGV4dDRfaXNfc3RyaXBlX2luY29tcGF0aWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0cmlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTM1Ni1cbmZzL2V4dDQvc3VwZXIuYzo1MzU3OnN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTUzNTgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01Nzc0PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4MzQtXG5mcy9leHQ0L3N1cGVyLmM6NTgzNTpzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTgzNi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4NTQtXG5mcy9leHQ0L3N1cGVyLmM6NTg1NTpcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTg1Ni1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4ODU9c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy01ODg2LXtcbmZzL2V4dDQvc3VwZXIuYzo1ODg3Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGV4dDRfZmlsbF9zdXBlcik7XG5mcy9leHQ0L3N1cGVyLmMtNTg4OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk4CgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYF9fZXh0NF9maWxsX3N1cGVyKClgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbml0aWFsaXphdGlvbi4gVGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IGB0aW1lcl9kZWxldGVfc3luYygpYCBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmMoKWAgZm9yIGBzYmktJmd0O3NfZXJyX3JlcG9ydGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgZW5zdXJlcyB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIHRpbWVyLCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AsIGlzICpjb21wbGV0ZWx5KiBzaHV0IGRvd24gYmVmb3JlIHRoZSBzdXBlcmJsb2NrIGlzIGZyZWVkLiBQcmV2ZW50cyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlcyBpdCBjYW7igJl0IGJlIHJlLWFybWVkIGFmdGVyIHRoZSBtb3VudCBmYWlscywgd2hpY2ggaXMgY2xlYW5lciBhbmQgc2FmZXIuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGNvZGUsIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIHZpYSBzeXprYWxsZXIsIGFuZCB0aGVyZWZvcmUgd2UgYXJlIGdvb2QgdG8gZnV6eiB0aGlzIHNlY3Rpb24uCgpJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgX19leHQ0X2ZpbGxfc3VwZXJgLCB3aGljaCBpcyB0aGUgZGlyZWN0IHRhcmdldCwgYW5kIGl0cyBkaXJlY3QgJiMzNDtwYXJlbnQmIzM0OyBgZXh0NF9maWxsX3N1cGVyYCwgYW5kIHRoZSBkYWlseSBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24sIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gVGhlIGNvZGUgYWxzbyBoYW5kbGVzIGBleHQ0X3B1dF9zdXBlcmAsIHdoaWNoIGNsZWFucyB1cCBgc19lcnJfcmVwb3J0YCB0b28uCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuCgpJJiMzOTt2ZSB2ZXJpZmllZCBhbGwgdGhlIGNyaXRlcmlhLiBXZSBoYXZlIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGgsIGFuZCBpdCBpcyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZ2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlLgoKU28sIGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGdvLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtwcmludF9kYWlseV9lcnJvcl9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgZXh0NCBtb3VudCBpbiBfX2V4dDRfZmlsbF9zdXBlcigpIHRvIHVzZSB0aW1lcl9zaHV0ZG93bl9zeW5jKCkgaW5zdGVhZCBvZiB0aW1lcl9kZWxldGVfc3luYygpIG9uIHNfZXJyX3JlcG9ydCwgcHJldmVudGluZyB0aW1lciByZS1hcm1pbmcgZHVyaW5nIGZpbGVzeXN0ZW0gdGVhcmRvd24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBWRlMvZmlsZXN5c3RlbSBtb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtwcmludF9kYWlseV9lcnJvcl9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgZXh0NCBtb3VudCBpbiBfX2V4dDRfZmlsbF9zdXBlcigpIHRvIHVzZSB0aW1lcl9zaHV0ZG93bl9zeW5jKCkgaW5zdGVhZCBvZiB0aW1lcl9kZWxldGVfc3luYygpIG9uIHNfZXJyX3JlcG9ydCwgcHJldmVudGluZyB0aW1lciByZS1hcm1pbmcgZHVyaW5nIGZpbGVzeXN0ZW0gdGVhcmRvd24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBWRlMvZmlsZXN5c3RlbSBtb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc2YTNjNTZmZWY2YzUyNWFmMTE4YjY1Mzg3YjNjZjYwZGYyM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KIAlmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX3NiX3VwZF93b3JrKTsKIAlleHQ0X3N0b3BfbW1wZChzYmkpOwotCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwomIzQzOwl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwogCWV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ6CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBgZGlmZmAgc2hvd3MgYSBjaGFuZ2Ugd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLiBUaGUgY29udGV4dCBpcyByaWdodCBhcm91bmQgdGhlIHN1cGVyYmxvY2sgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IG5lYXIgbGluZSA1ODA5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGB0aW1lcl9kZWxldGVfc3luY2AgdG8gYHRpbWVyX3NodXRkb3duX3N5bmNgIGZvciBgc2JpLSZndDtzX2Vycl9yZXBvcnRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgYWJvdXQgbW9yZSByb2J1c3QgY2xlYW51cCBvZiB0aGUgZXJyb3IgcmVwb3J0aW5nIHRpbWVyIGJlZm9yZSB0aGUgc3VwZXJibG9jayBpcyBkZXN0cm95ZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVnLCByYWNlIGNvbmRpdGlvbiwgb3IgYSBnZW5lcmFsIGhhcmRlbmluZyBpbXByb3ZlbWVudC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCBpcyByZWxhdGVkIHRvIGEgbW9yZSByb2J1c3QgYXBwcm9hY2ggdG8gZGVzdHJveWluZyB0aGUgdGltZXIuIEkgd29uZGVyIHdoYXQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBhcmUgYmV0d2VlbiB0aGVzZSB0aW1lciBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSSB3aWxsIHJlYWQgdXAgb24gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciBgdGltZXJfc2h1dGRvd25fc3luY2AgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gZW5zdXJlIHRoYXQgYW55IHBlbmRpbmcgdGltZXIgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSBmcmVlaW5nIHRoZSBhc3NvY2lhdGVkIHN1cGVyYmxvY2sgZGF0YS4gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODAwOlx0XG41ODAxOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTgwMjpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTgwMzpcdFx0fVxuNTgwNDpcdGZhaWxlZF9tb3VudDNhOlxuNTgwNTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuNTgwNjpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTgwNzpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG41ODA4Olx0ZmFpbGVkX21vdW50MzpcbjU4MDk6XHRcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG41ODEwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX3NiX3VwZF93b3JrKTtcbjU4MTE6XHRcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG41ODEyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuNTgxMzpcdFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbjU4MTQ6XHRmYWlsZWRfbW91bnQ6XG41ODE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXG41ODE2Olx0XHR1dGY4X3VubG9hZChzYi1cdTAwM2VzX2VuY29kaW5nKTtcbjU4MTc6XHQjZW5kaWZcbjU4MTg6XHRcbjU4MTk6XHQjaWZkZWYgQ09ORklHX1FVT1RBXG41ODIwOlx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkmIzQzOyYjNDM7KVxuNTgyMTpcdFx0XHRrZnJlZShnZXRfcWZfbmFtZShzYiwgc2JpLCBpKSk7XG41ODIyOlx0I2VuZGlmXG41ODIzOlx0XHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFx1MDAyNnNiaS1cdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xuNTgyNDpcdFx0YnJlbHNlKHNiaS1cdTAwM2VzX3NiaCk7XG41ODI1Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpIHtcbjU4MjY6XHRcdFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xuNTgyNzpcdFx0XHRmc19iZGV2X2ZpbGVfcmVsZWFzZShzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xuNTgyODpcdFx0fVxuNTgyOTpcdG91dF9mYWlsOlxuNTgzMDpcdFx0aW52YWxpZGF0ZV9iZGV2KHNiLVx1MDAzZXNfYmRldik7XG41ODMxOlx0XHRzYi1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuNTgzMjpcdFx0cmV0dXJuIGVycjtcbjU4MzM6XHR9XG41ODM0Olx0XG41ODM1Olx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuNTgzNjpcdHtcbjU4Mzc6XHRcdHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eCA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG41ODM4Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XG41ODM5Olx0XHRjb25zdCBjaGFyICpkZXNjcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRyYWNraW5nIGRvd24gdGhvc2UgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgOgoKKipGaW5kaW5nIEZ1bmN0aW9uIFVzYWdlIGluIGV4dDQgU3VwZXJibG9jayoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dCBvZiBgdGltZXJfc2h1dGRvd25fc3luY2AgYW5kIGBzX2Vycl9yZXBvcnRgIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtJiMzOTtzIHN1cGVyYmxvY2sgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogZWxzZSB0aGVzZSBhcmUgY2FsbGVkIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjbHVlcyBsaWUuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGVpciBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIHNlZSBob3cgdGhleSYjMzk7cmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c19lcnJfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMjItXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYzoxMzIzOlx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5mcy9leHQ0L3N1cGVyLmMtMzcwNi17XG5mcy9leHQ0L3N1cGVyLmM6MzcwNzpcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N1cGVyLmMtMzcwOC1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXHUwMDNlc19zYjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzc0NS1cbmZzL2V4dDQvc3VwZXIuYzozNzQ2Olx0aWYgKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKVxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBqaWZmaWVzICYjNDM7IHNlY3NfdG9famlmZmllcyhzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYykpO1xuZnMvZXh0NC9zdXBlci5jLTM3NDgtfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzU3PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxuZnMvZXh0NC9zdXBlci5jOjU0NTk6XHR0aW1lcl9zZXR1cChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBwcmludF9kYWlseV9lcnJvcl9pbmZvLCAwKTtcbmZzL2V4dDQvc3VwZXIuYy01NDYwLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpLVx1MDAzZXNfZXJyb3JfbG9jayk7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NDktXHRpZiAoZXMtXHUwMDNlc19lcnJvcl9jb3VudCkge1xuZnMvZXh0NC9zdXBlci5jOjU3NTA6XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xuZnMvZXh0NC9zdXBlci5jOjU3NTE6XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuZnMvZXh0NC9zdXBlci5jOjU3NTI6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtNTc1My1cdH1cbmZzL2V4dDQvc3VwZXIuYzo1NzU0Olx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xuZnMvZXh0NC9zdXBlci5jLTU3NTUtXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTgxMS1cdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N1cGVyLmMtNTgxMy1cdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYyNTA9c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cdFx0ICogU3RhcnQgdGhlIGRhaWx5IGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbiBpZiBpdCBoYXNuJiMzOTt0IGJlZW5cbmZzL2V4dDQvc3VwZXIuYzo2MzExOlx0XHQgKiBzdGFydGVkIGFscmVhZHkgYW5kIHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIGlzIG5vdCB6ZXJvXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cdFx0ICovXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcdFx0aWYgKCFlcy1cdTAwM2VzX2Vycm9yX2NvdW50IFx1MDAyNlx1MDAyNiAhc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXG5mcy9leHQ0L3N1cGVyLmM6NjMxNDpcdFx0XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCxcbmZzL2V4dDQvc3VwZXIuYzo2MzE1Olx0XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtNjMxNi1cdFx0bGUzMl9hZGRfY3B1KFx1MDAyNmVzLVx1MDAzZXNfZXJyb3JfY291bnQsIHNiaS1cdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgVGltZXIgU2h1dGRvd24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogYHRpbWVyX3NodXRkb3duX3N5bmNgIGlzIGJlaW5nIGltcGxlbWVudGVkIGhlcmUgdG8gZ3VhcmFudGVlIHRoYXQgYSB0aW1lciBjYW4mIzM5O3QgYmUgcmVzdGFydGVkIG9uY2UgaXQmIzM5O3MgYmVlbiBzaHV0IGRvd24sIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBwcm9ibGVtcyBsaWtlIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgdGhlIHRlYXJkb3duIG9mIHRoZSBgc2JpYCBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgaWYgYSBtb3VudCBvcGVyYXRpb24gZmFpbHMuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZSBpbnZvbHZlcyBzdGFuZGFyZGl6aW5nIG9uIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpbiB0aGUgZXJyb3IgY2xlYW51cCBwYXRoIG9mIGBfX2V4dDRfZmlsbF9zdXBlcigpYCwgd2hpY2ggY3VycmVudGx5IHVzZXMgYHRpbWVyX2RlbGV0ZV9zeW5jYC4gVGhlIHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0aGUgY2xlYW51cCBwcm9jZXNzOyBhIGNsYXNzaWMgbGlmZWN5Y2xlIGlzc3VlLCBhbmQgYSBjb21tb24gc291cmNlIG9mIHVzZS1hZnRlci1mcmVlIGFuZCB0aW1lciB0ZWFyZG93biBidWdzLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgcmVnYXJkaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBXZSYjMzk7cmUgbm90IHRvdWNoaW5nIGFueXRoaW5nIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vIGRpY2UuIFRoZSBjb2RlJiMzOTtzIGxvZ2ljIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4KMy4gICoqQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8qKiBObyBhZ2Fpbi4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBvciBjaGFuZ2luZyBhbnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB0aGF0IHdvdWxkIGxlYXZlIGZpZWxkcyB1bmluaXRpYWxpemVkIGFuZCB0aGVuIHJlYWQgbGF0ZXIuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIGFjY2VzcyBvciB1bmluaXRpYWxpemVkIGJ5dGUgZXhwb3N1cmVzLgoKQmFzZWQgb24gdGhhdCwgaXQgc2VlbXMgdGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIHRpbWVyJiMzOTtzIGxpZmVjeWNsZSBhbmQgZW5zdXJpbmcgaXQmIzM5O3MgcHJvcGVybHkgZGlzYWJsZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlICphZnRlciogdGhlIHRpbWVyIGhhcyBiZWVuIGRlbGV0ZWQuCgpUaGUgcHJpbWFyeSByZWFzb24gdGhpcyBjaGFuZ2UgbWF0dGVycyBpc24mIzM5O3QgYWJvdXQgS01TQU4gc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCB0aW1lci1yZWxhdGVkIHJhY2UgY29uZGl0aW9ucy4gU3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBzaG91bGQgZWFzaWx5IGNhdGNoIHRoZXNlIGtpbmRzIG9mIGJ1Z3MsIGluIGFuIGFjdGl2ZSBrZXJuZWwgYnVpbGQuCgpUaHVzLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZGRyZXNzZXMgYW5kIG1pdGlnYXRlcyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgY2FuIGRldGVjdC4gV2UmIzM5O3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW91bnQgZmFpbHVyZSBjbGVhbnVwIHBhdGggaW4gYF9fZXh0NF9maWxsX3N1cGVyKClgIGJ5IHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBjcmVhdGUsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgemVyb2luZywgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBhbnkgZGF0YSB0byB1c2Vyc3BhY2UuIFVzZS1hZnRlci1mcmVlIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDoyNy45MzgzMzMxNzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA3NjU3MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2ZpbGxfc3VwZXJcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwicHJpbnRfZGFpbHlfZXJyb3JfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vdW50IGZhaWx1cmUgY2xlYW51cCBwYXRoIGluIGBfX2V4dDRfZmlsbF9zdXBlcigpYCBieSByZXBsYWNpbmcgYHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgY3JlYXRlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHplcm9pbmcsIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBVc2UtYWZ0ZXItZnJlZSBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDoyNy45MzgzNDc2MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTAxNzU0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNzZhM2M1NmZlZjZjNTI1YWYxMThiNjUzODdiM2NmNjBkZjIzYTY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG4gXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG4tXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmVwb3J0KTtcXG4rXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbiBcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbiBmYWlsZWRfbW91bnQ6XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozMC4wODkwNzcyNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2NTI0ODI3MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3NmEzYzU2ZmVmNmM1MjVhZjExOGI2NTM4N2IzY2Y2MGRmMjNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE2OjA0OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCBiY2EwZGM4N2QwYjdjLi4xNTRlMDA5MDEwMTc0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuK1x0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbiBcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50OlxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6MzAuMDg5MDc4OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkxODk4NDU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlc3lzdGVtIFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9leHQ0L3N1cGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyB0aGUgc3VwZXJibG9jayBpcyBoYW5kbGVkIGR1cmluZyBmaWxlc3lzdGVtIHNodXRkb3duIG9yIHVubW91bnQsIGFzIHN1Z2dlc3RlZCBieSB0aGUgYGZhaWxlZF9tb3VudGAgbGFiZWwuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHF1aXRlIHRhcmdldGVkOiBpdCdzIHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBgdGltZXJfZGVsZXRlX3N5bmNgIGlzIGEgc3Ryb25nIG9wZXJhdGlvbiwgZGVzaWduZWQgdG8gZGVsZXRlIGEgdGltZXIgaW1tZWRpYXRlbHkuIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpcyBwcm9iYWJseSBnZW50bGVyLCBhbGxvd2luZyBhbnkgcGVuZGluZyB0aW1lciB3b3JrIHRvIGNvbXBsZXRlIGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSB0aW1lci4gVGhlIGRpZmZlcmVuY2UgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcmFjZXMgZHVyaW5nIHVtb3VudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaGFzIHBvdGVudGlhbGx5IGJlZW4gaWRlbnRpZmllZCBhcyBwcm9ibGVtYXRpYy4gUGVyaGFwcyB0aGUgb2xkIHRpbWVyIGRlbGV0aW9uIHdhcyBsZWFkaW5nIHRvIGEga2VybmVsIHBhbmljIGluIGNlcnRhaW4sIHNwZWNpZmljIHNpdHVhdGlvbnM/IE9yIHBvc3NpYmx5LCBpdCB3YXMgYmVpbmcgb3ZlcnplYWxvdXMgYW5kIHByZXZlbnRpbmcgYSBncmFjZWZ1bCB1bm1vdW50PyBJdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUsIHRoZXJlZm9yZSwgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoeSB0aGUgbmV3IG1ldGhvZCB3YXMgY2hvc2VuLlxuXG5JJ2xsIGNoZWNrIHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhbmQgd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDU4MDkgaW4gYGZzL2V4dDQvc3VwZXIuY2AuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozNi4wMDgwNjYzOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3ODA6XFx0XFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XFxuNTc4MTpcXHRmYWlsZWRfbW91bnQ1OlxcbjU3ODI6XFx0XFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xcbjU3ODM6XFx0XFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XFxuNTc4NDpcXHRcXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xcbjU3ODU6XFx0ZmFpbGVkX21vdW50NGE6XFxuNTc4NjpcXHRcXHRkcHV0KHNiLVxcdTAwM2VzX3Jvb3QpO1xcbjU3ODc6XFx0XFx0c2ItXFx1MDAzZXNfcm9vdCA9IE5VTEw7XFxuNTc4ODpcXHRmYWlsZWRfbW91bnQ0OlxcbjU3ODk6XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcXFwibW91bnQgZmFpbGVkXFxcIik7XFxuNTc5MDpcXHRcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxcbjU3OTE6XFx0XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG41NzkyOlxcdGZhaWxlZF9tb3VudF93cTpcXG41NzkzOlxcdFxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG41Nzk0OlxcdFxcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbjU3OTU6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc5NjpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3OTc6XFx0XFxuNTc5ODpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzk5OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTgwMDpcXHRcXG41ODAxOlxcdFxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbCkge1xcbjU4MDI6XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuNTgwMzpcXHRcXHR9XFxuNTgwNDpcXHRmYWlsZWRfbW91bnQzYTpcXG41ODA1OlxcdFxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cXG41ODA2OlxcdFxcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbjU4MDc6XFx0XFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuNTgwODpcXHRmYWlsZWRfbW91bnQzOlxcbjU4MDk6XFx0XFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG41ODEwOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19zYl91cGRfd29yayk7XFxuNTgxMTpcXHRcXHRleHQ0X3N0b3BfbW1wZChzYmkpO1xcbjU4MTI6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbjU4MTM6XFx0XFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG41ODE0OlxcdGZhaWxlZF9tb3VudDpcXG41ODE1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcbjU4MTY6XFx0XFx0dXRmOF91bmxvYWQoc2ItXFx1MDAzZXNfZW5jb2RpbmcpO1xcbjU4MTc6XFx0I2VuZGlmXFxuNTgxODpcXHRcXG41ODE5OlxcdCNpZmRlZiBDT05GSUdfUVVPVEFcXG41ODIwOlxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkrKylcXG41ODIxOlxcdFxcdFxcdGtmcmVlKGdldF9xZl9uYW1lKHNiLCBzYmksIGkpKTtcXG41ODIyOlxcdCNlbmRpZlxcbjU4MjM6XFx0XFx0ZnNjcnlwdF9mcmVlX2R1bW15X3BvbGljeShcXHUwMDI2c2JpLVxcdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xcbjU4MjQ6XFx0XFx0YnJlbHNlKHNiaS1cXHUwMDNlc19zYmgpO1xcbjU4MjU6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkge1xcbjU4MjY6XFx0XFx0XFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXFx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpKTtcXG41ODI3OlxcdFxcdFxcdGZzX2JkZXZfZmlsZV9yZWxlYXNlKHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xcbjU4Mjg6XFx0XFx0fVxcbjU4Mjk6XFx0b3V0X2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjM2LjAwODM5MzM5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjU3ODU0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBleHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBJIGtub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1c3BlY3RlZCBhcmVhIC0gbGluZXMgNTQwMCB0aHJvdWdoIDU4MDAuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gaGVhZGVyIHdvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgdG8gbG9jYXRlIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgc28gSSBjYW4gc3RhcnQgdG8gZm9sbG93IHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6MzguMjM0MTgzMDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDc2MDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz01Nzc0PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTgzNC1cXG5mcy9leHQ0L3N1cGVyLmM6NTgzNTpzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTU4MzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozOS4yMTg5NDg1NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNjA1MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBNb3VudCBGYWlsdXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGZhaWxlZF9tb3VudDhgIGlzIGNvbWluZyBmcm9tLCBvciwgYWx0ZXJuYXRpdmVseSwgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSA1ODA5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYGZzL2V4dDQvc3VwZXIuY2AuIFNpbmNlIEkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbW9yeSBmb3IgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBFWFQ0IHN1cGVyYmxvY2sgY29kZSwgSSdsbCBnbyBhaGVhZCBhbmQgdGFrZSBhIGxvb2sgYXQgYSByYW5nZSBvZiBsaW5lczogNTc1MCB0byA1ODQwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIGlzIGVub3VnaCB0byBwaW5wb2ludCB0aGUgaXNzdWUgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0MS4yMTA1NTY2NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3NTA6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcXHQvKiBmaXJzdCB0aW1lICA1IG1pbnV0ZXMgKi9cXG41NzUxOlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsXFxuNTc1MjpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuNTc1MzpcXHRcXHR9XFxuNTc1NDpcXHRcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xcbjU3NTU6XFx0XFxuNTc1NjpcXHRcXHQvKiBFbmFibGUgbWVzc2FnZSByYXRlbGltaXRpbmcuIERlZmF1bHQgaXMgMTAgbWVzc2FnZXMgcGVyIDUgc2Vjcy4gKi9cXG41NzU3OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XFxuNTc1ODpcXHRcXHRyYXRlbGltaXRfc3RhdGVfaW5pdChcXHUwMDI2c2JpLVxcdTAwM2VzX3dhcm5pbmdfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzU5OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfbXNnX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XFxuNTc2MDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZzYmktXFx1MDAzZXNfd2FybmluZ19jb3VudCwgMCk7XFxuNTc2MTpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZzYmktXFx1MDAzZXNfbXNnX2NvdW50LCAwKTtcXG41NzYyOlxcdFxcbjU3NjM6XFx0XFx0LyogUmVnaXN0ZXIgc3lzZnMgYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyBhcmUgY29tcGxldGUuICovXFxuNTc2NDpcXHRcXHRlcnIgPSBleHQ0X3JlZ2lzdGVyX3N5c2ZzKHNiKTtcXG41NzY1OlxcdFxcdGlmIChlcnIpXFxuNTc2NjpcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDk7XFxuNTc2NzpcXHRcXG41NzY4OlxcdFxcdHJldHVybiAwO1xcbjU3Njk6XFx0XFxuNTc3MDpcXHRmYWlsZWRfbW91bnQ5OlxcbjU3NzE6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuNTc3MjpcXHRcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG41NzczOlxcdFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbjU3NzQ6XFx0ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ3OlxcbjU3Nzc6XFx0XFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbjU3Nzg6XFx0ZmFpbGVkX21vdW50NjpcXG41Nzc5OlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc4MDpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzgxOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc4MjpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc4MzpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzg0OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc4NTpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzg2OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc4NzpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzg4OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4OTpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzkwOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc5MTpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3OTI6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3OTM6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbjU3OTQ6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTc5NTpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG41Nzk2OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuNTc5NzpcXHRcXG41Nzk4OlxcdFxcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXFx1MDAzZXNfZWFfYmxvY2tfY2FjaGUpO1xcbjU3OTk6XFx0XFx0c2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlID0gTlVMTDtcXG41ODAwOlxcdFxcbjU4MDE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTgwMjpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41ODAzOlxcdFxcdH1cXG41ODA0OlxcdGZhaWxlZF9tb3VudDNhOlxcbjU4MDU6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbjU4MDY6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTgwNzpcXHRcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG41ODA4OlxcdGZhaWxlZF9tb3VudDM6XFxuNTgwOTpcXHRcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbjU4MTA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG41ODExOlxcdFxcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XFxuNTgxMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuNTgxMzpcXHRcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbjU4MTQ6XFx0ZmFpbGVkX21vdW50OlxcbjU4MTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuNTgxNjpcXHRcXHR1dGY4X3VubG9hZChzYi1cXHUwMDNlc19lbmNvZGluZyk7XFxuNTgxNzpcXHQjZW5kaWZcXG41ODE4OlxcdFxcbjU4MTk6XFx0I2lmZGVmIENPTkZJR19RVU9UQVxcbjU4MjA6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBFWFQ0X01BWFFVT1RBUzsgaSsrKVxcbjU4MjE6XFx0XFx0XFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xcbjU4MjI6XFx0I2VuZGlmXFxuNTgyMzpcXHRcXHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFxcdTAwMjZzYmktXFx1MDAzZXNfZHVtbXlfZW5jX3BvbGljeSk7XFxuNTgyNDpcXHRcXHRicmVsc2Uoc2JpLVxcdTAwM2VzX3NiaCk7XFxuNTgyNTpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XFxuNTgyNjpcXHRcXHRcXHRpbnZhbGlkYXRlX2JkZXYoZmlsZV9iZGV2KHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xcbjU4Mjc6XFx0XFx0XFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlLCBzYik7XFxuNTgyODpcXHRcXHR9XFxuNTgyOTpcXHRvdXRfZmFpbDpcXG41ODMwOlxcdFxcdGludmFsaWRhdGVfYmRldihzYi1cXHUwMDNlc19iZGV2KTtcXG41ODMxOlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbjU4MzI6XFx0XFx0cmV0dXJuIGVycjtcXG41ODMzOlxcdH1cXG41ODM0OlxcdFxcbjU4MzU6XFx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbjU4MzY6XFx0e1xcbjU4Mzc6XFx0XFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuNTgzODpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XFxuNTgzOTpcXHRcXHRjb25zdCBjaGFyICpkZXNjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6NDEuMjEwODQwOTU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzOTYxMTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvZGUgU2VjdGlvbiA1NzUwLTU4MzMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBsaW5lcywgNTc1MCB0byA1ODMzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmFjayB1cCBhIGJpdCBhbmQgZXN0YWJsaXNoIHRoZSBmdW5jdGlvbiB0aG9zZSBsaW5lcyBhcmUgcGFydCBvZi4gRGlyZWN0bHkganVtcGluZyBpbnRvIHRob3NlIGxpbmVzIG1pZ2h0IGJlIGVmZmljaWVudCBmb3IgcXVpY2sgY2hhbmdlcywgYnV0IEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIG92ZXJ2aWV3IHRvIGZpbmQgdGhlIG1haW4gdXNlLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmUgNTAwMCB0byA1MjAwLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGp1c3QgZ3JlcCBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIGlmIHRoYXQgcXVpY2tseSBuYXJyb3dzIHRoaW5ncyBkb3duLiBFaXRoZXIgd2F5LCB0aGF0IGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiBhIHByb3BlciBhbmFseXNpcy4gSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIG1pbnV0aWFlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0NC4xNTA0NTUxODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Njg2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgW2EtejAtOV8gKl0rZXh0NF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjc0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9leHQ0L3N1cGVyLmMtNjMtXFxuZnMvZXh0NC9zdXBlci5jOjY0OnN0YXRpYyBzdHJ1Y3QgZXh0NF9sYXp5X2luaXQgKmV4dDRfbGlfaW5mbztcXG5mcy9leHQ0L3N1cGVyLmMtNjUtc3RhdGljIERFRklORV9NVVRFWChleHQ0X2xpX210eCk7XFxuZnMvZXh0NC9zdXBlci5jOjY2OnN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdDtcXG5mcy9leHQ0L3N1cGVyLmMtNjctXFxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXFxuZnMvZXh0NC9zdXBlci5jLTY5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBqb3VybmFsX2Rldm51bSk7XFxuZnMvZXh0NC9zdXBlci5jOjcwOnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xcbmZzL2V4dDQvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzI6c3RhdGljIGludCBleHQ0X2NvbW1pdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzM6c3RhdGljIGludCBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNzQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzU6c3RhdGljIGludCBleHQ0X2NsZWFyX2pvdXJuYWxfZXJyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcXG5mcy9leHQ0L3N1cGVyLmM6Nzc6c3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpO1xcbmZzL2V4dDQvc3VwZXIuYzo3ODpzdGF0aWMgaW50IGV4dDRfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XFxuZnMvZXh0NC9zdXBlci5jOjc5OnN0YXRpYyBpbnQgZXh0NF91bmZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODA6c3RhdGljIGludCBleHQ0X2ZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtODEtc3RhdGljIGlubGluZSBpbnQgZXh0Ml9mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM9ODI9c3RhdGljIGlubGluZSBpbnQgZXh0M19mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODM6c3RhdGljIHZvaWQgZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9zdXBlci5jOjg0OnN0YXRpYyB2b2lkIGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KHZvaWQpO1xcbmZzL2V4dDQvc3VwZXIuYzo4NTpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2dldF9qb3VybmFsX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTg2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgam91cm5hbF9pbnVtKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODc6c3RhdGljIGludCBleHQ0X3ZhbGlkYXRlX29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODg6c3RhdGljIGludCBleHQ0X2NoZWNrX29wdF9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvZXh0NC9zdXBlci5jLTg5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvc3VwZXIuYzo5MDpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTE6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbmZzL2V4dDQvc3VwZXIuYzo5MjpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTM6c3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYzo5NTpzdGF0aWMgaW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk2OnN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW107XFxuZnMvZXh0NC9zdXBlci5jLTk4LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyNC1cXG5mcy9leHQ0L3N1cGVyLmM6MTI1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTEyNi1cXHQucGFyc2VfcGFyYW1cXHQ9IGV4dDRfcGFyc2VfcGFyYW0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTU5PU1PRFVMRV9BTElBUyhcXFwiZXh0M1xcXCIpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2Mi1cXG5mcy9leHQ0L3N1cGVyLmM6MTYzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4dDRfcmVhZF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuZnMvZXh0NC9zdXBlci5jLTE2NC1cXHRcXHRcXHRcXHQgIGJpb19lbmRfaW9fdCBlbmRfaW8sIGJvb2wgc2ltdV9mYWlsKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIxND1pbnQgZXh0NF9yZWFkX2JoX2xvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjI5LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMzA6c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X3NiX2JyZWFkX2dmcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy0yMzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNlY3Rvcl90IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI3OD12b2lkIGV4dDRfc2JfYnJlYWRhaGVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg5LVxcbmZzL2V4dDQvc3VwZXIuYzoyOTA6c3RhdGljIGludCBleHQ0X3ZlcmlmeV9jc3VtX3R5cGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtMjkxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjk5PV9fbGUzMiBleHQ0X3N1cGVyYmxvY2tfY3N1bShzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzA4LVxcbmZzL2V4dDQvc3VwZXIuYzozMDk6c3RhdGljIGludCBleHQ0X3N1cGVyYmxvY2tfY3N1bV92ZXJpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtMzEwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDMyPXZvaWQgZXh0NF9pdGFibGVfdW51c2VkX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQzOS1cXG5mcy9leHQ0L3N1cGVyLmM6NDQwOnN0YXRpYyB2b2lkIF9fZXh0NF91cGRhdGVfdHN0YW1wKF9fbGUzMiAqbG8sIF9fdTggKmhpLCB0aW1lNjRfdCBub3cpXFxuZnMvZXh0NC9zdXBlci5jLTQ0MS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQ3LVxcbmZzL2V4dDQvc3VwZXIuYzo0NDg6c3RhdGljIHRpbWU2NF90IF9fZXh0NF9nZXRfdHN0YW1wKF9fbGUzMiAqbG8sIF9fdTggKmhpKVxcbmZzL2V4dDQvc3VwZXIuYy00NDkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ3MS0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NDcyOnN0YXRpYyB2b2lkIGV4dDRfbWF5YmVfdXBkYXRlX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDczLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDgtXFxuZnMvZXh0NC9zdXBlci5jOjUwOTpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxfY29tbWl0X2NhbGxiYWNrKGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKVxcbmZzL2V4dDQvc3VwZXIuYy01MTAte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUxOC1cXG5mcy9leHQ0L3N1cGVyLmM6NTE5OnN0YXRpYyBib29sIGV4dDRfam91cm5hbGxlZF93cml0ZXBhZ2VfbmVlZHNfcmVkaXJ0eShzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlLFxcbmZzL2V4dDQvc3VwZXIuYy01MjAtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTAtXFxuZnMvZXh0NC9zdXBlci5jOjU1MTpzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF9zdWJtaXRfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUpXFxuZnMvZXh0NC9zdXBlci5jLTU1Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTgzLVxcbmZzL2V4dDQvc3VwZXIuYzo1ODQ6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy01ODUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU5NC1cXG5mcy9leHQ0L3N1cGVyLmM6NTk1OnN0YXRpYyBpbnQgZXh0NF9qb3VybmFsX2ZpbmlzaF9pbm9kZV9kYXRhX2J1ZmZlcnMoc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSlcXG5mcy9leHQ0L3N1cGVyLmMtNTk2LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MTE9c3RydWN0IGV4dDRfZXJyX3RyYW5zbGF0aW9uIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MTctXFxuZnMvZXh0NC9zdXBlci5jOjYxODpzdGF0aWMgc3RydWN0IGV4dDRfZXJyX3RyYW5zbGF0aW9uIGVycl90cmFuc2xhdGlvbltdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy02MTktXFx0RVhUNF9FUlJfVFJBTlNMQVRFKEVJTyksXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjM2LVxcbmZzL2V4dDQvc3VwZXIuYzo2Mzc6c3RhdGljIGludCBleHQ0X2Vycm5vX3RvX2NvZGUoaW50IGVycm5vKVxcbmZzL2V4dDQvc3VwZXIuYy02Mzgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTY0Nz1zdGF0aWMgdm9pZCBzYXZlX2Vycm9yX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTY5NS0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6Njk2OnN0YXRpYyB2b2lkIGV4dDRfaGFuZGxlX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZm9yY2Vfcm8sIGludCBlcnJvcixcXG5mcy9leHQ0L3N1cGVyLmMtNjk3LVxcdFxcdFxcdCAgICAgIF9fdTMyIGlubywgX191NjQgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9OTg0PXZvaWQgX19leHQ0X21zZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEwMDYtXFxuZnMvZXh0NC9zdXBlci5jOjEwMDc6c3RhdGljIGludCBleHQ0X3dhcm5pbmdfcmF0ZWxpbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEwMDgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTExNjg9c3RhdGljIHZvaWQgZHVtcF9vcnBoYW5fbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTE4Ni0jaWZkZWYgQ09ORklHX1FVT1RBXFxuZnMvZXh0NC9zdXBlci5jOjExODc6c3RhdGljIGludCBleHQ0X3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7XFxuZnMvZXh0NC9zdXBlci5jLTExODgtXFxuZnMvZXh0NC9zdXBlci5jOjExODk6c3RhdGljIGlubGluZSB2b2lkIGV4dDRfcXVvdGFzX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG5mcy9leHQ0L3N1cGVyLmMtMTE5MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTIwMj1zdGF0aWMgaW5saW5lIGNoYXIgKmdldF9xZl9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTIwOS0jZWxzZVxcbmZzL2V4dDQvc3VwZXIuYzoxMjEwOnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3F1b3Rhc19vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuZnMvZXh0NC9zdXBlci5jLTEyMTEte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyMTQtXFxuZnMvZXh0NC9zdXBlci5jOjEyMTU6c3RhdGljIGludCBleHQ0X3BlcmNwdV9wYXJhbV9pbml0KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTIxNi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI0Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTI0ODpzdGF0aWMgdm9pZCBleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTI0OS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI1Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTI1ODpzdGF0aWMgdm9pZCBleHQ0X2dyb3VwX2Rlc2NfZnJlZShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuZnMvZXh0NC9zdXBlci5jLTEyNTkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyNjgtXFxuZnMvZXh0NC9zdXBlci5jOjEyNjk6c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTI3MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI4MS1cXG5mcy9leHQ0L3N1cGVyLmM6MTI4MjpzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgzLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzkyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzkzOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9pbm9kZV9jYWNoZXA7XFxuZnMvZXh0NC9zdXBlci5jLTEzOTQtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTM5Ny0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MTM5ODpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEzOTkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE0NDgtXFxuZnMvZXh0NC9zdXBlci5jOjE0NDk6c3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3N1cGVyLmMtMTQ1MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTQ1OS1cXG5mcy9leHQ0L3N1cGVyLmM6MTQ2MDpzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNDYxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNDcwLVxcbmZzL2V4dDQvc3VwZXIuYzoxNDcxOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNDcyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNDkwLVxcbmZzL2V4dDQvc3VwZXIuYzoxNDkxOnN0YXRpYyB2b2lkIGV4dDRfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtMTQ5Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTUzOT12b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNTc5LVxcbmZzL2V4dDQvc3VwZXIuYzoxNTgwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy0xNTgxLVxcdFxcdFxcdFxcdFxcdHU2NCBpbm8sIHUzMiBnZW5lcmF0aW9uKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE1OTktXFxuZnMvZXh0NC9zdXBlci5jOjE2MDA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG5mcy9leHQ0L3N1cGVyLmMtMTYwMS1cXHRcXHRcXHRcXHRcXHRpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjA2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjA3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXFxuZnMvZXh0NC9zdXBlci5jLTE2MDgtXFx0XFx0XFx0XFx0XFx0aW50IGZoX2xlbiwgaW50IGZoX3R5cGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTYxMy1cXG5mcy9leHQ0L3N1cGVyLmM6MTYxNDpzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNjE1LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjI5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcXVvdGF0eXBlc1tdID0gSU5JVFFGTkFNRVM7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTYzMS1cXG5mcy9leHQ0L3N1cGVyLmM6MTYzMjpzdGF0aWMgaW50IGV4dDRfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzM6c3RhdGljIGludCBleHQ0X2FjcXVpcmVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzQ6c3RhdGljIGludCBleHQ0X3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzU6c3RhdGljIGludCBleHQ0X21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzY6c3RhdGljIGludCBleHQ0X3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpO1xcbmZzL2V4dDQvc3VwZXIuYzoxNjM3OnN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCxcXG5mcy9leHQ0L3N1cGVyLmMtMTYzOC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpO1xcbmZzL2V4dDQvc3VwZXIuYzoxNjM5OnN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSxcXG5mcy9leHQ0L3N1cGVyLmMtMTY0MC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7XFxuZnMvZXh0NC9zdXBlci5jOjE2NDE6c3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSxcXG5mcy9leHQ0L3N1cGVyLmMtMTY0Mi1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTY0MzpzdGF0aWMgaW50IGV4dDRfcXVvdGFfZW5hYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLFxcbmZzL2V4dDQvc3VwZXIuYy0xNjQ0LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTY0NS1cXG5mcy9leHQ0L3N1cGVyLmM6MTY0NjpzdGF0aWMgc3RydWN0IGRxdW90IF9fcmN1ICoqZXh0NF9nZXRfZHF1b3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9zdXBlci5jLTE2NDcte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2NTAtXFxuZnMvZXh0NC9zdXBlci5jOjE2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDRfcXVvdGFfb3BlcmF0aW9ucyA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTY1Mi1cXHQuZ2V0X3Jlc2VydmVkX3NwYWNlXFx0PSBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjY0LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjY1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGV4dDRfcWN0bF9vcGVyYXRpb25zID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNjY2LVxcdC5xdW90YV9vblxcdD0gZXh0NF9xdW90YV9vbixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjc2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjc3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE2NzgtXFx0LmFsbG9jX2lub2RlXFx0PSBleHQ0X2FsbG9jX2lub2RlLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2OTktXFxuZnMvZXh0NC9zdXBlci5jOjE3MDA6c3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBleHQ0X2V4cG9ydF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3MDEtXFx0LmVuY29kZV9maCA9IGdlbmVyaWNfZW5jb2RlX2lubzMyX2ZoLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3MDg9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTczNi1cXG5mcy9leHQ0L3N1cGVyLmM6MTczNzpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZXJyb3JzW10gPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3MzgtXFx0e1xcXCJjb250aW51ZVxcXCIsXFx0RVhUNF9NT1VOVF9FUlJPUlNfQ09OVH0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc0My1cXG5mcy9leHQ0L3N1cGVyLmM6MTc0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZGF0YVtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzQ1LVxcdHtcXFwiam91cm5hbFxcXCIsXFx0RVhUNF9NT1VOVF9KT1VSTkFMX0RBVEF9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3NTAtXFxuZnMvZXh0NC9zdXBlci5jOjE3NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RhdGFfZXJyW10gPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3NTItXFx0e1xcXCJhYm9ydFxcXCIsXFx0T3B0X2RhdGFfZXJyX2Fib3J0fSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNzU2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNzU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9qcWZtdFtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzU4LVxcdHtcXFwidmZzb2xkXFxcIixcXHRRRk1UX1ZGU19PTER9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3NjMtXFxuZnMvZXh0NC9zdXBlci5jOjE3NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RheFtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzY1LVxcdHtcXFwiYWx3YXlzXFxcIixcXHRPcHRfZGF4X2Fsd2F5c30sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc3Ny0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MTc3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGV4dDRfcGFyYW1fc3BlY3NbXSA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTc3OS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImJzZGRmXFxcIixcXHRcXHRPcHRfYnNkX2RmKSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcXG5mcy9leHQ0L3N1cGVyLmM6MTk3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGV4dDRfc2JfZW5jb2RpbmdzIHtcXG5mcy9leHQ0L3N1cGVyLmMtMTk3Mi1cXHRfX3UxNiBtYWdpYztcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTc4LVxcbmZzL2V4dDQvc3VwZXIuYzoxOTc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3MgKlxcbmZzL2V4dDQvc3VwZXIuYy0xOTgwLWV4dDRfc2JfcmVhZF9lbmNvZGluZyhjb25zdCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjAxMz1zdHJ1Y3QgZXh0NF9mc19jb250ZXh0IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQzLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQ0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIxMjA9c3RhdGljIGludCB1bm5vdGVfcWZfbmFtZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGludCBxdHlwZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMTMzOnN0YXRpYyBpbnQgZXh0NF9wYXJzZV90ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0sXFxuZnMvZXh0NC9zdXBlci5jLTIxMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yMTg1PUVYVDRfVEVTVF9DVFgobW91bnRfb3B0Mik7XFxuZnMvZXh0NC9zdXBlci5jLTIxODYtXFxuZnMvZXh0NC9zdXBlci5jOjIxODc6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvZXh0NC9zdXBlci5jLTIxODgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI1Mjg9c3RhdGljIGludCBwYXJzZV9hcHBseV9zYl9tb3VudF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjU4MS1cXG5mcy9leHQ0L3N1cGVyLmM6MjU4MjpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X3F1b3RhX29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNTgzLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNjE4LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyNjE5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19xdW90YV9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvZXh0NC9zdXBlci5jLTI2MjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNzM2LVxcbmZzL2V4dDQvc3VwZXIuYzoyNzM3OnN0YXRpYyBpbnQgZXh0NF9jaGVja190ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNzM4LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI3NzYtXFxuZnMvZXh0NC9zdXBlci5jOjI3Nzc6c3RhdGljIHZvaWQgZXh0NF9hcHBseV90ZXN0X2R1bW15X2VuY3J5cHRpb24oc3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4LFxcbmZzL2V4dDQvc3VwZXIuYy0yNzc4LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNzg4LVxcbmZzL2V4dDQvc3VwZXIuYzoyNzg5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNzkwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cXG5mcy9leHQ0L3N1cGVyLmM6Mjg3MTpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0yODcyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yOTAzLVxcbmZzL2V4dDQvc3VwZXIuYzoyOTA0OnN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtMjkwNS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjkzMC1cXG5mcy9leHQ0L3N1cGVyLmM6MjkzMTpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9zaG93X3F1b3RhX29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuZnMvZXh0NC9zdXBlci5jLTI5MzItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yOTY2PXN0YXRpYyBjb25zdCBjaGFyICp0b2tlbjJzdHIoaW50IHRva2VuKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI5ODAtICovXFxuZnMvZXh0NC9zdXBlci5jOjI5ODE6c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTI5ODItXFx0XFx0XFx0ICAgICAgaW50IG5vZGVmcylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMTA2LVxcbmZzL2V4dDQvc3VwZXIuYzozMTA3OnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvZXh0NC9zdXBlci5jLTMxMDgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMxMTI9aW50IGV4dDRfc2VxX29wdGlvbnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTMxMjItXFxuZnMvZXh0NC9zdXBlci5jOjMxMjM6c3RhdGljIGludCBleHQ0X3NldHVwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG5mcy9leHQ0L3N1cGVyLmMtMzEyNC1cXHRcXHRcXHQgICAgaW50IHJlYWRfb25seSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zMTgxPWludCBleHQ0X2FsbG9jX2ZsZXhfYmdfYXJyYXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IG5ncm91cClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMjI3LVxcbmZzL2V4dDQvc3VwZXIuYzozMjI4OnN0YXRpYyBpbnQgZXh0NF9maWxsX2ZsZXhfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0zMjI5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMjYxLVxcbmZzL2V4dDQvc3VwZXIuYzozMjYyOnN0YXRpYyBfX2xlMTYgZXh0NF9ncm91cF9kZXNjX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuZnMvZXh0NC9zdXBlci5jLTMyNjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMzMTY9dm9pZCBleHQ0X2dyb3VwX2Rlc2NfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzMyNC0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovXFxuZnMvZXh0NC9zdXBlci5jOjMzMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTMzMjYtXFx0XFx0XFx0XFx0ICBleHQ0X2ZzYmxrX3Qgc2JfYmxvY2ssXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzQ1OC0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MzQ1OTpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X3NpemUoaW50IGJsa2JpdHMsIGludCBoYXNfaHVnZV9maWxlcylcXG5mcy9leHQ0L3N1cGVyLmMtMzQ2MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzQ5My0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MzQ5NDpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXFxuZnMvZXh0NC9zdXBlci5jLTM0OTUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTM1Njg9c3RhdGljIGV4dDRfZnNibGtfdCBkZXNjcmlwdG9yX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM2MDYtICovXFxuZnMvZXh0NC9zdXBlci5jOjM2MDc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0NF9nZXRfc3RyaXBlX3NpemUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbmZzL2V4dDQvc3VwZXIuYy0zNjA4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzUwLS8qIEZpbmQgbmV4dCBzdWl0YWJsZSBncm91cCBhbmQgcnVuIGV4dDRfaW5pdF9pbm9kZV90YWJsZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzozNzUxOnN0YXRpYyBpbnQgZXh0NF9ydW5fbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXFxuZnMvZXh0NC9zdXBlci5jLTM3NTIte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM4MTEtICovXFxuZnMvZXh0NC9zdXBlci5jOjM4MTI6c3RhdGljIHZvaWQgZXh0NF9yZW1vdmVfbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXFxuZnMvZXh0NC9zdXBlci5jLTM4MTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM4MjEtXFxuZnMvZXh0NC9zdXBlci5jOjM4MjI6c3RhdGljIHZvaWQgZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtMzgyMy17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzgzNS1cXG5mcy9leHQ0L3N1cGVyLmM6MzgzNjpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpleHQ0X2xhenlpbml0X3Rhc2s7XFxuZnMvZXh0NC9zdXBlci5jLTM4MzctXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzg0Ni0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6Mzg0NzpzdGF0aWMgaW50IGV4dDRfbGF6eWluaXRfdGhyZWFkKHZvaWQgKmFyZylcXG5mcy9leHQ0L3N1cGVyLmMtMzg0OC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzk1My1cXG5mcy9leHQ0L3N1cGVyLmM6Mzk1NDpzdGF0aWMgdm9pZCBleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCh2b2lkKVxcbmZzL2V4dDQvc3VwZXIuYy0zOTU1LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zOTY3LVxcbmZzL2V4dDQvc3VwZXIuYzozOTY4OnN0YXRpYyBpbnQgZXh0NF9ydW5fbGF6eWluaXRfdGhyZWFkKHZvaWQpXFxuZnMvZXh0NC9zdXBlci5jLTM5Njkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM5OTEtICovXFxuZnMvZXh0NC9zdXBlci5jOjM5OTI6c3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2hhc191bmluaXRfaXRhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTM5OTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwMTEtXFxuZnMvZXh0NC9zdXBlci5jOjQwMTI6c3RhdGljIGludCBleHQ0X2xpX2luZm9fbmV3KHZvaWQpXFxuZnMvZXh0NC9zdXBlci5jLTQwMTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwMjktXFxuZnMvZXh0NC9zdXBlci5jOjQwMzA6c3RhdGljIHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmV4dDRfbGlfcmVxdWVzdF9uZXcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNDAzMS1cXHRcXHRcXHRcXHRcXHQgICAgZXh0NF9ncm91cF90IHN0YXJ0KVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQwNTc9aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQxMTktICovXFxuZnMvZXh0NC9zdXBlci5jOjQxMjA6c3RhdGljIHZvaWQgZXh0NF9kZXN0cm95X2xhenlpbml0X3RocmVhZCh2b2lkKVxcbmZzL2V4dDQvc3VwZXIuYy00MTIxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00MjQ5PWludCBleHQ0X2NhbGN1bGF0ZV9vdmVyaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQzMDgtXFxuZnMvZXh0NC9zdXBlci5jOjQzMDk6c3RhdGljIHZvaWQgZXh0NF9zZXRfcmVzdl9jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00MzEwLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00MzM4LVxcbmZzL2V4dDQvc3VwZXIuYzo0MzM5OnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X3F1b3RhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDM0MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDM1My1cXG5mcy9leHQ0L3N1cGVyLmM6NDM1NDpzdGF0aWMgdm9pZCBleHQ0X3NldHVwX2NzdW1fdHJpZ2dlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00MzU1LVxcdFxcdFxcdFxcdCAgICBlbnVtIGV4dDRfam91cm5hbF90cmlnZ2VyX3R5cGUgdHlwZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00MzY3LVxcbmZzL2V4dDQvc3VwZXIuYzo0MzY4OnN0YXRpYyB2b2lkIGV4dDRfZnJlZV9zYmkoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbmZzL2V4dDQvc3VwZXIuYy00MzY5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00Mzc3LVxcbmZzL2V4dDQvc3VwZXIuYzo0Mzc4OnN0YXRpYyBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpleHQ0X2FsbG9jX3NiaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00Mzc5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDAzLVxcbmZzL2V4dDQvc3VwZXIuYzo0NDA0OnN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0NjAtXFxuZnMvZXh0NC9zdXBlci5jOjQ0NjE6c3RhdGljIGludCBleHQ0X2hhbmRsZV9jbHVzdGVyc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00NDYyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NTIyLSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo0NTIzOnN0YXRpYyB2b2lkIGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDUyNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDU0OC1cXG5mcy9leHQ0L3N1cGVyLmM6NDU0OTpzdGF0aWMgdm9pZCBleHQ0X2Zhc3RfY29tbWl0X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDU3My1cXG5mcy9leHQ0L3N1cGVyLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfaW5vZGVfaW5mb19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ1NzUtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ2NDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuZnMvZXh0NC9zdXBlci5jOjQ2NDc6c3RhdGljIGludCBleHQ0X2VuY29kaW5nX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbmZzL2V4dDQvc3VwZXIuYy00NjQ4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00Njg3LSNlbHNlXFxuZnMvZXh0NC9zdXBlci5jOjQ2ODg6c3RhdGljIGlubGluZSBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG5mcy9leHQ0L3N1cGVyLmMtNDY4OS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDY5My1cXG5mcy9leHQ0L3N1cGVyLmM6NDY5NDpzdGF0aWMgaW50IGV4dDRfaW5pdF9tZXRhZGF0YV9jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG5mcy9leHQ0L3N1cGVyLmMtNDY5NS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDcyOS1cXG5mcy9leHQ0L3N1cGVyLmM6NDczMDpzdGF0aWMgaW50IGV4dDRfY2hlY2tfZmVhdHVyZV9jb21wYXRpYmlsaXR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ3MzEtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00ODMzLVxcbmZzL2V4dDQvc3VwZXIuYzo0ODM0OnN0YXRpYyBpbnQgZXh0NF9jaGVja19nZW9tZXRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00ODM1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDkxMi1cXG5mcy9leHQ0L3N1cGVyLmM6NDkxMzpzdGF0aWMgaW50IGV4dDRfZ3JvdXBfZGVzY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ5MTQtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5NzItXFxuZnMvZXh0NC9zdXBlci5jOjQ5NzM6c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00OTc0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU2LVxcbmZzL2V4dDQvc3VwZXIuYzo1MDU3OnN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy01MDU4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDg5LVxcbmZzL2V4dDQvc3VwZXIuYzo1MDkwOnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X2hhc19qb3VybmFsX29wdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy01MDkxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MTE0LVxcdFxcdHVtaW4oTUFYX1BBR0VDQUNIRV9PUkRFUiwgKDExICsgKHNiKS1cXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIFBBR0VfU0hJRlQpKVxcbmZzL2V4dDQvc3VwZXIuYzo1MTE1OnN0YXRpYyB2b2lkIGV4dDRfc2V0X21heF9tYXBwaW5nX29yZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUxMTYte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUxMjQtXFxuZnMvZXh0NC9zdXBlci5jOjUxMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2xhcmdlX2ZvbGlvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUxMjYte1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjQ0LjIxODE0NzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTYzODAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgTW91bnQgRmFpbHVyZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgYGZhaWxlZF9tb3VudDhgIGVycm9yLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIHdyb25nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZC4gSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBgZmFpbGVkX21vdW50OGAgaXMgZGVmaW5lZCBvciBjYWxsZWQuXG5cblNpbmNlIHRoYXQgbWlnaHQgYmUgdG9vIG5hcnJvdywgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2guIEknbGwgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIHRvIGBmYWlsZWRfbW91bnRgIGluIGdlbmVyYWwsIGFuZCB0aGVuIEknbGwgY29uc2lkZXIgbG9va2luZyBpbnRvIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgY29tbW9uIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIG1vdW50IG9wZXJhdGlvbnMsIHNvIGl0IGNvdWxkIGJlIHJlbGF0ZWQuIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUsIHNvIHRoYXQgd2lsbCBndWlkZSBtZS5cblxuVG8gZ2V0IHNvbWUgY29udGV4dCwgSSdsbCB6ZXJvIGluIG9uIHRoZSBhcmVhIG9mIHRoZSBjb2RlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdGhlIGZhaWx1cmUuIEknbGwgcmVhZCBhcm91bmQgbGluZXMgNTY1MCB0byA1NzUwLCBhbmQgYWxzbyBsaW5lcyA1NzAwLTU4MzMgYW5kIHRoZWlyIGVuY2xvc2luZyBmdW5jdGlvbiBpZiB0aGF0IGdpdmVzIG1lIGVub3VnaCBjbHVlcy4gQnkgZm9jdXNpbmcgb24gdGhpcyByZWdpb24sIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIHRoYXQgcmVsYXRlIHRvIHRoZXNlIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0Ni43NzQ1Mjk2NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NjgwOlxcdFxcdGlmIChlcnIpIHtcXG41NjgxOlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIG1iYWxsb2MgKCVkKVxcXCIsXFxuNTY4MjpcXHRcXHRcXHRcXHQgZXJyKTtcXG41NjgzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50NTtcXG41Njg0OlxcdFxcdH1cXG41Njg1OlxcdFxcbjU2ODY6XFx0XFx0LypcXG41Njg3OlxcdFxcdCAqIFdlIGNhbiBvbmx5IHNldCB1cCB0aGUgam91cm5hbCBjb21taXQgY2FsbGJhY2sgb25jZVxcbjU2ODg6XFx0XFx0ICogbWJhbGxvYyBpcyBpbml0aWFsaXplZFxcbjU2ODk6XFx0XFx0ICovXFxuNTY5MDpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuNTY5MTpcXHRcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9jb21taXRfY2FsbGJhY2sgPVxcbjU2OTI6XFx0XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2NvbW1pdF9jYWxsYmFjaztcXG41NjkzOlxcdFxcbjU2OTQ6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmxleF9iZyhzYikpXFxuNTY5NTpcXHRcXHRcXHRpZiAoIWV4dDRfZmlsbF9mbGV4X2luZm8oc2IpKSB7XFxuNTY5NjpcXHRcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTY5NzpcXHRcXHRcXHRcXHQgICAgICAgXFxcInVuYWJsZSB0byBpbml0aWFsaXplIFxcXCJcXG41Njk4OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiZmxleF9iZyBtZXRhIGluZm8hXFxcIik7XFxuNTY5OTpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjU3MDA6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ2O1xcbjU3MDE6XFx0XFx0XFx0fVxcbjU3MDI6XFx0XFxuNTcwMzpcXHRcXHRlcnIgPSBleHQ0X3JlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IsIGZpcnN0X25vdF96ZXJvZWQpO1xcbjU3MDQ6XFx0XFx0aWYgKGVycilcXG41NzA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50NjtcXG41NzA2OlxcdFxcbjU3MDc6XFx0XFx0ZXJyID0gZXh0NF9pbml0X29ycGhhbl9pbmZvKHNiKTtcXG41NzA4OlxcdFxcdGlmIChlcnIpXFxuNTcwOTpcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDc7XFxuNTcxMDpcXHQjaWZkZWYgQ09ORklHX1FVT1RBXFxuNTcxMTpcXHRcXHQvKiBFbmFibGUgcXVvdGEgdXNhZ2UgZHVyaW5nIG1vdW50LiAqL1xcbjU3MTI6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfcXVvdGEoc2IpIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuNTcxMzpcXHRcXHRcXHRlcnIgPSBleHQ0X2VuYWJsZV9xdW90YXMoc2IpO1xcbjU3MTQ6XFx0XFx0XFx0aWYgKGVycilcXG41NzE1OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50ODtcXG41NzE2OlxcdFxcdH1cXG41NzE3OlxcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXFxuNTcxODpcXHRcXG41NzE5OlxcdFxcdC8qXFxuNTcyMDpcXHRcXHQgKiBTYXZlIHRoZSBvcmlnaW5hbCBiZGV2IG1hcHBpbmcncyB3Yl9lcnIgdmFsdWUgd2hpY2ggY291bGQgYmVcXG41NzIxOlxcdFxcdCAqIHVzZWQgdG8gZGV0ZWN0IHRoZSBtZXRhZGF0YSBhc3luYyB3cml0ZSBlcnJvci5cXG41NzIyOlxcdFxcdCAqL1xcbjU3MjM6XFx0XFx0ZXJyc2VxX2NoZWNrX2FuZF9hZHZhbmNlKFxcdTAwMjZzYi1cXHUwMDNlc19iZGV2LVxcdTAwM2ViZF9tYXBwaW5nLVxcdTAwM2V3Yl9lcnIsXFxuNTcyNDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNiaS1cXHUwMDNlc19iZGV2X3diX2Vycik7XFxuNTcyNTpcXHRcXHRFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSB8PSBFWFQ0X09SUEhBTl9GUztcXG41NzI2OlxcdFxcdGV4dDRfb3JwaGFuX2NsZWFudXAoc2IsIGVzKTtcXG41NzI3OlxcdFxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjY9IH5FWFQ0X09SUEhBTl9GUztcXG41NzI4OlxcdFxcdC8qXFxuNTcyOTpcXHRcXHQgKiBVcGRhdGUgdGhlIGNoZWNrc3VtIGFmdGVyIHVwZGF0aW5nIGZyZWUgc3BhY2UvaW5vZGUgY291bnRlcnMgYW5kXFxuNTczMDpcXHRcXHQgKiBleHQ0X29ycGhhbl9jbGVhbnVwLiBPdGhlcndpc2UgdGhlIHN1cGVyYmxvY2sgY2FuIGhhdmUgYW4gaW5jb3JyZWN0XFxuNTczMTpcXHRcXHQgKiBjaGVja3N1bSBpbiB0aGUgYnVmZmVyIGNhY2hlIHVudGlsIGl0IGlzIHdyaXR0ZW4gb3V0IGFuZFxcbjU3MzI6XFx0XFx0ICogZTJmc3Byb2dzIHByb2dyYW1zIHRyeWluZyB0byBvcGVuIGEgZmlsZSBzeXN0ZW0gaW1tZWRpYXRlbHlcXG41NzMzOlxcdFxcdCAqIGFmdGVyIGl0IGlzIG1vdW50ZWQgY2FuIGZhaWwuXFxuNTczNDpcXHRcXHQgKi9cXG41NzM1OlxcdFxcdGV4dDRfc3VwZXJibG9ja19jc3VtX3NldChzYik7XFxuNTczNjpcXHRcXHRpZiAobmVlZHNfcmVjb3ZlcnkpIHtcXG41NzM3OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFxcXCJyZWNvdmVyeSBjb21wbGV0ZVxcXCIpO1xcbjU3Mzg6XFx0XFx0XFx0ZXJyID0gZXh0NF9tYXJrX3JlY292ZXJ5X2NvbXBsZXRlKHNiLCBlcyk7XFxuNTczOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU3NDA6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ5O1xcbjU3NDE6XFx0XFx0fVxcbjU3NDI6XFx0XFxuNTc0MzpcXHRcXHRpZiAodGVzdF9vcHQoc2IsIERJU0NBUkQpIFxcdTAwMjZcXHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXFx1MDAzZXNfYmRldikpIHtcXG41NzQ0OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXFxuNTc0NTpcXHRcXHRcXHRcXHQgXFxcIm1vdW50aW5nIHdpdGggXFxcXFxcXCJkaXNjYXJkXFxcXFxcXCIgb3B0aW9uLCBidXQgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGRpc2NhcmRcXFwiKTtcXG41NzQ2OlxcdFxcdFxcdGNsZWFyX29wdChzYiwgRElTQ0FSRCk7XFxuNTc0NzpcXHRcXHR9XFxuNTc0ODpcXHRcXG41NzQ5OlxcdFxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0Ni43NzQ4NzMwNjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3Nzg3MjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipUcmFjaW5nIEV4ZWN1dGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gaW5pdGlhdGVzIGJlZm9yZSBhIHNwZWNpZmljIGxpbmUgb2YgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmUgNTY4MC4gSXQncyBhIGNvbW1vbiBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgdGVjaG5pcXVlLiBJbnN0ZWFkIG9mIGJsaW5kbHkgc2VhcmNoaW5nIHRoZSBlbnRpcmUgY29kZWJhc2UsIEknbGwgdXNlIGEgc3RyYXRlZ2ljIGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgdG8gaW52ZXN0aWdhdGUgaXMgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUxNTAtNTIwMC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBsaW5lIDU2ODAgc3RhcnRzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IHNlY3Rpb24gY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBleGVjdXRpb24gcGF0aCBhbmQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gVGhpcyBpcyBhIGNvbW1vbiBtZXRob2Qgb2YgcmV2ZXJzZSBlbmdpbmVlcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjQ4Ljg1Mjc1MDM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTUwOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuNTE1MTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG41MTUyOlxcdFxcdGludCBibG9ja3NpemU7XFxuNTE1MzpcXHRcXG41MTU0OlxcdFxcdGJsb2Nrc2l6ZSA9IHNiX21pbl9ibG9ja3NpemUoc2IsIEVYVDRfTUlOX0JMT0NLX1NJWkUpO1xcbjUxNTU6XFx0XFx0aWYgKCFibG9ja3NpemUpIHtcXG41MTU2OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcInVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxcIik7XFxuNTE1NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTU4OlxcdFxcdH1cXG41MTU5OlxcdFxcbjUxNjA6XFx0XFx0LypcXG41MTYxOlxcdFxcdCAqIFRoZSBleHQ0IHN1cGVyYmxvY2sgd2lsbCBub3QgYmUgYnVmZmVyIGFsaWduZWQgZm9yIG90aGVyIHRoYW4gMWtCXFxuNTE2MjpcXHRcXHQgKiBibG9jayBzaXplcy4gIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSBidWZmZXIgc3RhcnQuXFxuNTE2MzpcXHRcXHQgKi9cXG41MTY0OlxcdFxcdGlmIChibG9ja3NpemUgIT0gRVhUNF9NSU5fQkxPQ0tfU0laRSkge1xcbjUxNjU6XFx0XFx0XFx0bG9naWNhbF9zYl9ibG9jayA9IHNiaS1cXHUwMDNlc19zYl9ibG9jayAqIEVYVDRfTUlOX0JMT0NLX1NJWkU7XFxuNTE2NjpcXHRcXHRcXHRvZmZzZXQgPSBkb19kaXYobG9naWNhbF9zYl9ibG9jaywgYmxvY2tzaXplKTtcXG41MTY3OlxcdFxcdH0gZWxzZSB7XFxuNTE2ODpcXHRcXHRcXHRsb2dpY2FsX3NiX2Jsb2NrID0gc2JpLVxcdTAwM2VzX3NiX2Jsb2NrO1xcbjUxNjk6XFx0XFx0fVxcbjUxNzA6XFx0XFxuNTE3MTpcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWRfdW5tb3ZhYmxlKHNiLCBsb2dpY2FsX3NiX2Jsb2NrKTtcXG41MTcyOlxcdFxcdGlmIChJU19FUlIoYmgpKSB7XFxuNTE3MzpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJ1bmFibGUgdG8gcmVhZCBzdXBlcmJsb2NrXFxcIik7XFxuNTE3NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihiaCk7XFxuNTE3NTpcXHRcXHR9XFxuNTE3NjpcXHRcXHQvKlxcbjUxNzc6XFx0XFx0ICogTm90ZTogc19lcyBtdXN0IGJlIGluaXRpYWxpemVkIGFzIHNvb24gYXMgcG9zc2libGUgYmVjYXVzZVxcbjUxNzg6XFx0XFx0ICogICAgICAgc29tZSBleHQ0IG1hY3JvLWluc3RydWN0aW9ucyBkZXBlbmQgb24gaXRzIHZhbHVlXFxuNTE3OTpcXHRcXHQgKi9cXG41MTgwOlxcdFxcdGVzID0gKHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICopIChiaC1cXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcXG41MTgxOlxcdFxcdHNiaS1cXHUwMDNlc19lcyA9IGVzO1xcbjUxODI6XFx0XFx0c2ItXFx1MDAzZXNfbWFnaWMgPSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19tYWdpYyk7XFxuNTE4MzpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfbWFnaWMgIT0gRVhUNF9TVVBFUl9NQUdJQykge1xcbjUxODQ6XFx0XFx0XFx0aWYgKCFzaWxlbnQpXFxuNTE4NTpcXHRcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJWRlM6IENhbid0IGZpbmQgZXh0NCBmaWxlc3lzdGVtXFxcIik7XFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcdH1cXG41MTg4OlxcdFxcbjUxODk6XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2xvZ19ibG9ja19zaXplKSBcXHUwMDNlXFxuNTE5MDpcXHRcXHQgICAgKEVYVDRfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XFxuNTE5MTpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTE5MjpcXHRcXHRcXHRcXHQgXFxcIkludmFsaWQgbG9nIGJsb2NrIHNpemU6ICV1XFxcIixcXG41MTkzOlxcdFxcdFxcdFxcdCBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19sb2dfYmxvY2tfc2l6ZSkpO1xcbjUxOTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE5NTpcXHRcXHR9XFxuNTE5NjpcXHRcXHRpZiAobGUzMl90b19jcHUoZXMtXFx1MDAzZXNfbG9nX2NsdXN0ZXJfc2l6ZSkgXFx1MDAzZVxcbjUxOTc6XFx0XFx0ICAgIChFWFQ0X01BWF9DTFVTVEVSX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XFxuNTE5ODpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTE5OTpcXHRcXHRcXHRcXHQgXFxcIkludmFsaWQgbG9nIGNsdXN0ZXIgc2l6ZTogJXVcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0OC44NTQwMzAzMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjgyNzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqRGVidWdnaW5nIFRpbWUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGlzc3VlIGlzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOyBJIHN1c3BlY3QgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIFJpZ2h0LCBzbywgcGVyIHRoZSB1c3VhbCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgbGluZXMgNTEzMC01MTU1LiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgbG9naWMsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHRvIGRpYWdub3NlIHRoaXMgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjUxLjE4Njg2MjA0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMzA6XFx0XFx0XFx0ZXJyX3N0ciA9IFxcXCJlbmNyeXB0XFxcIjtcXG41MTMxOlxcdFxcbjUxMzI6XFx0XFx0aWYgKCFlcnJfc3RyKSB7XFxuNTEzMzpcXHRcXHRcXHRleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzYik7XFxuNTEzNDpcXHRcXHR9IGVsc2UgaWYgKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSkge1xcbjUxMzU6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcXFwiYnMoJWx1KSBcXHUwMDNlIHBzKCVsdSkgdW5zdXBwb3J0ZWQgZm9yICVzXFxcIixcXG41MTM2OlxcdFxcdFxcdFxcdCBzYi1cXHUwMDNlc19ibG9ja3NpemUsIFBBR0VfU0laRSwgZXJyX3N0cik7XFxuNTEzNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTM4OlxcdFxcdH1cXG41MTM5OlxcdFxcbjUxNDA6XFx0XFx0cmV0dXJuIDA7XFxuNTE0MTpcXHR9XFxuNTE0MjpcXHRcXG41MTQzOlxcdHN0YXRpYyBpbnQgZXh0NF9sb2FkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCAqbHNiLFxcbjUxNDQ6XFx0XFx0XFx0XFx0ICAgaW50IHNpbGVudClcXG41MTQ1OlxcdHtcXG41MTQ2OlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjUxNDc6XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzO1xcbjUxNDg6XFx0XFx0ZXh0NF9mc2Jsa190IGxvZ2ljYWxfc2JfYmxvY2s7XFxuNTE0OTpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7XFxuNTE1MDpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjUxNTE6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNTE1MjpcXHRcXHRpbnQgYmxvY2tzaXplO1xcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHRibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBFWFQ0X01JTl9CTE9DS19TSVpFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6NTEuMTg3MjIzOTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjQ1MTA4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBTdXBlcmJsb2NrIExvYWRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGV4dDRfbG9hZF9zdXBlcmAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGhlIHN1cGVyYmxvY2ssIGEgY3JpdGljYWwgc3RydWN0dXJlLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0IGFuZCB0aGUgbGluZSBudW1iZXJzLCBJJ20gcHJldHR5IHN1cmUgSSBrbm93IHdoZXJlIHRoYXQgY29kZSBibG9jayBpcy4gSXQgbG9va3MgbGlrZSBpdCBzcGFucyBmcm9tIGxpbmUgNTE0MyB0byBhYm91dCA1ODMzLCByb3VnaGx5LiBUaGUgbGFiZWxzIGBmYWlsZWRfbW91bnQ6YCBhbmQgYG91dF9mYWlsOmAgbGlrZWx5IG1hcmsgdGhlIGV4aXQgcG9pbnRzIGZvciBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2JpLVx1MDAzZXNfZXJyX3JlcG9ydGAgdGltZXIgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hlbiBhbmQgaG93IHRoZXNlIHRpbWVycyBhcmUgc2V0IHVwLCBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkLiBBIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4gSXQnbGwgZ2l2ZSBtZSBhIGxpc3Qgb2YgYWxsIGluc3RhbmNlcyBvZiBgc19lcnJfcmVwb3J0YCB0aGF0IEkgY2FuIHRoZW4gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjU1LjExMTczNjkyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTYyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNfZXJyX3JlcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzQ4LVxcdC8qIHRpbWVyIGZvciBwZXJpb2RpYyBlcnJvciBzdGF0cyBwcmludGluZyAqL1xcbmZzL2V4dDQvZXh0NC5oOjE3NDk6XFx0c3RydWN0IHRpbWVyX2xpc3Qgc19lcnJfcmVwb3J0O1xcbmZzL2V4dDQvZXh0NC5oOjE3NTA6XFx0LyogdGltZW91dCBpbiBzZWNvbmRzIGZvciBzX2Vycl9yZXBvcnQ7IDAgZGlzYWJsZXMgdGhlIHRpbWVyLiAqL1xcbmZzL2V4dDQvZXh0NC5oOjE3NTE6XFx0dW5zaWduZWQgbG9uZyBzX2Vycl9yZXBvcnRfc2VjO1xcbmZzL2V4dDQvZXh0NC5oLTE3NTItXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMjItXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZnMvZXh0NC9zdXBlci5jLTM3MDYte1xcbmZzL2V4dDQvc3VwZXIuYzozNzA3OlxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTM3MDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxcbmZzL2V4dDQvc3VwZXIuYzozNzQ2OlxcdGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxcbmZzL2V4dDQvc3VwZXIuYzo1NDU5OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbywgMCk7XFxuZnMvZXh0NC9zdXBlci5jLTU0NjAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJvcl9sb2NrKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzQ5LVxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NzUwOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDUqNjA7XFx0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NTE6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NTMtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NzU0OlxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuZnMvZXh0NC9zdXBlci5jLTU3NTUtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MTEtXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTU4MTMtXFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MjUwPXN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cXHRcXHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24ndCBiZWVuXFxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XFx0XFx0ICogc3RhcnRlZCBhbHJlYWR5IGFuZCBzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cXHRcXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcXHRcXHRpZiAoIWVzLVxcdTAwM2VzX2Vycm9yX2NvdW50IFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjYzMTQ6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NjMxNTpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTYzMTYtXFx0XFx0bGUzMl9hZGRfY3B1KFxcdTAwMjZlcy1cXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVxcdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9MTM0PXN0YXRpYyBzc2l6ZV90IGVycl9yZXBvcnRfc2VjX3N0b3JlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYy0xNDctXFxuZnMvZXh0NC9zeXNmcy5jOjE0ODpcXHRpZiAoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjID09IHQpXFx0XFx0Lypub3RoaW5nIHRvIGRvKi9cXG5mcy9leHQ0L3N5c2ZzLmMtMTQ5LVxcdFxcdGdvdG8gb3V0O1xcbmZzL2V4dDQvc3lzZnMuYzoxNTA6XFx0ZWxzZSBpZiAoIXNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyBcXHUwMDI2XFx1MDAyNiB0KSB7XFxuZnMvZXh0NC9zeXNmcy5jOjE1MTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsIHByaW50X2RhaWx5X2Vycm9yX2luZm8sIDApO1xcbmZzL2V4dDQvc3lzZnMuYzoxNTI6XFx0fSBlbHNlIGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgXFx1MDAyNlxcdTAwMjYgIXQpIHtcXG5mcy9leHQ0L3N5c2ZzLmM6MTUzOlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zeXNmcy5jLTE1NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYy0xNTYtXFxuZnMvZXh0NC9zeXNmcy5jOjE1NzpcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSB0O1xcbmZzL2V4dDQvc3lzZnMuYzoxNTg6XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N5c2ZzLmMtMTU5LVxcbi0tXFxuZnMvZXh0NC9zeXNmcy5jPTI0OT1FWFQ0X0FUVFJfT0ZGU0VUKG1iX2Jlc3RfYXZhaWxfbWF4X3RyaW1fb3JkZXIsIDA2NDQsIG1iX29yZGVyLFxcbmZzL2V4dDQvc3lzZnMuYy0yNTAtXFx0XFx0IGV4dDRfc2JfaW5mbywgc19tYl9iZXN0X2F2YWlsX21heF90cmltX29yZGVyKTtcXG5mcy9leHQ0L3N5c2ZzLmM6MjUxOkVYVDRfQVRUUl9PRkZTRVQoZXJyX3JlcG9ydF9zZWMsIDA2NDQsIGVycl9yZXBvcnRfc2VjLCBleHQ0X3NiX2luZm8sIHNfZXJyX3JlcG9ydF9zZWMpO1xcbmZzL2V4dDQvc3lzZnMuYy0yNTItRVhUNF9SV19BVFRSX1NCSV9VSShpbm9kZV9nb2FsLCBzX2lub2RlX2dvYWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo1NS4yNDY3MDYxMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA5NTgyODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBleHQ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIGZyb20gYHRpbWVyX2RlbGV0ZV9zeW5jYCB0byBgdGltZXJfc2h1dGRvd25fc3luY2AgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBpbiB0aGUgYGZhaWxlZF9tb3VudDNgIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgZXh0NF9zYl9pbmZvYCBhbmQgaXRzIGFzc29jaWF0ZWQgYHNfZXJyX3JlcG9ydGAgdGltZXIuXG5cbkkgcmVtZW1iZXIgdGhhdCBgdGltZXJfc2h1dGRvd25fc3luY2AgcHJldmVudHMgdGhlIHRpbWVyIGZyb20gYmVpbmcgcmUtYXJtZWQsIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjdXJyZW50IGNhbGxiYWNrIHRvIGZpbmlzaC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmc6IGNvdWxkIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCwgd2hpY2ggaXMgdGhlIGNhbGxiYWNrIGZvciBgc19lcnJfcmVwb3J0YCwgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciBhZnRlciBpdCdzIGJlZW4gZGVsZXRlZD8gSSBjaGVjayBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AgYW5kIHllcCwgdGhlcmUncyBhIGBtb2RfdGltZXJgIGNhbGwgaW4gdGhlcmUsIHJlLWFybWluZyB0aGUgdGltZXIgYmFzZWQgb24gYHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjYC4gU28sIHRoZSBvbGQgY29kZSwgdXNpbmcgYHRpbWVyX2RlbGV0ZV9zeW5jYCwgaGFkIGEgKmRlZmluaXRlKiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIElmIHRoZSB0aW1lciB3YXMgZGVsZXRlZCB3aGlsZSB0aGUgY2FsbGJhY2sgd2FzIHJ1bm5pbmcsIGl0IGNvdWxkIHBvdGVudGlhbGx5IHJlLWFybSB0aGUgdGltZXIganVzdCBhZnRlciB0aGUgZGVsZXRlIGZpbmlzaGVkLCBjcmVhdGluZyBhIFVzZS1BZnRlci1GcmVlIHNpdHVhdGlvbiBvbiBgc2JpYCB3aGVuIGl0IGdldHMgZnJlZWQuIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBhdm9pZHMgdGhhdCByZS1hcm1pbmcuIEdvb2QgY2F0Y2guXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSSBhcHBseSBteSB0cmlhZ2UgY3JpdGVyaWE6XG5cbiogICAqKlJlYWNoYWJpbGl0eToqKiBFeHQ0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciB1c2VzIGl0IGV4dGVuc2l2ZWx5LCBpbmNsdWRpbmcgbW91bnRpbmcgaW50ZW50aW9uYWxseSBjb3JydXB0ZWQgaW1hZ2VzIHRvIHRyaWdnZXIgbW91bnQgZmFpbHVyZXMuIFRoZSBgZmFpbGVkX21vdW50M2AgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuKiAgICoqQ29kZSBNb2RpZmljYXRpb246KiogWWVzLCBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQuIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgaXMgYSBjaGFuZ2UgZnJvbSBkZWxldGUgdG8gc2h1dGRvd24uIFRoaXMgbWVhbnMgSSBjYW4ndCBqdXN0IGJsaW5kbHkgdHJ1c3QgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgaWYgdGhlIGNvZGUgY2hhbmdlcywgaXQgKm11c3QqIGJlIGZ1enplZC4gQW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBFeHQ0IGlzIGEgY29yZSBWRlMgZmlsZXN5c3RlbS5cblxuU28sIHRoaXMgaGl0cyBteSBmdXp6aW5nIGNyaXRlcmlhIHBlcmZlY3RseS4gSSBhbSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBXb3J0aEZ1enppbmcgPSB0cnVlLiBUaW1lIHRvIGNoZWNrIHRoZSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MuIEkgd2lsbCB3YW50IHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBuZWFyIG9yIGluIGBfX2V4dDRfZmlsbF9zdXBlcmAgdG8gc2VlIHdoZXJlIHRoZSBleGFjdCBjaGFuZ2UgdGFrZXMgcGxhY2UsIGFuZCBob3cgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgY2hhbmdlcy4gSSB3aWxsIGNoZWNrIGxpbmUgNTM1NyBpbiBgZnMvZXh0NC9zdXBlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDEuMzQyNTM3NjQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTM1NTpcXHR9XFxuNTM1NjpcXHRcXG41MzU3OlxcdHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjUzNTg6XFx0e1xcbjUzNTk6XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gTlVMTDtcXG41MzYwOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjUzNjE6XFx0XFx0ZXh0NF9mc2Jsa190IGxvZ2ljYWxfc2JfYmxvY2s7XFxuNTM2MjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJvb3Q7XFxuNTM2MzpcXHRcXHRpbnQgbmVlZHNfcmVjb3Zlcnk7XFxuNTM2NDpcXHRcXHRpbnQgZXJyO1xcbjUzNjU6XFx0XFx0ZXh0NF9ncm91cF90IGZpcnN0X25vdF96ZXJvZWQ7XFxuNTM2NjpcXHRcXHRzdHJ1Y3QgZXh0NF9mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG41MzY3OlxcdFxcdGludCBzaWxlbnQgPSBmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9TSUxFTlQ7XFxuNTM2ODpcXHRcXG41MzY5OlxcdFxcdC8qIFNldCBkZWZhdWx0cyBmb3IgdGhlIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgc2V0IGR1cmluZyBwYXJzaW5nICovXFxuNTM3MDpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZXNwZWMgXFx1MDAyNiBFWFQ0X1NQRUNfSk9VUk5BTF9JT1BSSU8pKVxcbjUzNzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2Vqb3VybmFsX2lvcHJpbyA9IEVYVDRfREVGX0pPVVJOQUxfSU9QUklPO1xcbjUzNzI6XFx0XFxuNTM3MzpcXHRcXHRzYmktXFx1MDAzZXNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgPSBFWFQ0X0RFRl9JTk9ERV9SRUFEQUhFQURfQkxLUztcXG41Mzc0OlxcdFxcdHNiaS1cXHUwMDNlc19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQgPVxcbjUzNzU6XFx0XFx0XFx0cGFydF9zdGF0X3JlYWQoc2ItXFx1MDAzZXNfYmRldiwgc2VjdG9yc1tTVEFUX1dSSVRFXSk7XFxuNTM3NjpcXHRcXG41Mzc3OlxcdFxcdGVyciA9IGV4dDRfbG9hZF9zdXBlcihzYiwgXFx1MDAyNmxvZ2ljYWxfc2JfYmxvY2ssIHNpbGVudCk7XFxuNTM3ODpcXHRcXHRpZiAoZXJyKVxcbjUzNzk6XFx0XFx0XFx0Z290byBvdXRfZmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDEuMzQyODg3NDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzEzNzIzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEZWJ1Z2dpbmcgdGhlIGV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBsaW5lIDU4MTIuIFRoYXQgbGluZSBjYWxscyBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyByZWxhdGVkIHRvIGVycm9yIHJlcG9ydGluZyBkdXJpbmcgdGhlIGZpbGVzeXN0ZW0ncyBzdGFydHVwLlxuXG5Ob3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBfX2V4dDRfZmlsbF9zdXBlcmAuIEFmdGVyIGEgcXVpY2sgbG9va3VwLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZXh0NF9maWxsX3N1cGVyYC5cblxuU2luY2UgSSBrbm93IGBleHQ0X2ZpbGxfc3VwZXJgIGNhbGxzIGBfX2V4dDRfZmlsbF9zdXBlcmAsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU4MzUgaW4gYGV4dDRfZmlsbF9zdXBlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbnRyb2wgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpbiB3aGljaCB0aGUgZXJyb3IgaXMgYmVpbmcgcmVwb3J0ZWQuIEknbSBob3BpbmcgdG8gZ2V0IG1vcmUgY29udGV4dCBvbiBob3cgdGhpcyBjYWxsIHNlcXVlbmNlIGlzIHN0cnVjdHVyZWQgdG8gc2VlIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZSBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNTowNC4yMTQyNjIxODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODM1OlxcdHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG41ODM2OlxcdHtcXG41ODM3OlxcdFxcdHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbjU4Mzg6XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpO1xcbjU4Mzk6XFx0XFx0Y29uc3QgY2hhciAqZGVzY3I7XFxuNTg0MDpcXHRcXHRpbnQgcmV0O1xcbjU4NDE6XFx0XFxuNTg0MjpcXHRcXHRzYmkgPSBleHQ0X2FsbG9jX3NiaShzYik7XFxuNTg0MzpcXHRcXHRpZiAoIXNiaSlcXG41ODQ0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjU4NDU6XFx0XFxuNTg0NjpcXHRcXHRmYy1cXHUwMDNlc19mc19pbmZvID0gc2JpO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHQvKiBDbGVhbnVwIHN1cGVyYmxvY2sgbmFtZSAqL1xcbjU4NDk6XFx0XFx0c3RycmVwbGFjZShzYi1cXHUwMDNlc19pZCwgJy8nLCAnIScpO1xcbjU4NTA6XFx0XFxuNTg1MTpcXHRcXHRzYmktXFx1MDAzZXNfc2JfYmxvY2sgPSAxO1xcdC8qIERlZmF1bHQgc3VwZXIgYmxvY2sgbG9jYXRpb24gKi9cXG41ODUyOlxcdFxcdGlmIChjdHgtXFx1MDAzZXNwZWMgXFx1MDAyNiBFWFQ0X1NQRUNfc19zYl9ibG9jaylcXG41ODUzOlxcdFxcdFxcdHNiaS1cXHUwMDNlc19zYl9ibG9jayA9IGN0eC1cXHUwMDNlc19zYl9ibG9jaztcXG41ODU0OlxcdFxcbjU4NTU6XFx0XFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcXG41ODU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjU4NTc6XFx0XFx0XFx0Z290byBmcmVlX3NiaTtcXG41ODU4OlxcdFxcbjU4NTk6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTg2MDpcXHRcXHRcXHRpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKVxcbjU4NjE6XFx0XFx0XFx0XFx0ZGVzY3IgPSBcXFwiIGpvdXJuYWxsZWQgZGF0YSBtb2RlXFxcIjtcXG41ODYyOlxcdFxcdFxcdGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX09SREVSRURfREFUQSlcXG41ODYzOlxcdFxcdFxcdFxcdGRlc2NyID0gXFxcIiBvcmRlcmVkIGRhdGEgbW9kZVxcXCI7XFxuNTg2NDpcXHRcXHRcXHRlbHNlXFxuNTg2NTpcXHRcXHRcXHRcXHRkZXNjciA9IFxcXCIgd3JpdGViYWNrIGRhdGEgbW9kZVxcXCI7XFxuNTg2NjpcXHRcXHR9IGVsc2VcXG41ODY3OlxcdFxcdFxcdGRlc2NyID0gXFxcIm91dCBqb3VybmFsXFxcIjtcXG41ODY4OlxcdFxcbjU4Njk6XFx0XFx0aWYgKF9fX3JhdGVsaW1pdChcXHUwMDI2ZXh0NF9tb3VudF9tc2dfcmF0ZWxpbWl0LCBcXFwiRVhUNC1mcyBtb3VudFxcXCIpKVxcbjU4NzA6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXFxcIm1vdW50ZWQgZmlsZXN5c3RlbSAlcFUgJXMgd2l0aCVzLiBcXFwiXFxuNTg3MTpcXHRcXHRcXHRcXHQgXFxcIlF1b3RhIG1vZGU6ICVzLlxcXCIsIFxcdTAwMjZzYi1cXHUwMDNlc191dWlkLFxcbjU4NzI6XFx0XFx0XFx0XFx0IHNiX3Jkb25seShzYikgPyBcXFwicm9cXFwiIDogXFxcInIvd1xcXCIsIGRlc2NyLFxcbjU4NzM6XFx0XFx0XFx0XFx0IGV4dDRfcXVvdGFfbW9kZShzYikpO1xcbjU4NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA0LjIxNDUxODYwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcwMTA4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdGFrZSBhIGxvb2sgYXQgYHByaW50X2RhaWx5X2Vycm9yX2luZm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLCBhbmQgdGhhdCBmdW5jdGlvbiBzb3VuZHMgbGlrZSBpdCBtaWdodCBob2xkIHNvbWUgcmVsZXZhbnQgY2x1ZXMgdG8gdGhlIGlzc3VlLiBUaGVuLCBJIG5lZWQgdG8gZ2V0IG1vcmUgZ3JhbnVsYXIuIExpbmUgMzcwNSB0byAzNzUwIGluIGBmcy9leHQ0L3N1cGVyLmNgLi4uIHRoYXQgc2VjdGlvbiBvZiBjb2RlIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIGluIHRoZSBsb3dlciBsZXZlbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgY2h1bmsgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA2LjI4NDYzMDQwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3MDU6XFx0dm9pZCBwcmludF9kYWlseV9lcnJvcl9pbmZvKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjM3MDY6XFx0e1xcbjM3MDc6XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcXG4zNzA4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXFx1MDAzZXNfc2I7XFxuMzcwOTpcXHRcXHRzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBzYmktXFx1MDAzZXNfZXM7XFxuMzcxMDpcXHRcXG4zNzExOlxcdFxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudClcXG4zNzEyOlxcdFxcdFxcdC8qIGZzY2sgbmV3ZXIgdGhhbiB2MS40MS4xMyBpcyBuZWVkZWQgdG8gY2xlYW4gdGhpcyBjb25kaXRpb24uICovXFxuMzcxMzpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9OT1RJQ0UsIFxcXCJlcnJvciBjb3VudCBzaW5jZSBsYXN0IGZzY2s6ICV1XFxcIixcXG4zNzE0OlxcdFxcdFxcdFxcdCBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkpO1xcbjM3MTU6XFx0XFx0aWYgKGVzLVxcdTAwM2VzX2ZpcnN0X2Vycm9yX3RpbWUpIHtcXG4zNzE2OlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwiRVhUNC1mcyAoJXMpOiBpbml0aWFsIGVycm9yIGF0IHRpbWUgJWxsdTogJS4qczolZFxcXCIsXFxuMzcxNzpcXHRcXHRcXHQgICAgICAgc2ItXFx1MDAzZXNfaWQsXFxuMzcxODpcXHRcXHRcXHQgICAgICAgZXh0NF9nZXRfdHN0YW1wKGVzLCBzX2ZpcnN0X2Vycm9yX3RpbWUpLFxcbjM3MTk6XFx0XFx0XFx0ICAgICAgIChpbnQpIHNpemVvZihlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jKSxcXG4zNzIwOlxcdFxcdFxcdCAgICAgICBlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jLFxcbjM3MjE6XFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2ZpcnN0X2Vycm9yX2xpbmUpKTtcXG4zNzIyOlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pXFxuMzcyMzpcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9DT05UIFxcXCI6IGlub2RlICV1XFxcIixcXG4zNzI0OlxcdFxcdFxcdFxcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pKTtcXG4zNzI1OlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaylcXG4zNzI2OlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogYmxvY2sgJWxsdVxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpXFxuMzcyNzpcXHRcXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfZmlyc3RfZXJyb3JfYmxvY2spKTtcXG4zNzI4OlxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIlxcXFxuXFxcIik7XFxuMzcyOTpcXHRcXHR9XFxuMzczMDpcXHRcXHRpZiAoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl90aW1lKSB7XFxuMzczMTpcXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcIkVYVDQtZnMgKCVzKTogbGFzdCBlcnJvciBhdCB0aW1lICVsbHU6ICUuKnM6JWRcXFwiLFxcbjM3MzI6XFx0XFx0XFx0ICAgICAgIHNiLVxcdTAwM2VzX2lkLFxcbjM3MzM6XFx0XFx0XFx0ICAgICAgIGV4dDRfZ2V0X3RzdGFtcChlcywgc19sYXN0X2Vycm9yX3RpbWUpLFxcbjM3MzQ6XFx0XFx0XFx0ICAgICAgIChpbnQpIHNpemVvZihlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMpLFxcbjM3MzU6XFx0XFx0XFx0ICAgICAgIGVzLVxcdTAwM2VzX2xhc3RfZXJyb3JfZnVuYyxcXG4zNzM2OlxcdFxcdFxcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2xpbmUpKTtcXG4zNzM3OlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2lubylcXG4zNzM4OlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogaW5vZGUgJXVcXFwiLFxcbjM3Mzk6XFx0XFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2xhc3RfZXJyb3JfaW5vKSk7XFxuMzc0MDpcXHRcXHRcXHRpZiAoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaylcXG4zNzQxOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogYmxvY2sgJWxsdVxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpXFxuMzc0MjpcXHRcXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaykpO1xcbjM3NDM6XFx0XFx0XFx0cHJpbnRrKEtFUk5fQ09OVCBcXFwiXFxcXG5cXFwiKTtcXG4zNzQ0OlxcdFxcdH1cXG4zNzQ1OlxcdFxcbjM3NDY6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcXG4zNzQ3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuMzc0ODpcXHR9XFxuMzc0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDYuMjg1MjEwMTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjQyOTI5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIGV4dDQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkga25vdyB0aGVzZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHQ0LiBMZXQncyBzdGFydCB3aXRoIGEgbG9vayBhdCBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGV4dDQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDcuODQ5NTA2NjM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA3Ljg0OTY4NDk2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODA1OTQ2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgYENPTkZJR2AgdmFsdWUgaXMgc2V0IHRvIGBFWFQ0X0ZTYCwgd2hpY2ggdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBFWFQ0IGZpbGVzeXN0ZW0uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBGb2N1c1N5bWJvbHNgIGhlcmUsIGFuZCB0aG9zZSBhcmUgYF9fZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGFuZCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilgLiBUaGVuIEkgc2VlIGBzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpYC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgdXNlZnVsIHZhcmlhdGlvbi4gYHZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClgIGlzIHRoZSBvdGhlciBmb2N1cywgd2hpY2ggbG9va3MgbGlrZSBhbiBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uIE5vdywgYGV4dDRfZmlsbF9zdXBlcmAgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiwgc28gSSdtIHRoaW5raW5nIGl0J3MgZWl0aGVyIHBhcnQgb2YgYGV4dDRfY29udGV4dF9vcHNgIG9yIGlzIGNhbGxlZCBieSBgZXh0NF9nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZXh0NF9maWxsX3N1cGVyYCBpcyBhY3R1YWxseSBjYWxsZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCdzIHNlZSBob3cgdGhhdCdzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTEuNjU1NjM1NjQ3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1OTIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9iYWxsb2MuYz0yMzk9dW5zaWduZWQgZXh0NF9mcmVlX2NsdXN0ZXJzX2FmdGVyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtMjU0LSAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suICBUaGUgZGVzY3JpcHRvcnMgYXJlIGxvYWRlZCBpbiBtZW1vcnlcXG5mcy9leHQ0L2JhbGxvYy5jOjI1NTogKiB3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCAoc2VlIGV4dDRfZmlsbF9zdXBlcikuXFxuZnMvZXh0NC9iYWxsb2MuYy0yNTYtICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDczOT1zdGF0aWMgaW50IGV4dDRfaW5vZGVfYmxvY2tzX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQ3NTktXFx0ICogYWxsb3dlZCB0aGlzLCBzYi1cXHUwMDNlc19tYXhieXRlcyB3YXMgc2V0IGFjY29yZGluZyB0byB0aGUgaHVnZV9maWxlXFxuZnMvZXh0NC9pbm9kZS5jOjQ3NjA6XFx0ICogZmVhdHVyZSBpbiBleHQ0X2ZpbGxfc3VwZXIoKS5cXG5mcy9leHQ0L2lub2RlLmMtNDc2MS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTEwNjE9c3RhdGljIGludCBleHQ0X21iX3NjYW5fZ3JvdXBzX2Jlc3RfYXZhaWwoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTEwODUtXFx0XFx0ICogV2UgYXJlIGFzc3VtaW5nIHRoYXQgc3RyaXBlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2ZcXG5mcy9leHQ0L21iYWxsb2MuYzoxMDg2OlxcdFxcdCAqIGNsdXN0ZXIgcmF0aW8gb3RoZXJ3aXNlIF9fZXh0NF9maWxsX3N1cGVyIGV4aXN0cyBlYXJseS5cXG5mcy9leHQ0L21iYWxsb2MuYy0xMDg3LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNTA9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNTYtXFxuZnMvZXh0NC9zdXBlci5jOjUzNTc6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUzNTgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODM0LVxcbmZzL2V4dDQvc3VwZXIuYzo1ODM1OnN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtNTgzNi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg1NC1cXG5mcy9leHQ0L3N1cGVyLmM6NTg1NTpcXHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01ODU2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4ODU9c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtNTg4Ni17XFxuZnMvZXh0NC9zdXBlci5jOjU4ODc6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGV4dDRfZmlsbF9zdXBlcik7XFxuZnMvZXh0NC9zdXBlci5jLTU4ODgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToxMS43ODYyMzY0NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwOTExMTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRha2UuIEl0J3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgZnVuY3Rpb24g4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6YXRpb24uIFRoZXkncmUgc3dhcHBpbmcgb3V0IGB0aW1lcl9kZWxldGVfc3luYygpYCBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmMoKWAgZm9yIGBzYmktXHUwMDNlc19lcnJfcmVwb3J0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSBkYWlseSBlcnJvciByZXBvcnRpbmcgdGltZXIsIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCwgaXMgKmNvbXBsZXRlbHkqIHNodXQgZG93biBiZWZvcmUgdGhlIHN1cGVyYmxvY2sgaXMgZnJlZWQuIFByZXZlbnRzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlbnN1cmVzIGl0IGNhbuKAmXQgYmUgcmUtYXJtZWQgYWZ0ZXIgdGhlIG1vdW50IGZhaWxzLCB3aGljaCBpcyBjbGVhbmVyIGFuZCBzYWZlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBjb2RlLCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgc3l6a2FsbGVyLCBhbmQgdGhlcmVmb3JlIHdlIGFyZSBnb29kIHRvIGZ1enogdGhpcyBzZWN0aW9uLlxuXG5JJ3ZlIGdvdCB0aGUgYEZvY3VzU3ltYm9sc2AgbmFpbGVkIGRvd246IGBfX2V4dDRfZmlsbF9zdXBlcmAsIHdoaWNoIGlzIHRoZSBkaXJlY3QgdGFyZ2V0LCBhbmQgaXRzIGRpcmVjdCBcInBhcmVudFwiIGBleHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhlIGRhaWx5IGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbiwgYHByaW50X2RhaWx5X2Vycm9yX2luZm9gLiBUaGUgY29kZSBhbHNvIGhhbmRsZXMgYGV4dDRfcHV0X3N1cGVyYCwgd2hpY2ggY2xlYW5zIHVwIGBzX2Vycl9yZXBvcnRgIHRvby5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgRVhUNF9GU2AgY29uZmlnIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLlxuXG5JJ3ZlIHZlcmlmaWVkIGFsbCB0aGUgY3JpdGVyaWEuIFdlIGhhdmUgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aCwgYW5kIGl0IGlzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUuXG5cblNvLCBsb29rcyBsaWtlIHdlIGhhdmUgYSBnby4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5OCwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNDk1MzQ5ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NTA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToxNi42MTM5MDg2MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAwOTg5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNjE0NTk4NDA4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ0MDAyOTUxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3NmEzYzU2ZmVmNmM1MjVhZjExOGI2NTM4N2IzY2Y2MGRmMjNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE2OjA0OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCBiY2EwZGM4N2QwYjdjLi4xNTRlMDA5MDEwMTc0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuK1x0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbiBcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50OlxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNjE0NjAwMjc4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5ODA1MDg2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgYGRpZmZgIHNob3dzIGEgY2hhbmdlIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhlIGNvbnRleHQgaXMgcmlnaHQgYXJvdW5kIHRoZSBzdXBlcmJsb2NrIGNsZWFudXAgbG9naWMsIHNwZWNpZmljYWxseSBuZWFyIGxpbmUgNTgwOS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgZnJvbSBgdGltZXJfZGVsZXRlX3N5bmNgIHRvIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBmb3IgYHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIFRoZSBnb2FsIGhlcmUgaXMgY2xlYXJseSBhYm91dCBtb3JlIHJvYnVzdCBjbGVhbnVwIG9mIHRoZSBlcnJvciByZXBvcnRpbmcgdGltZXIgYmVmb3JlIHRoZSBzdXBlcmJsb2NrIGlzIGRlc3Ryb3llZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBidWcsIHJhY2UgY29uZGl0aW9uLCBvciBhIGdlbmVyYWwgaGFyZGVuaW5nIGltcHJvdmVtZW50LiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IGl0IGlzIHJlbGF0ZWQgdG8gYSBtb3JlIHJvYnVzdCBhcHByb2FjaCB0byBkZXN0cm95aW5nIHRoZSB0aW1lci4gSSB3b25kZXIgd2hhdCB0aGUgc3VidGxlIGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIHRoZXNlIHRpbWVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGlzIGNvcnJlY3QsIHNhZmUsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEkgd2lsbCByZWFkIHVwIG9uIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmNgIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIGVuc3VyZSB0aGF0IGFueSBwZW5kaW5nIHRpbWVyIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgZnJlZWluZyB0aGUgYXNzb2NpYXRlZCBzdXBlcmJsb2NrIGRhdGEuIEknbGwgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToyMy41OTUxMTExOTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODAwOlxcdFxcbjU4MDE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTgwMjpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41ODAzOlxcdFxcdH1cXG41ODA0OlxcdGZhaWxlZF9tb3VudDNhOlxcbjU4MDU6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbjU4MDY6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTgwNzpcXHRcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG41ODA4OlxcdGZhaWxlZF9tb3VudDM6XFxuNTgwOTpcXHRcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbjU4MTA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG41ODExOlxcdFxcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XFxuNTgxMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuNTgxMzpcXHRcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbjU4MTQ6XFx0ZmFpbGVkX21vdW50OlxcbjU4MTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuNTgxNjpcXHRcXHR1dGY4X3VubG9hZChzYi1cXHUwMDNlc19lbmNvZGluZyk7XFxuNTgxNzpcXHQjZW5kaWZcXG41ODE4OlxcdFxcbjU4MTk6XFx0I2lmZGVmIENPTkZJR19RVU9UQVxcbjU4MjA6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBFWFQ0X01BWFFVT1RBUzsgaSsrKVxcbjU4MjE6XFx0XFx0XFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xcbjU4MjI6XFx0I2VuZGlmXFxuNTgyMzpcXHRcXHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFxcdTAwMjZzYmktXFx1MDAzZXNfZHVtbXlfZW5jX3BvbGljeSk7XFxuNTgyNDpcXHRcXHRicmVsc2Uoc2JpLVxcdTAwM2VzX3NiaCk7XFxuNTgyNTpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XFxuNTgyNjpcXHRcXHRcXHRpbnZhbGlkYXRlX2JkZXYoZmlsZV9iZGV2KHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xcbjU4Mjc6XFx0XFx0XFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlLCBzYik7XFxuNTgyODpcXHRcXHR9XFxuNTgyOTpcXHRvdXRfZmFpbDpcXG41ODMwOlxcdFxcdGludmFsaWRhdGVfYmRldihzYi1cXHUwMDNlc19iZGV2KTtcXG41ODMxOlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbjU4MzI6XFx0XFx0cmV0dXJuIGVycjtcXG41ODMzOlxcdH1cXG41ODM0OlxcdFxcbjU4MzU6XFx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbjU4MzY6XFx0e1xcbjU4Mzc6XFx0XFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuNTgzODpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XFxuNTgzOTpcXHRcXHRjb25zdCBjaGFyICpkZXNjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MjMuNTk1NDkzMDg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDU5NDYzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRyYWNraW5nIGRvd24gdGhvc2UgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgOlxuXG4qKkZpbmRpbmcgRnVuY3Rpb24gVXNhZ2UgaW4gZXh0NCBTdXBlcmJsb2NrKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYHRpbWVyX3NodXRkb3duX3N5bmNgIGFuZCBgc19lcnJfcmVwb3J0YCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIHN1cGVyYmxvY2sgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogZWxzZSB0aGVzZSBhcmUgY2FsbGVkIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGNsdWVzIGxpZS4gQnkgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHRoZWlyIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCBzZWUgaG93IHRoZXkncmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MjUuNjAxNDQyMjQ0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5OTM1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic19lcnJfcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMjItXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZnMvZXh0NC9zdXBlci5jLTM3MDYte1xcbmZzL2V4dDQvc3VwZXIuYzozNzA3OlxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTM3MDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxcbmZzL2V4dDQvc3VwZXIuYzozNzQ2OlxcdGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxcbmZzL2V4dDQvc3VwZXIuYzo1NDU5OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbywgMCk7XFxuZnMvZXh0NC9zdXBlci5jLTU0NjAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJvcl9sb2NrKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzQ5LVxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NzUwOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDUqNjA7XFx0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NTE6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NTMtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NzU0OlxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuZnMvZXh0NC9zdXBlci5jLTU3NTUtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MTEtXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTU4MTMtXFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MjUwPXN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cXHRcXHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24ndCBiZWVuXFxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XFx0XFx0ICogc3RhcnRlZCBhbHJlYWR5IGFuZCBzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cXHRcXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcXHRcXHRpZiAoIWVzLVxcdTAwM2VzX2Vycm9yX2NvdW50IFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjYzMTQ6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NjMxNTpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTYzMTYtXFx0XFx0bGUzMl9hZGRfY3B1KFxcdTAwMjZlcy1cXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVxcdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjI1LjgxMDQ0MDUwMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA0NDMzNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVGltZXIgU2h1dGRvd24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpcyBiZWluZyBpbXBsZW1lbnRlZCBoZXJlIHRvIGd1YXJhbnRlZSB0aGF0IGEgdGltZXIgY2FuJ3QgYmUgcmVzdGFydGVkIG9uY2UgaXQncyBiZWVuIHNodXQgZG93biwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIHByb2JsZW1zIGxpa2UgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyB0aGUgdGVhcmRvd24gb2YgdGhlIGBzYmlgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBpZiBhIG1vdW50IG9wZXJhdGlvbiBmYWlscy4gSSBzZWUgdGhhdCB0aGUgY2hhbmdlIGludm9sdmVzIHN0YW5kYXJkaXppbmcgb24gYHRpbWVyX3NodXRkb3duX3N5bmNgIGluIHRoZSBlcnJvciBjbGVhbnVwIHBhdGggb2YgYF9fZXh0NF9maWxsX3N1cGVyKClgLCB3aGljaCBjdXJyZW50bHkgdXNlcyBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBhIHRpbWVyIGZyb20gYmVpbmcgcmUtYXJtZWQgZHVyaW5nIG9yIGFmdGVyIHRoZSBjbGVhbnVwIHByb2Nlc3M7IGEgY2xhc3NpYyBsaWZlY3ljbGUgaXNzdWUsIGFuZCBhIGNvbW1vbiBzb3VyY2Ugb2YgdXNlLWFmdGVyLWZyZWUgYW5kIHRpbWVyIHRlYXJkb3duIGJ1Z3MuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgcmVnYXJkaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gV2UncmUgbm90IHRvdWNoaW5nIGFueXRoaW5nIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObyBkaWNlLiBUaGUgY29kZSdzIGxvZ2ljIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMy4gICoqQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8qKiBObyBhZ2Fpbi4gV2UncmUgbm90IGludHJvZHVjaW5nIG9yIGNoYW5naW5nIGFueSBhbGxvY2F0aW9uIHBhdHRlcm5zIHRoYXQgd291bGQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gcmVhZCBsYXRlci5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIGFjY2VzcyBvciB1bmluaXRpYWxpemVkIGJ5dGUgZXhwb3N1cmVzLlxuXG5CYXNlZCBvbiB0aGF0LCBpdCBzZWVtcyB0aGlzIGlzIHB1cmVseSBhYm91dCB0aGUgdGltZXIncyBsaWZlY3ljbGUgYW5kIGVuc3VyaW5nIGl0J3MgcHJvcGVybHkgZGlzYWJsZWQuIEknbSBmb2N1c2luZyBvbiB0aGUgKmFmdGVyKiB0aGUgdGltZXIgaGFzIGJlZW4gZGVsZXRlZC5cblxuVGhlIHByaW1hcnkgcmVhc29uIHRoaXMgY2hhbmdlIG1hdHRlcnMgaXNuJ3QgYWJvdXQgS01TQU4gc3BlY2lmaWNhbGx5LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHRpbWVyLXJlbGF0ZWQgcmFjZSBjb25kaXRpb25zLiBTdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgaW4gYW4gYWN0aXZlIGtlcm5lbCBidWlsZC5cblxuVGh1cywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIGFuZCBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHRoYXQgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGNhbiBkZXRlY3QuIFdlJ3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk4LCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNTozMS4wMTQ4NzY1NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 15:20:09 +0000 UTC FinishedAt: 2026-09-05 16:05:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "af5f12805e5cefa4fe68d6127c7e1fb78cd5535c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "af5f12805e5cefa4fe68d6127c7e1fb78cd5535c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "a509e22d-9b28-4f52-a959-a951da2f707c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_fill_super", "ext4_fill_super", "print_daily_error_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7cHJpbnRfZGFpbHlfZXJyb3JfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGV4dDQgbW91bnQgaW4gX19leHQ0X2ZpbGxfc3VwZXIoKSB0byB1c2UgdGltZXJfc2h1dGRvd25fc3luYygpIGluc3RlYWQgb2YgdGltZXJfZGVsZXRlX3N5bmMoKSBvbiBzX2Vycl9yZXBvcnQsIHByZXZlbnRpbmcgdGltZXIgcmUtYXJtaW5nIGR1cmluZyBmaWxlc3lzdGVtIHRlYXJkb3duLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgVkZTL2ZpbGVzeXN0ZW0gbW91bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNzZhM2M1NmZlZjZjNTI1YWYxMThiNjUzODdiM2NmNjBkZjIzYTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNjowNDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IGJjYTBkYzg3ZDBiN2MuLjE1NGUwMDkwMTAxNzQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU4MDksNyAmIzQzOzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuJiM0MztcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG4gXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDpcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3ByaW50X2RhaWx5X2Vycm9yX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc2YTNjNTZmZWY2YzUyNWFmMTE4YjY1Mzg3YjNjZjYwZGYyM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KIAlmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX3NiX3VwZF93b3JrKTsKIAlleHQ0X3N0b3BfbW1wZChzYmkpOwotCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwomIzQzOwl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwogCWV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ6CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlc3lzdGVtIFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGZzL2V4dDQvc3VwZXIuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGhhbmRsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gc2h1dGRvd24gb3IgdW5tb3VudCwgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBgZmFpbGVkX21vdW50YCBsYWJlbC4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcXVpdGUgdGFyZ2V0ZWQ6IGl0JiMzOTtzIHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gYHRpbWVyX2RlbGV0ZV9zeW5jYCBpcyBhIHN0cm9uZyBvcGVyYXRpb24sIGRlc2lnbmVkIHRvIGRlbGV0ZSBhIHRpbWVyIGltbWVkaWF0ZWx5LiBgdGltZXJfc2h1dGRvd25fc3luY2AgaXMgcHJvYmFibHkgZ2VudGxlciwgYWxsb3dpbmcgYW55IHBlbmRpbmcgdGltZXIgd29yayB0byBjb21wbGV0ZSBiZWZvcmUgc2h1dHRpbmcgZG93biB0aGUgdGltZXIuIFRoZSBkaWZmZXJlbmNlIGxpa2VseSByZXZvbHZlcyBhcm91bmQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgYXZvaWRpbmcgcG90ZW50aWFsIHJhY2VzIGR1cmluZyB1bW91bnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIGhhcyBwb3RlbnRpYWxseSBiZWVuIGlkZW50aWZpZWQgYXMgcHJvYmxlbWF0aWMuIFBlcmhhcHMgdGhlIG9sZCB0aW1lciBkZWxldGlvbiB3YXMgbGVhZGluZyB0byBhIGtlcm5lbCBwYW5pYyBpbiBjZXJ0YWluLCBzcGVjaWZpYyBzaXR1YXRpb25zPyBPciBwb3NzaWJseSwgaXQgd2FzIGJlaW5nIG92ZXJ6ZWFsb3VzIGFuZCBwcmV2ZW50aW5nIGEgZ3JhY2VmdWwgdW5tb3VudD8gSXQgd291bGQgc2VlbSByZWFzb25hYmxlLCB0aGVyZWZvcmUsIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aHkgdGhlIG5ldyBtZXRob2Qgd2FzIGNob3Nlbi4KCkkmIzM5O2xsIGNoZWNrIHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA1ODA5IGluIGBmcy9leHQ0L3N1cGVyLmNgLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBldmFsdWF0ZSB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzgwOlx0XHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbjU3ODE6XHRmYWlsZWRfbW91bnQ1OlxuNTc4MjpcdFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xuNTc4MzpcdFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XG41Nzg0Olx0XHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuNTc4NTpcdGZhaWxlZF9tb3VudDRhOlxuNTc4NjpcdFx0ZHB1dChzYi1cdTAwM2VzX3Jvb3QpO1xuNTc4NzpcdFx0c2ItXHUwMDNlc19yb290ID0gTlVMTDtcbjU3ODg6XHRmYWlsZWRfbW91bnQ0OlxuNTc4OTpcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDttb3VudCBmYWlsZWRcJiMzNDspO1xuNTc5MDpcdFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuNTc5MTpcdFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG41NzkyOlx0ZmFpbGVkX21vdW50X3dxOlxuNTc5MzpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xuNTc5NDpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTc5NTpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbjU3OTY6XHRcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbjU3OTc6XHRcbjU3OTg6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSk7XG41Nzk5Olx0XHRzYmktXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XG41ODAwOlx0XG41ODAxOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTgwMjpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTgwMzpcdFx0fVxuNTgwNDpcdGZhaWxlZF9tb3VudDNhOlxuNTgwNTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuNTgwNjpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTgwNzpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG41ODA4Olx0ZmFpbGVkX21vdW50MzpcbjU4MDk6XHRcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG41ODEwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX3NiX3VwZF93b3JrKTtcbjU4MTE6XHRcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG41ODEyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuNTgxMzpcdFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbjU4MTQ6XHRmYWlsZWRfbW91bnQ6XG41ODE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXG41ODE2Olx0XHR1dGY4X3VubG9hZChzYi1cdTAwM2VzX2VuY29kaW5nKTtcbjU4MTc6XHQjZW5kaWZcbjU4MTg6XHRcbjU4MTk6XHQjaWZkZWYgQ09ORklHX1FVT1RBXG41ODIwOlx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkmIzQzOyYjNDM7KVxuNTgyMTpcdFx0XHRrZnJlZShnZXRfcWZfbmFtZShzYiwgc2JpLCBpKSk7XG41ODIyOlx0I2VuZGlmXG41ODIzOlx0XHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFx1MDAyNnNiaS1cdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xuNTgyNDpcdFx0YnJlbHNlKHNiaS1cdTAwM2VzX3NiaCk7XG41ODI1Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpIHtcbjU4MjY6XHRcdFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xuNTgyNzpcdFx0XHRmc19iZGV2X2ZpbGVfcmVsZWFzZShzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xuNTgyODpcdFx0fVxuNTgyOTpcdG91dF9mYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBleHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBJIGtub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1c3BlY3RlZCBhcmVhIC0gbGluZXMgNTQwMCB0aHJvdWdoIDU4MDAuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gaGVhZGVyIHdvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgdG8gbG9jYXRlIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgc28gSSBjYW4gc3RhcnQgdG8gZm9sbG93IHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTgzNC1cbmZzL2V4dDQvc3VwZXIuYzo1ODM1OnN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy01ODM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIE1vdW50IEZhaWx1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBmYWlsZWRfbW91bnQ4YCBpcyBjb21pbmcgZnJvbSwgb3IsIGFsdGVybmF0aXZlbHksIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDU4MDkuIFRpbWUgdG8gY3JhY2sgb3BlbiBgZnMvZXh0NC9zdXBlci5jYC4gU2luY2UgSSBoYXZlIGEgcHJldHR5IGdvb2QgbWVtb3J5IGZvciB0aGUgZ2VuZXJhbCBsYXlvdXQgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBjb2RlLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgdGFrZSBhIGxvb2sgYXQgYSByYW5nZSBvZiBsaW5lczogNTc1MCB0byA1ODQwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIGlzIGVub3VnaCB0byBwaW5wb2ludCB0aGUgaXNzdWUgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NTA6XHRcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1x0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXG41NzUxOlx0XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuNTc1MjpcdFx0XHRcdFx0ICBqaWZmaWVzICYjNDM7IHNlY3NfdG9famlmZmllcyhzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYykpO1xuNTc1MzpcdFx0fVxuNTc1NDpcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xuNTc1NTpcdFxuNTc1NjpcdFx0LyogRW5hYmxlIG1lc3NhZ2UgcmF0ZWxpbWl0aW5nLiBEZWZhdWx0IGlzIDEwIG1lc3NhZ2VzIHBlciA1IHNlY3MuICovXG41NzU3Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NTg6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNnNiaS1cdTAwM2VzX3dhcm5pbmdfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NTk6XHRcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFx1MDAyNnNiaS1cdTAwM2VzX21zZ19yYXRlbGltaXRfc3RhdGUsIDUgKiBIWiwgMTApO1xuNTc2MDpcdFx0YXRvbWljX3NldChcdTAwMjZzYmktXHUwMDNlc193YXJuaW5nX2NvdW50LCAwKTtcbjU3NjE6XHRcdGF0b21pY19zZXQoXHUwMDI2c2JpLVx1MDAzZXNfbXNnX2NvdW50LCAwKTtcbjU3NjI6XHRcbjU3NjM6XHRcdC8qIFJlZ2lzdGVyIHN5c2ZzIGFmdGVyIGFsbCBpbml0aWFsaXphdGlvbnMgYXJlIGNvbXBsZXRlLiAqL1xuNTc2NDpcdFx0ZXJyID0gZXh0NF9yZWdpc3Rlcl9zeXNmcyhzYik7XG41NzY1Olx0XHRpZiAoZXJyKVxuNTc2NjpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDk7XG41NzY3Olx0XG41NzY4Olx0XHRyZXR1cm4gMDtcbjU3Njk6XHRcbjU3NzA6XHRmYWlsZWRfbW91bnQ5OlxuNTc3MTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG41NzcyOlx0XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG41NzczOlx0XHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbjU3NzQ6XHRmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuNTc3NTpcdFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbjU3NzY6XHRmYWlsZWRfbW91bnQ3OlxuNTc3NzpcdFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuNTc3ODpcdGZhaWxlZF9tb3VudDY6XG41Nzc5Olx0XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuNTc4MDpcdFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG41NzgxOlx0ZmFpbGVkX21vdW50NTpcbjU3ODI6XHRcdGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc2JpKTtcbjU3ODM6XHRcdGV4dDRfZXh0X3JlbGVhc2Uoc2IpO1xuNTc4NDpcdFx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbjU3ODU6XHRmYWlsZWRfbW91bnQ0YTpcbjU3ODY6XHRcdGRwdXQoc2ItXHUwMDNlc19yb290KTtcbjU3ODc6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IE5VTEw7XG41Nzg4Olx0ZmFpbGVkX21vdW50NDpcbjU3ODk6XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7bW91bnQgZmFpbGVkXCYjMzQ7KTtcbjU3OTA6XHRcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbjU3OTE6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuNTc5MjpcdGZhaWxlZF9tb3VudF93cTpcbjU3OTM6XHRcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbjU3OTQ6XHRcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbjU3OTU6XHRcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG41Nzk2Olx0XHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG41Nzk3Olx0XG41Nzk4Olx0XHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfYmxvY2tfY2FjaGUpO1xuNTc5OTpcdFx0c2JpLVx1MDAzZXNfZWFfYmxvY2tfY2FjaGUgPSBOVUxMO1xuNTgwMDpcdFxuNTgwMTpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbjU4MDI6XHRcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbjU4MDM6XHRcdH1cbjU4MDQ6XHRmYWlsZWRfbW91bnQzYTpcbjU4MDU6XHRcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbjU4MDY6XHRcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbjU4MDc6XHRcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuNTgwODpcdGZhaWxlZF9tb3VudDM6XG41ODA5Olx0XHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuNTgxMDpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19zYl91cGRfd29yayk7XG41ODExOlx0XHRleHQ0X3N0b3BfbW1wZChzYmkpO1xuNTgxMjpcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbjU4MTM6XHRcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG41ODE0Olx0ZmFpbGVkX21vdW50OlxuNTgxNTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuNTgxNjpcdFx0dXRmOF91bmxvYWQoc2ItXHUwMDNlc19lbmNvZGluZyk7XG41ODE3Olx0I2VuZGlmXG41ODE4Olx0XG41ODE5Olx0I2lmZGVmIENPTkZJR19RVU9UQVxuNTgyMDpcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEVYVDRfTUFYUVVPVEFTOyBpJiM0MzsmIzQzOylcbjU4MjE6XHRcdFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xuNTgyMjpcdCNlbmRpZlxuNTgyMzpcdFx0ZnNjcnlwdF9mcmVlX2R1bW15X3BvbGljeShcdTAwMjZzYmktXHUwMDNlc19kdW1teV9lbmNfcG9saWN5KTtcbjU4MjQ6XHRcdGJyZWxzZShzYmktXHUwMDNlc19zYmgpO1xuNTgyNTpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XG41ODI2Olx0XHRcdGludmFsaWRhdGVfYmRldihmaWxlX2JkZXYoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpKTtcbjU4Mjc6XHRcdFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUsIHNiKTtcbjU4Mjg6XHRcdH1cbjU4Mjk6XHRvdXRfZmFpbDpcbjU4MzA6XHRcdGludmFsaWRhdGVfYmRldihzYi1cdTAwM2VzX2JkZXYpO1xuNTgzMTpcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbjU4MzI6XHRcdHJldHVybiBlcnI7XG41ODMzOlx0fVxuNTgzNDpcdFxuNTgzNTpcdHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbjU4MzY6XHR7XG41ODM3Olx0XHRzdHJ1Y3QgZXh0NF9mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuNTgzODpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpO1xuNTgzOTpcdFx0Y29uc3QgY2hhciAqZGVzY3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBDb2RlIFNlY3Rpb24gNTc1MC01ODMzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBsaW5lcywgNTc1MCB0byA1ODMzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmFjayB1cCBhIGJpdCBhbmQgZXN0YWJsaXNoIHRoZSBmdW5jdGlvbiB0aG9zZSBsaW5lcyBhcmUgcGFydCBvZi4gRGlyZWN0bHkganVtcGluZyBpbnRvIHRob3NlIGxpbmVzIG1pZ2h0IGJlIGVmZmljaWVudCBmb3IgcXVpY2sgY2hhbmdlcywgYnV0IEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIG92ZXJ2aWV3IHRvIGZpbmQgdGhlIG1haW4gdXNlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lIDUwMDAgdG8gNTIwMC4gQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBqdXN0IGdyZXAgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSBpZiB0aGF0IHF1aWNrbHkgbmFycm93cyB0aGluZ3MgZG93bi4gRWl0aGVyIHdheSwgdGhhdCBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gYSBwcm9wZXIgYW5hbHlzaXMuIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBtaW51dGlhZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBbYS16MC05XyAqXSYjNDM7ZXh0NF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZnMvZXh0NC9zdXBlci5jLTYzLVxuZnMvZXh0NC9zdXBlci5jOjY0OnN0YXRpYyBzdHJ1Y3QgZXh0NF9sYXp5X2luaXQgKmV4dDRfbGlfaW5mbztcbmZzL2V4dDQvc3VwZXIuYy02NS1zdGF0aWMgREVGSU5FX01VVEVYKGV4dDRfbGlfbXR4KTtcbmZzL2V4dDQvc3VwZXIuYzo2NjpzdGF0aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBleHQ0X21vdW50X21zZ19yYXRlbGltaXQ7XG5mcy9leHQ0L3N1cGVyLmMtNjctXG5mcy9leHQ0L3N1cGVyLmM6Njg6c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKixcbmZzL2V4dDQvc3VwZXIuYy02OS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgam91cm5hbF9kZXZudW0pO1xuZnMvZXh0NC9zdXBlci5jOjcwOnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xuZnMvZXh0NC9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9zdXBlci5jOjcyOnN0YXRpYyBpbnQgZXh0NF9jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6NzM6c3RhdGljIGludCBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy03NC1cdFx0XHRcdFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcbmZzL2V4dDQvc3VwZXIuYzo3NTpzdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy03Ni1cdFx0XHRcdCAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcbmZzL2V4dDQvc3VwZXIuYzo3NzpzdGF0aWMgaW50IGV4dDRfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7XG5mcy9leHQ0L3N1cGVyLmM6Nzg6c3RhdGljIGludCBleHQ0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xuZnMvZXh0NC9zdXBlci5jOjc5OnN0YXRpYyBpbnQgZXh0NF91bmZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4MDpzdGF0aWMgaW50IGV4dDRfZnJlZXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvZXh0NC9zdXBlci5jLTgxLXN0YXRpYyBpbmxpbmUgaW50IGV4dDJfZmVhdHVyZV9zZXRfb2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM9ODI9c3RhdGljIGlubGluZSBpbnQgZXh0M19mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4MzpzdGF0aWMgdm9pZCBleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2V4dDQvc3VwZXIuYzo4NDpzdGF0aWMgdm9pZCBleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCh2b2lkKTtcbmZzL2V4dDQvc3VwZXIuYzo4NTpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2dldF9qb3VybmFsX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtODYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgam91cm5hbF9pbnVtKTtcbmZzL2V4dDQvc3VwZXIuYzo4NzpzdGF0aWMgaW50IGV4dDRfdmFsaWRhdGVfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjg4OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTg5LVx0XHRcdFx0ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTA6c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTE6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xuZnMvZXh0NC9zdXBlci5jOjkyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjkzOnN0YXRpYyBpbnQgZXh0NF9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbmZzL2V4dDQvc3VwZXIuYzo5NjpzdGF0aWMgdm9pZCBleHQ0X2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L3N1cGVyLmM6OTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW107XG5mcy9leHQ0L3N1cGVyLmMtOTgtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEyNC1cbmZzL2V4dDQvc3VwZXIuYzoxMjU6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXh0NF9jb250ZXh0X29wcyA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xMjYtXHQucGFyc2VfcGFyYW1cdD0gZXh0NF9wYXJzZV9wYXJhbSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTU5PU1PRFVMRV9BTElBUyhcJiMzNDtleHQzXCYjMzQ7KTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYyLVxuZnMvZXh0NC9zdXBlci5jOjE2MzpzdGF0aWMgaW5saW5lIHZvaWQgX19leHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuZnMvZXh0NC9zdXBlci5jLTE2NC1cdFx0XHRcdCAgYmlvX2VuZF9pb190IGVuZF9pbywgYm9vbCBzaW11X2ZhaWwpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxND1pbnQgZXh0NF9yZWFkX2JoX2xvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIyOS0gKi9cbmZzL2V4dDQvc3VwZXIuYzoyMzA6c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X3NiX2JyZWFkX2dmcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTIzMS1cdFx0XHRcdFx0ICAgICAgIHNlY3Rvcl90IGJsb2NrLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yNzg9dm9pZCBleHQ0X3NiX2JyZWFkYWhlYWRfdW5tb3ZhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yODktXG5mcy9leHQ0L3N1cGVyLmM6MjkwOnN0YXRpYyBpbnQgZXh0NF92ZXJpZnlfY3N1bV90eXBlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMjkxLVx0XHRcdFx0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmM9Mjk5PV9fbGUzMiBleHQ0X3N1cGVyYmxvY2tfY3N1bShzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMwOC1cbmZzL2V4dDQvc3VwZXIuYzozMDk6c3RhdGljIGludCBleHQ0X3N1cGVyYmxvY2tfY3N1bV92ZXJpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy0zMTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz00MzI9dm9pZCBleHQ0X2l0YWJsZV91bnVzZWRfc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQzOS1cbmZzL2V4dDQvc3VwZXIuYzo0NDA6c3RhdGljIHZvaWQgX19leHQ0X3VwZGF0ZV90c3RhbXAoX19sZTMyICpsbywgX191OCAqaGksIHRpbWU2NF90IG5vdylcbmZzL2V4dDQvc3VwZXIuYy00NDEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDctXG5mcy9leHQ0L3N1cGVyLmM6NDQ4OnN0YXRpYyB0aW1lNjRfdCBfX2V4dDRfZ2V0X3RzdGFtcChfX2xlMzIgKmxvLCBfX3U4ICpoaSlcbmZzL2V4dDQvc3VwZXIuYy00NDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzEtICovXG5mcy9leHQ0L3N1cGVyLmM6NDcyOnN0YXRpYyB2b2lkIGV4dDRfbWF5YmVfdXBkYXRlX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00NzMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDgtXG5mcy9leHQ0L3N1cGVyLmM6NTA5OnN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXG5mcy9leHQ0L3N1cGVyLmMtNTEwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTE4LVxuZnMvZXh0NC9zdXBlci5jOjUxOTpzdGF0aWMgYm9vbCBleHQ0X2pvdXJuYWxsZWRfd3JpdGVwYWdlX25lZWRzX3JlZGlydHkoc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSxcbmZzL2V4dDQvc3VwZXIuYy01MjAtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1MC1cbmZzL2V4dDQvc3VwZXIuYzo1NTE6c3RhdGljIGludCBleHQ0X2pvdXJuYWxsZWRfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU1Mi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4My1cbmZzL2V4dDQvc3VwZXIuYzo1ODQ6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU4NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU5NC1cbmZzL2V4dDQvc3VwZXIuYzo1OTU6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTU5Ni17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYxMT1zdHJ1Y3QgZXh0NF9lcnJfdHJhbnNsYXRpb24ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy02MTctXG5mcy9leHQ0L3N1cGVyLmM6NjE4OnN0YXRpYyBzdHJ1Y3QgZXh0NF9lcnJfdHJhbnNsYXRpb24gZXJyX3RyYW5zbGF0aW9uW10gPSB7XG5mcy9leHQ0L3N1cGVyLmMtNjE5LVx0RVhUNF9FUlJfVFJBTlNMQVRFKEVJTyksXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYzNi1cbmZzL2V4dDQvc3VwZXIuYzo2Mzc6c3RhdGljIGludCBleHQ0X2Vycm5vX3RvX2NvZGUoaW50IGVycm5vKVxuZnMvZXh0NC9zdXBlci5jLTYzOC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTY0Nz1zdGF0aWMgdm9pZCBzYXZlX2Vycm9yX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy02OTUtICovXG5mcy9leHQ0L3N1cGVyLmM6Njk2OnN0YXRpYyB2b2lkIGV4dDRfaGFuZGxlX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZm9yY2Vfcm8sIGludCBlcnJvcixcbmZzL2V4dDQvc3VwZXIuYy02OTctXHRcdFx0ICAgICAgX191MzIgaW5vLCBfX3U2NCBibG9jayxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9OTg0PXZvaWQgX19leHQ0X21zZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMDA2LVxuZnMvZXh0NC9zdXBlci5jOjEwMDc6c3RhdGljIGludCBleHQ0X3dhcm5pbmdfcmF0ZWxpbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTAwOC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTExNjg9c3RhdGljIHZvaWQgZHVtcF9vcnBoYW5fbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTExODYtI2lmZGVmIENPTkZJR19RVU9UQVxuZnMvZXh0NC9zdXBlci5jOjExODc6c3RhdGljIGludCBleHQ0X3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7XG5mcy9leHQ0L3N1cGVyLmMtMTE4OC1cbmZzL2V4dDQvc3VwZXIuYzoxMTg5OnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3F1b3Rhc19vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG5mcy9leHQ0L3N1cGVyLmMtMTE5MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyMDI9c3RhdGljIGlubGluZSBjaGFyICpnZXRfcWZfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjA5LSNlbHNlXG5mcy9leHQ0L3N1cGVyLmM6MTIxMDpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9xdW90YXNfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuZnMvZXh0NC9zdXBlci5jLTEyMTEte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjE0LVxuZnMvZXh0NC9zdXBlci5jOjEyMTU6c3RhdGljIGludCBleHQ0X3BlcmNwdV9wYXJhbV9pbml0KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbmZzL2V4dDQvc3VwZXIuYy0xMjE2LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTI0Ny1cbmZzL2V4dDQvc3VwZXIuYzoxMjQ4OnN0YXRpYyB2b2lkIGV4dDRfcGVyY3B1X3BhcmFtX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTEyNDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjU3LVxuZnMvZXh0NC9zdXBlci5jOjEyNTg6c3RhdGljIHZvaWQgZXh0NF9ncm91cF9kZXNjX2ZyZWUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTEyNTkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjY4LVxuZnMvZXh0NC9zdXBlci5jOjEyNjk6c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbmZzL2V4dDQvc3VwZXIuYy0xMjcwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTI4MS1cbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTI4My17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzOTItXG5mcy9leHQ0L3N1cGVyLmM6MTM5MzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfaW5vZGVfY2FjaGVwO1xuZnMvZXh0NC9zdXBlci5jLTEzOTQtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzOTctICovXG5mcy9leHQ0L3N1cGVyLmM6MTM5ODpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMTM5OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE0NDgtXG5mcy9leHQ0L3N1cGVyLmM6MTQ0OTpzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTE0NTAte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNDU5LVxuZnMvZXh0NC9zdXBlci5jOjE0NjA6c3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvc3VwZXIuYy0xNDYxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTQ3MC1cbmZzL2V4dDQvc3VwZXIuYzoxNDcxOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9zdXBlci5jLTE0NzIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNDkwLVxuZnMvZXh0NC9zdXBlci5jOjE0OTE6c3RhdGljIHZvaWQgZXh0NF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTE0OTIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNTM5PXZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNTc5LVxuZnMvZXh0NC9zdXBlci5jOjE1ODA6c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9uZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMTU4MS1cdFx0XHRcdFx0dTY0IGlubywgdTMyIGdlbmVyYXRpb24pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE1OTktXG5mcy9leHQ0L3N1cGVyLmM6MTYwMDpzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXh0NF9maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuZnMvZXh0NC9zdXBlci5jLTE2MDEtXHRcdFx0XHRcdGludCBmaF9sZW4sIGludCBmaF90eXBlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjA2LVxuZnMvZXh0NC9zdXBlci5jOjE2MDc6c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbmZzL2V4dDQvc3VwZXIuYy0xNjA4LVx0XHRcdFx0XHRpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYxMy1cbmZzL2V4dDQvc3VwZXIuYzoxNjE0OnN0YXRpYyBpbnQgZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L3N1cGVyLmMtMTYxNS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2Mjk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxdW90YXR5cGVzW10gPSBJTklUUUZOQU1FUztcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTYzMS1cbmZzL2V4dDQvc3VwZXIuYzoxNjMyOnN0YXRpYyBpbnQgZXh0NF93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTtcbmZzL2V4dDQvc3VwZXIuYzoxNjMzOnN0YXRpYyBpbnQgZXh0NF9hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpO1xuZnMvZXh0NC9zdXBlci5jOjE2MzQ6c3RhdGljIGludCBleHQ0X3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XG5mcy9leHQ0L3N1cGVyLmM6MTYzNTpzdGF0aWMgaW50IGV4dDRfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KTtcbmZzL2V4dDQvc3VwZXIuYzoxNjM2OnN0YXRpYyBpbnQgZXh0NF93cml0ZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTtcbmZzL2V4dDQvc3VwZXIuYzoxNjM3OnN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCxcbmZzL2V4dDQvc3VwZXIuYy0xNjM4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG5mcy9leHQ0L3N1cGVyLmM6MTYzOTpzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGNoYXIgKmRhdGEsXG5mcy9leHQ0L3N1cGVyLmMtMTY0MC1cdFx0XHQgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7XG5mcy9leHQ0L3N1cGVyLmM6MTY0MTpzdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLFxuZnMvZXh0NC9zdXBlci5jLTE2NDItXHRcdFx0XHRjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTtcbmZzL2V4dDQvc3VwZXIuYzoxNjQzOnN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXG5mcy9leHQ0L3N1cGVyLmMtMTY0NC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG5mcy9leHQ0L3N1cGVyLmMtMTY0NS1cbmZzL2V4dDQvc3VwZXIuYzoxNjQ2OnN0YXRpYyBzdHJ1Y3QgZHF1b3QgX19yY3UgKipleHQ0X2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvc3VwZXIuYy0xNjQ3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTY1MC1cbmZzL2V4dDQvc3VwZXIuYzoxNjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQ0X3F1b3RhX29wZXJhdGlvbnMgPSB7XG5mcy9leHQ0L3N1cGVyLmMtMTY1Mi1cdC5nZXRfcmVzZXJ2ZWRfc3BhY2VcdD0gZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2UsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2NjQtXG5mcy9leHQ0L3N1cGVyLmM6MTY2NTpzdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBleHQ0X3FjdGxfb3BlcmF0aW9ucyA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNjY2LVx0LnF1b3RhX29uXHQ9IGV4dDRfcXVvdGFfb24sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2NzYtXG5mcy9leHQ0L3N1cGVyLmM6MTY3NzpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTE2NzgtXHQuYWxsb2NfaW5vZGVcdD0gZXh0NF9hbGxvY19pbm9kZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cbmZzL2V4dDQvc3VwZXIuYzoxNzAwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXh0NF9leHBvcnRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3MDEtXHQuZW5jb2RlX2ZoID0gZ2VuZXJpY19lbmNvZGVfaW5vMzJfZmgsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3MDg9ZW51bSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3MzYtXG5mcy9leHQ0L3N1cGVyLmM6MTczNzpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZXJyb3JzW10gPSB7XG5mcy9leHQ0L3N1cGVyLmMtMTczOC1cdHtcJiMzNDtjb250aW51ZVwmIzM0OyxcdEVYVDRfTU9VTlRfRVJST1JTX0NPTlR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzQzLVxuZnMvZXh0NC9zdXBlci5jOjE3NDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RhdGFbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzQ1LVx0e1wmIzM0O2pvdXJuYWxcJiMzNDssXHRFWFQ0X01PVU5UX0pPVVJOQUxfREFUQX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3NTAtXG5mcy9leHQ0L3N1cGVyLmM6MTc1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZGF0YV9lcnJbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzUyLVx0e1wmIzM0O2Fib3J0XCYjMzQ7LFx0T3B0X2RhdGFfZXJyX2Fib3J0fSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc1Ni1cbmZzL2V4dDQvc3VwZXIuYzoxNzU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9qcWZtdFtdID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3NTgtXHR7XCYjMzQ7dmZzb2xkXCYjMzQ7LFx0UUZNVF9WRlNfT0xEfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc2My1cbmZzL2V4dDQvc3VwZXIuYzoxNzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9kYXhbXSA9IHtcbmZzL2V4dDQvc3VwZXIuYy0xNzY1LVx0e1wmIzM0O2Fsd2F5c1wmIzM0OyxcdE9wdF9kYXhfYWx3YXlzfSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTc3Ny0gKi9cbmZzL2V4dDQvc3VwZXIuYzoxNzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xuZnMvZXh0NC9zdXBlci5jLTE3NzktXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtic2RkZlwmIzM0OyxcdFx0T3B0X2JzZF9kZiksXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvc3VwZXIuYzoxOTcxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3Mge1xuZnMvZXh0NC9zdXBlci5jLTE5NzItXHRfX3UxNiBtYWdpYztcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk3OC1cbmZzL2V4dDQvc3VwZXIuYzoxOTc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3MgKlxuZnMvZXh0NC9zdXBlci5jLTE5ODAtZXh0NF9zYl9yZWFkX2VuY29kaW5nKGNvbnN0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjAxMz1zdHJ1Y3QgZXh0NF9mc19jb250ZXh0IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjA0My1cbmZzL2V4dDQvc3VwZXIuYzoyMDQ0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtMjA0NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxMjA9c3RhdGljIGludCB1bm5vdGVfcWZfbmFtZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGludCBxdHlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjEzMi1cbmZzL2V4dDQvc3VwZXIuYzoyMTMzOnN0YXRpYyBpbnQgZXh0NF9wYXJzZV90ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0sXG5mcy9leHQ0L3N1cGVyLmMtMjEzNC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjE4NT1FWFQ0X1RFU1RfQ1RYKG1vdW50X29wdDIpO1xuZnMvZXh0NC9zdXBlci5jLTIxODYtXG5mcy9leHQ0L3N1cGVyLmM6MjE4NzpzdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbmZzL2V4dDQvc3VwZXIuYy0yMTg4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjUyOD1zdGF0aWMgaW50IHBhcnNlX2FwcGx5X3NiX21vdW50X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjU4MS1cbmZzL2V4dDQvc3VwZXIuYzoyNTgyOnN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfcXVvdGFfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9leHQ0L3N1cGVyLmMtMjU4My1cdFx0XHRcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjYxOC0gKi9cbmZzL2V4dDQvc3VwZXIuYzoyNjE5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19xdW90YV9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9leHQ0L3N1cGVyLmMtMjYyMC1cdFx0XHRcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjczNi1cbmZzL2V4dDQvc3VwZXIuYzoyNzM3OnN0YXRpYyBpbnQgZXh0NF9jaGVja190ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTI3MzgtXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yNzc2LVxuZnMvZXh0NC9zdXBlci5jOjI3Nzc6c3RhdGljIHZvaWQgZXh0NF9hcHBseV90ZXN0X2R1bW15X2VuY3J5cHRpb24oc3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4LFxuZnMvZXh0NC9zdXBlci5jLTI3NzgtXHRcdFx0XHRcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjc4OC1cbmZzL2V4dDQvc3VwZXIuYzoyNzg5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvZXh0NC9zdXBlci5jLTI3OTAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yODcwLVxuZnMvZXh0NC9zdXBlci5jOjI4NzE6c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0yODcyLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjkwMy1cbmZzL2V4dDQvc3VwZXIuYzoyOTA0OnN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy0yOTA1LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjkzMC1cbmZzL2V4dDQvc3VwZXIuYzoyOTMxOnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3Nob3dfcXVvdGFfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbmZzL2V4dDQvc3VwZXIuYy0yOTMyLVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yOTY2PXN0YXRpYyBjb25zdCBjaGFyICp0b2tlbjJzdHIoaW50IHRva2VuKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yOTgwLSAqL1xuZnMvZXh0NC9zdXBlci5jOjI5ODE6c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMjk4Mi1cdFx0XHQgICAgICBpbnQgbm9kZWZzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMTA2LVxuZnMvZXh0NC9zdXBlci5jOjMxMDc6c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbmZzL2V4dDQvc3VwZXIuYy0zMTA4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzExMj1pbnQgZXh0NF9zZXFfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMxMjItXG5mcy9leHQ0L3N1cGVyLmM6MzEyMzpzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuZnMvZXh0NC9zdXBlci5jLTMxMjQtXHRcdFx0ICAgIGludCByZWFkX29ubHkpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTMxODE9aW50IGV4dDRfYWxsb2NfZmxleF9iZ19hcnJheShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3Qgbmdyb3VwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMjI3LVxuZnMvZXh0NC9zdXBlci5jOjMyMjg6c3RhdGljIGludCBleHQ0X2ZpbGxfZmxleF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMzIyOS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTMyNjEtXG5mcy9leHQ0L3N1cGVyLmM6MzI2MjpzdGF0aWMgX19sZTE2IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxuZnMvZXh0NC9zdXBlci5jLTMyNjMtXHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTMzMTY9dm9pZCBleHQ0X2dyb3VwX2Rlc2NfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMzMjQtLyogQ2FsbGVkIGF0IG1vdW50LXRpbWUsIHN1cGVyLWJsb2NrIGlzIGxvY2tlZCAqL1xuZnMvZXh0NC9zdXBlci5jOjMzMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtMzMyNi1cdFx0XHRcdCAgZXh0NF9mc2Jsa190IHNiX2Jsb2NrLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNDU4LSAqL1xuZnMvZXh0NC9zdXBlci5jOjM0NTk6c3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXG5mcy9leHQ0L3N1cGVyLmMtMzQ2MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM0OTMtICovXG5mcy9leHQ0L3N1cGVyLmM6MzQ5NDpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXG5mcy9leHQ0L3N1cGVyLmMtMzQ5NS17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTM1Njg9c3RhdGljIGV4dDRfZnNibGtfdCBkZXNjcmlwdG9yX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNjA2LSAqL1xuZnMvZXh0NC9zdXBlci5jOjM2MDc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0NF9nZXRfc3RyaXBlX3NpemUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTM2MDgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzc1MC0vKiBGaW5kIG5leHQgc3VpdGFibGUgZ3JvdXAgYW5kIHJ1biBleHQ0X2luaXRfaW5vZGVfdGFibGUgKi9cbmZzL2V4dDQvc3VwZXIuYzozNzUxOnN0YXRpYyBpbnQgZXh0NF9ydW5fbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXG5mcy9leHQ0L3N1cGVyLmMtMzc1Mi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM4MTEtICovXG5mcy9leHQ0L3N1cGVyLmM6MzgxMjpzdGF0aWMgdm9pZCBleHQ0X3JlbW92ZV9saV9yZXF1ZXN0KHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmVscilcbmZzL2V4dDQvc3VwZXIuYy0zODEzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzgyMS1cbmZzL2V4dDQvc3VwZXIuYzozODIyOnN0YXRpYyB2b2lkIGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtMzgyMy17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM4MzUtXG5mcy9leHQ0L3N1cGVyLmM6MzgzNjpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpleHQ0X2xhenlpbml0X3Rhc2s7XG5mcy9leHQ0L3N1cGVyLmMtMzgzNy1cbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzg0Ni0gKi9cbmZzL2V4dDQvc3VwZXIuYzozODQ3OnN0YXRpYyBpbnQgZXh0NF9sYXp5aW5pdF90aHJlYWQodm9pZCAqYXJnKVxuZnMvZXh0NC9zdXBlci5jLTM4NDgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0zOTUzLVxuZnMvZXh0NC9zdXBlci5jOjM5NTQ6c3RhdGljIHZvaWQgZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3Qodm9pZClcbmZzL2V4dDQvc3VwZXIuYy0zOTU1LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzk2Ny1cbmZzL2V4dDQvc3VwZXIuYzozOTY4OnN0YXRpYyBpbnQgZXh0NF9ydW5fbGF6eWluaXRfdGhyZWFkKHZvaWQpXG5mcy9leHQ0L3N1cGVyLmMtMzk2OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTM5OTEtICovXG5mcy9leHQ0L3N1cGVyLmM6Mzk5MjpzdGF0aWMgZXh0NF9ncm91cF90IGV4dDRfaGFzX3VuaW5pdF9pdGFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0zOTkzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDAxMS1cbmZzL2V4dDQvc3VwZXIuYzo0MDEyOnN0YXRpYyBpbnQgZXh0NF9saV9pbmZvX25ldyh2b2lkKVxuZnMvZXh0NC9zdXBlci5jLTQwMTMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00MDI5LVxuZnMvZXh0NC9zdXBlci5jOjQwMzA6c3RhdGljIHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmV4dDRfbGlfcmVxdWVzdF9uZXcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00MDMxLVx0XHRcdFx0XHQgICAgZXh0NF9ncm91cF90IHN0YXJ0KVxuLS1cbmZzL2V4dDQvc3VwZXIuYz00MDU3PWludCBleHQ0X3JlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDExOS0gKi9cbmZzL2V4dDQvc3VwZXIuYzo0MTIwOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9sYXp5aW5pdF90aHJlYWQodm9pZClcbmZzL2V4dDQvc3VwZXIuYy00MTIxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDI0OT1pbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDMwOC1cbmZzL2V4dDQvc3VwZXIuYzo0MzA5OnN0YXRpYyB2b2lkIGV4dDRfc2V0X3Jlc3ZfY2x1c3RlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MzEwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDMzOC1cbmZzL2V4dDQvc3VwZXIuYzo0MzM5OnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X3F1b3RhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MzQwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDM1My1cbmZzL2V4dDQvc3VwZXIuYzo0MzU0OnN0YXRpYyB2b2lkIGV4dDRfc2V0dXBfY3N1bV90cmlnZ2VyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDM1NS1cdFx0XHRcdCAgICBlbnVtIGV4dDRfam91cm5hbF90cmlnZ2VyX3R5cGUgdHlwZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDM2Ny1cbmZzL2V4dDQvc3VwZXIuYzo0MzY4OnN0YXRpYyB2b2lkIGV4dDRfZnJlZV9zYmkoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuZnMvZXh0NC9zdXBlci5jLTQzNjkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00Mzc3LVxuZnMvZXh0NC9zdXBlci5jOjQzNzg6c3RhdGljIHN0cnVjdCBleHQ0X3NiX2luZm8gKmV4dDRfYWxsb2Nfc2JpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDM3OS17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDMtXG5mcy9leHQ0L3N1cGVyLmM6NDQwNDpzdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXHRcdFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDYwLVxuZnMvZXh0NC9zdXBlci5jOjQ0NjE6c3RhdGljIGludCBleHQ0X2hhbmRsZV9jbHVzdGVyc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTQ0NjIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTIyLSAqL1xuZnMvZXh0NC9zdXBlci5jOjQ1MjM6c3RhdGljIHZvaWQgZXh0NF9hdG9taWNfd3JpdGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTQ1MjQte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NTQ4LVxuZnMvZXh0NC9zdXBlci5jOjQ1NDk6c3RhdGljIHZvaWQgZXh0NF9mYXN0X2NvbW1pdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ1NzMtXG5mcy9leHQ0L3N1cGVyLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfaW5vZGVfaW5mb19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDU3NS1cdFx0XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY0Ni0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvc3VwZXIuYzo0NjQ3OnN0YXRpYyBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbmZzL2V4dDQvc3VwZXIuYy00NjQ4LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY4Ny0jZWxzZVxuZnMvZXh0NC9zdXBlci5jOjQ2ODg6c3RhdGljIGlubGluZSBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcbmZzL2V4dDQvc3VwZXIuYy00Njg5LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDY5My1cbmZzL2V4dDQvc3VwZXIuYzo0Njk0OnN0YXRpYyBpbnQgZXh0NF9pbml0X21ldGFkYXRhX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuZnMvZXh0NC9zdXBlci5jLTQ2OTUte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzI5LVxuZnMvZXh0NC9zdXBlci5jOjQ3MzA6c3RhdGljIGludCBleHQ0X2NoZWNrX2ZlYXR1cmVfY29tcGF0aWJpbGl0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ3MzEtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ4MzMtXG5mcy9leHQ0L3N1cGVyLmM6NDgzNDpzdGF0aWMgaW50IGV4dDRfY2hlY2tfZ2VvbWV0cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00ODM1LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5MTItXG5mcy9leHQ0L3N1cGVyLmM6NDkxMzpzdGF0aWMgaW50IGV4dDRfZ3JvdXBfZGVzY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L3N1cGVyLmMtNDkxNC1cdFx0XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDk3Mi1cbmZzL2V4dDQvc3VwZXIuYzo0OTczOnN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy00OTc0LVx0XHRcdFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDU2LVxuZnMvZXh0NC9zdXBlci5jOjUwNTc6c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTA1OC17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwODktXG5mcy9leHQ0L3N1cGVyLmM6NTA5MDpzdGF0aWMgY29uc3QgY2hhciAqZXh0NF9oYXNfam91cm5hbF9vcHRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MDkxLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTExNC1cdFx0dW1pbihNQVhfUEFHRUNBQ0hFX09SREVSLCAoMTEgJiM0MzsgKHNiKS1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzIC0gUEFHRV9TSElGVCkpXG5mcy9leHQ0L3N1cGVyLmM6NTExNTpzdGF0aWMgdm9pZCBleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTUxMTYte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01MTI0LVxuZnMvZXh0NC9zdXBlci5jOjUxMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2xhcmdlX2ZvbGlvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTEyNi17XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgTW91bnQgRmFpbHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBgZmFpbGVkX21vdW50OGAgZXJyb3IsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIHdyb25nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgYGZhaWxlZF9tb3VudDhgIGlzIGRlZmluZWQgb3IgY2FsbGVkLgoKU2luY2UgdGhhdCBtaWdodCBiZSB0b28gbmFycm93LCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2guIEkmIzM5O2xsIGFsc28gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgZmFpbGVkX21vdW50YCBpbiBnZW5lcmFsLCBhbmQgdGhlbiBJJiMzOTtsbCBjb25zaWRlciBsb29raW5nIGludG8gYGV4dDRfZmlsbF9zdXBlcmAuIFRoaXMgaXMgYSBjb21tb24gZnVuY3Rpb24gdXNlZCBkdXJpbmcgbW91bnQgb3BlcmF0aW9ucywgc28gaXQgY291bGQgYmUgcmVsYXRlZC4gSSBhbSBmYW1pbGlhciB3aXRoIHRoYXQgcGFydCBvZiB0aGUgY29kZSwgc28gdGhhdCB3aWxsIGd1aWRlIG1lLgoKVG8gZ2V0IHNvbWUgY29udGV4dCwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgYXJlYSBvZiB0aGUgY29kZSBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBmYWlsdXJlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCBsaW5lcyA1NjUwIHRvIDU3NTAsIGFuZCBhbHNvIGxpbmVzIDU3MDAtNTgzMyBhbmQgdGhlaXIgZW5jbG9zaW5nIGZ1bmN0aW9uIGlmIHRoYXQgZ2l2ZXMgbWUgZW5vdWdoIGNsdWVzLiBCeSBmb2N1c2luZyBvbiB0aGlzIHJlZ2lvbiwgSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIHRoYXQgcmVsYXRlIHRvIHRoZXNlIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2ODA6XHRcdGlmIChlcnIpIHtcbjU2ODE6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBtYmFsbG9jICglZClcJiMzNDssXG41NjgyOlx0XHRcdFx0IGVycik7XG41NjgzOlx0XHRcdGdvdG8gZmFpbGVkX21vdW50NTtcbjU2ODQ6XHRcdH1cbjU2ODU6XHRcbjU2ODY6XHRcdC8qXG41Njg3Olx0XHQgKiBXZSBjYW4gb25seSBzZXQgdXAgdGhlIGpvdXJuYWwgY29tbWl0IGNhbGxiYWNrIG9uY2VcbjU2ODg6XHRcdCAqIG1iYWxsb2MgaXMgaW5pdGlhbGl6ZWRcbjU2ODk6XHRcdCAqL1xuNTY5MDpcdFx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpXG41NjkxOlx0XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9jb21taXRfY2FsbGJhY2sgPVxuNTY5MjpcdFx0XHRcdGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2s7XG41NjkzOlx0XG41Njk0Olx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mbGV4X2JnKHNiKSlcbjU2OTU6XHRcdFx0aWYgKCFleHQ0X2ZpbGxfZmxleF9pbmZvKHNiKSkge1xuNTY5NjpcdFx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbjU2OTc6XHRcdFx0XHQgICAgICAgXCYjMzQ7dW5hYmxlIHRvIGluaXRpYWxpemUgXCYjMzQ7XG41Njk4Olx0XHRcdFx0ICAgICAgIFwmIzM0O2ZsZXhfYmcgbWV0YSBpbmZvIVwmIzM0Oyk7XG41Njk5Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjU3MDA6XHRcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDY7XG41NzAxOlx0XHRcdH1cbjU3MDI6XHRcbjU3MDM6XHRcdGVyciA9IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzYiwgZmlyc3Rfbm90X3plcm9lZCk7XG41NzA0Olx0XHRpZiAoZXJyKVxuNTcwNTpcdFx0XHRnb3RvIGZhaWxlZF9tb3VudDY7XG41NzA2Olx0XG41NzA3Olx0XHRlcnIgPSBleHQ0X2luaXRfb3JwaGFuX2luZm8oc2IpO1xuNTcwODpcdFx0aWYgKGVycilcbjU3MDk6XHRcdFx0Z290byBmYWlsZWRfbW91bnQ3O1xuNTcxMDpcdCNpZmRlZiBDT05GSUdfUVVPVEFcbjU3MTE6XHRcdC8qIEVuYWJsZSBxdW90YSB1c2FnZSBkdXJpbmcgbW91bnQuICovXG41NzEyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9xdW90YShzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG41NzEzOlx0XHRcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XG41NzE0Olx0XHRcdGlmIChlcnIpXG41NzE1Olx0XHRcdFx0Z290byBmYWlsZWRfbW91bnQ4O1xuNTcxNjpcdFx0fVxuNTcxNzpcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXG41NzE4Olx0XG41NzE5Olx0XHQvKlxuNTcyMDpcdFx0ICogU2F2ZSB0aGUgb3JpZ2luYWwgYmRldiBtYXBwaW5nJiMzOTtzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxuNTcyMTpcdFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxuNTcyMjpcdFx0ICovXG41NzIzOlx0XHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXHUwMDI2c2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX21hcHBpbmctXHUwMDNld2JfZXJyLFxuNTcyNDpcdFx0XHRcdFx0IFx1MDAyNnNiaS1cdTAwM2VzX2JkZXZfd2JfZXJyKTtcbjU3MjU6XHRcdEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgfD0gRVhUNF9PUlBIQU5fRlM7XG41NzI2Olx0XHRleHQ0X29ycGhhbl9jbGVhbnVwKHNiLCBlcyk7XG41NzI3Olx0XHRFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xuNTcyODpcdFx0LypcbjU3Mjk6XHRcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcbjU3MzA6XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcbjU3MzE6XHRcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXG41NzMyOlx0XHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxuNTczMzpcdFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cbjU3MzQ6XHRcdCAqL1xuNTczNTpcdFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcbjU3MzY6XHRcdGlmIChuZWVkc19yZWNvdmVyeSkge1xuNTczNzpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZWNvdmVyeSBjb21wbGV0ZVwmIzM0Oyk7XG41NzM4Olx0XHRcdGVyciA9IGV4dDRfbWFya19yZWNvdmVyeV9jb21wbGV0ZShzYiwgZXMpO1xuNTczOTpcdFx0XHRpZiAoZXJyKVxuNTc0MDpcdFx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3NDE6XHRcdH1cbjU3NDI6XHRcbjU3NDM6XHRcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXHUwMDI2XHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXHUwMDNlc19iZGV2KSkge1xuNTc0NDpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuNTc0NTpcdFx0XHRcdCBcJiMzNDttb3VudGluZyB3aXRoIFxcXCYjMzQ7ZGlzY2FyZFxcXCYjMzQ7IG9wdGlvbiwgYnV0IHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBkaXNjYXJkXCYjMzQ7KTtcbjU3NDY6XHRcdFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcbjU3NDc6XHRcdH1cbjU3NDg6XHRcbjU3NDk6XHRcdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipUcmFjaW5nIEV4ZWN1dGlvbiBGbG93KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIGluaXRpYXRlcyBiZWZvcmUgYSBzcGVjaWZpYyBsaW5lIG9mIGNvZGUsIHNwZWNpZmljYWxseSBsaW5lIDU2ODAuIEl0JiMzOTtzIGEgY29tbW9uIGRlYnVnZ2luZyBvciBhbmFseXNpcyB0ZWNobmlxdWUuIEluc3RlYWQgb2YgYmxpbmRseSBzZWFyY2hpbmcgdGhlIGVudGlyZSBjb2RlYmFzZSwgSSYjMzk7bGwgdXNlIGEgc3RyYXRlZ2ljIGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgdG8gaW52ZXN0aWdhdGUgaXMgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUxNTAtNTIwMC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBsaW5lIDU2ODAgc3RhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBzZWN0aW9uIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBpdHMgZXhlY3V0aW9uIHBhdGggYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBUaGlzIGlzIGEgY29tbW9uIG1ldGhvZCBvZiByZXZlcnNlIGVuZ2luZWVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTE1MDpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbjUxNTE6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuNTE1MjpcdFx0aW50IGJsb2Nrc2l6ZTtcbjUxNTM6XHRcbjUxNTQ6XHRcdGJsb2Nrc2l6ZSA9IHNiX21pbl9ibG9ja3NpemUoc2IsIEVYVDRfTUlOX0JMT0NLX1NJWkUpO1xuNTE1NTpcdFx0aWYgKCFibG9ja3NpemUpIHtcbjUxNTY6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDt1bmFibGUgdG8gc2V0IGJsb2Nrc2l6ZVwmIzM0Oyk7XG41MTU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTE1ODpcdFx0fVxuNTE1OTpcdFxuNTE2MDpcdFx0LypcbjUxNjE6XHRcdCAqIFRoZSBleHQ0IHN1cGVyYmxvY2sgd2lsbCBub3QgYmUgYnVmZmVyIGFsaWduZWQgZm9yIG90aGVyIHRoYW4gMWtCXG41MTYyOlx0XHQgKiBibG9jayBzaXplcy4gIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSBidWZmZXIgc3RhcnQuXG41MTYzOlx0XHQgKi9cbjUxNjQ6XHRcdGlmIChibG9ja3NpemUgIT0gRVhUNF9NSU5fQkxPQ0tfU0laRSkge1xuNTE2NTpcdFx0XHRsb2dpY2FsX3NiX2Jsb2NrID0gc2JpLVx1MDAzZXNfc2JfYmxvY2sgKiBFWFQ0X01JTl9CTE9DS19TSVpFO1xuNTE2NjpcdFx0XHRvZmZzZXQgPSBkb19kaXYobG9naWNhbF9zYl9ibG9jaywgYmxvY2tzaXplKTtcbjUxNjc6XHRcdH0gZWxzZSB7XG41MTY4Olx0XHRcdGxvZ2ljYWxfc2JfYmxvY2sgPSBzYmktXHUwMDNlc19zYl9ibG9jaztcbjUxNjk6XHRcdH1cbjUxNzA6XHRcbjUxNzE6XHRcdGJoID0gZXh0NF9zYl9icmVhZF91bm1vdmFibGUoc2IsIGxvZ2ljYWxfc2JfYmxvY2spO1xuNTE3MjpcdFx0aWYgKElTX0VSUihiaCkpIHtcbjUxNzM6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDt1bmFibGUgdG8gcmVhZCBzdXBlcmJsb2NrXCYjMzQ7KTtcbjUxNzQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmgpO1xuNTE3NTpcdFx0fVxuNTE3NjpcdFx0LypcbjUxNzc6XHRcdCAqIE5vdGU6IHNfZXMgbXVzdCBiZSBpbml0aWFsaXplZCBhcyBzb29uIGFzIHBvc3NpYmxlIGJlY2F1c2VcbjUxNzg6XHRcdCAqICAgICAgIHNvbWUgZXh0NCBtYWNyby1pbnN0cnVjdGlvbnMgZGVwZW5kIG9uIGl0cyB2YWx1ZVxuNTE3OTpcdFx0ICovXG41MTgwOlx0XHRlcyA9IChzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqKSAoYmgtXHUwMDNlYl9kYXRhICYjNDM7IG9mZnNldCk7XG41MTgxOlx0XHRzYmktXHUwMDNlc19lcyA9IGVzO1xuNTE4MjpcdFx0c2ItXHUwMDNlc19tYWdpYyA9IGxlMTZfdG9fY3B1KGVzLVx1MDAzZXNfbWFnaWMpO1xuNTE4MzpcdFx0aWYgKHNiLVx1MDAzZXNfbWFnaWMgIT0gRVhUNF9TVVBFUl9NQUdJQykge1xuNTE4NDpcdFx0XHRpZiAoIXNpbGVudClcbjUxODU6XHRcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFwmIzM0O1ZGUzogQ2FuJiMzOTt0IGZpbmQgZXh0NCBmaWxlc3lzdGVtXCYjMzQ7KTtcbjUxODY6XHRcdFx0Z290byBvdXQ7XG41MTg3Olx0XHR9XG41MTg4Olx0XG41MTg5Olx0XHRpZiAobGUzMl90b19jcHUoZXMtXHUwMDNlc19sb2dfYmxvY2tfc2l6ZSkgXHUwMDNlXG41MTkwOlx0XHQgICAgKEVYVDRfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XG41MTkxOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbjUxOTI6XHRcdFx0XHQgXCYjMzQ7SW52YWxpZCBsb2cgYmxvY2sgc2l6ZTogJXVcJiMzNDssXG41MTkzOlx0XHRcdFx0IGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfbG9nX2Jsb2NrX3NpemUpKTtcbjUxOTQ6XHRcdFx0Z290byBvdXQ7XG41MTk1Olx0XHR9XG41MTk2Olx0XHRpZiAobGUzMl90b19jcHUoZXMtXHUwMDNlc19sb2dfY2x1c3Rlcl9zaXplKSBcdTAwM2VcbjUxOTc6XHRcdCAgICAoRVhUNF9NQVhfQ0xVU1RFUl9MT0dfU0laRSAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFKSkge1xuNTE5ODpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG41MTk5Olx0XHRcdFx0IFwmIzM0O0ludmFsaWQgbG9nIGNsdXN0ZXIgc2l6ZTogJXVcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqRGVidWdnaW5nIFRpbWUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBUaGUgaXNzdWUgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbjsgSSBzdXNwZWN0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gUmlnaHQsIHNvLCBwZXIgdGhlIHVzdWFsLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGxpbmVzIDUxMzAtNTE1NS4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBsb2dpYywgdmFyaWFibGVzIGFuZCByZXR1cm4gdG8gZGlhZ25vc2UgdGhpcyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTEzMDpcdFx0XHRlcnJfc3RyID0gXCYjMzQ7ZW5jcnlwdFwmIzM0OztcbjUxMzE6XHRcbjUxMzI6XHRcdGlmICghZXJyX3N0cikge1xuNTEzMzpcdFx0XHRleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzYik7XG41MTM0Olx0XHR9IGVsc2UgaWYgKHNiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzZSBQQUdFX1NJWkUpIHtcbjUxMzU6XHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcJiMzNDticyglbHUpIFx1MDAzZSBwcyglbHUpIHVuc3VwcG9ydGVkIGZvciAlc1wmIzM0OyxcbjUxMzY6XHRcdFx0XHQgc2ItXHUwMDNlc19ibG9ja3NpemUsIFBBR0VfU0laRSwgZXJyX3N0cik7XG41MTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTEzODpcdFx0fVxuNTEzOTpcdFxuNTE0MDpcdFx0cmV0dXJuIDA7XG41MTQxOlx0fVxuNTE0MjpcdFxuNTE0MzpcdHN0YXRpYyBpbnQgZXh0NF9sb2FkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCAqbHNiLFxuNTE0NDpcdFx0XHRcdCAgIGludCBzaWxlbnQpXG41MTQ1Olx0e1xuNTE0NjpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG41MTQ3Olx0XHRzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7XG41MTQ4Olx0XHRleHQ0X2ZzYmxrX3QgbG9naWNhbF9zYl9ibG9jaztcbjUxNDk6XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDtcbjUxNTA6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG41MTUxOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjUxNTI6XHRcdGludCBibG9ja3NpemU7XG41MTUzOlx0XG41MTU0Olx0XHRibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBFWFQ0X01JTl9CTE9DS19TSVpFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIGV4dDQgU3VwZXJibG9jayBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGV4dDRfbG9hZF9zdXBlcmAg4oCTIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBzdXBlcmJsb2NrLCBhIGNyaXRpY2FsIHN0cnVjdHVyZS4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCBhbmQgdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hlcmUgdGhhdCBjb2RlIGJsb2NrIGlzLiBJdCBsb29rcyBsaWtlIGl0IHNwYW5zIGZyb20gbGluZSA1MTQzIHRvIGFib3V0IDU4MzMsIHJvdWdobHkuIFRoZSBsYWJlbHMgYGZhaWxlZF9tb3VudDpgIGFuZCBgb3V0X2ZhaWw6YCBsaWtlbHkgbWFyayB0aGUgZXhpdCBwb2ludHMgZm9yIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2JpLSZndDtzX2Vycl9yZXBvcnRgIHRpbWVyIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVuIGFuZCBob3cgdGhlc2UgdGltZXJzIGFyZSBzZXQgdXAsIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuIEEgcXVpY2sgZ3JlcCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgaXMgdGhlIGJlc3Qgd2F5IHRvIGdldCB0aGF0IGluZm9ybWF0aW9uLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGxpc3Qgb2YgYWxsIGluc3RhbmNlcyBvZiBgc19lcnJfcmVwb3J0YCB0aGF0IEkgY2FuIHRoZW4gYW5hbHl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c19lcnJfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xNTkyPXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE3NDgtXHQvKiB0aW1lciBmb3IgcGVyaW9kaWMgZXJyb3Igc3RhdHMgcHJpbnRpbmcgKi9cbmZzL2V4dDQvZXh0NC5oOjE3NDk6XHRzdHJ1Y3QgdGltZXJfbGlzdCBzX2Vycl9yZXBvcnQ7XG5mcy9leHQ0L2V4dDQuaDoxNzUwOlx0LyogdGltZW91dCBpbiBzZWNvbmRzIGZvciBzX2Vycl9yZXBvcnQ7IDAgZGlzYWJsZXMgdGhlIHRpbWVyLiAqL1xuZnMvZXh0NC9leHQ0Lmg6MTc1MTpcdHVuc2lnbmVkIGxvbmcgc19lcnJfcmVwb3J0X3NlYztcbmZzL2V4dDQvZXh0NC5oLTE3NTItXG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTMyMi1cdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuZnMvZXh0NC9zdXBlci5jOjEzMjM6XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuZnMvZXh0NC9zdXBlci5jLTEzMjQtXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbmZzL2V4dDQvc3VwZXIuYy0zNzA2LXtcbmZzL2V4dDQvc3VwZXIuYzozNzA3Olx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy0zNzA4LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cdTAwM2VzX3NiO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxuZnMvZXh0NC9zdXBlci5jOjM3NDY6XHRpZiAoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXG5mcy9leHQ0L3N1cGVyLmM6Mzc0NzpcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzNTc9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU0NTgtXG5mcy9leHQ0L3N1cGVyLmM6NTQ1OTpcdHRpbWVyX3NldHVwKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIHByaW50X2RhaWx5X2Vycm9yX2luZm8sIDApO1xuZnMvZXh0NC9zdXBlci5jLTU0NjAtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmktXHUwMDNlc19lcnJvcl9sb2NrKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc0OS1cdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG5mcy9leHQ0L3N1cGVyLmM6NTc1MDpcdFx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1x0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXG5mcy9leHQ0L3N1cGVyLmM6NTc1MTpcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3VwZXIuYy01NzUzLVx0fVxuZnMvZXh0NC9zdXBlci5jOjU3NTQ6XHRzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXG5mcy9leHQ0L3N1cGVyLmMtNTc1NS1cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODExLVx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYzo1ODEyOlx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy01ODEzLVx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjI1MD1zdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy02MzEwLVx0XHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24mIzM5O3QgYmVlblxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XHRcdCAqIHN0YXJ0ZWQgYWxyZWFkeSBhbmQgc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cbmZzL2V4dDQvc3VwZXIuYy02MzEyLVx0XHQgKi9cbmZzL2V4dDQvc3VwZXIuYzo2MzEzOlx0XHRpZiAoIWVzLVx1MDAzZXNfZXJyb3JfY291bnQgXHUwMDI2XHUwMDI2ICFzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcbmZzL2V4dDQvc3VwZXIuYzo2MzE0Olx0XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuZnMvZXh0NC9zdXBlci5jOjYzMTU6XHRcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3VwZXIuYy02MzE2LVx0XHRsZTMyX2FkZF9jcHUoXHUwMDI2ZXMtXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVx1MDAzZXNfYWRkX2Vycm9yX2NvdW50KTtcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MTM0PXN0YXRpYyBzc2l6ZV90IGVycl9yZXBvcnRfc2VjX3N0b3JlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMTQ3LVxuZnMvZXh0NC9zeXNmcy5jOjE0ODpcdGlmIChzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9PSB0KVx0XHQvKm5vdGhpbmcgdG8gZG8qL1xuZnMvZXh0NC9zeXNmcy5jLTE0OS1cdFx0Z290byBvdXQ7XG5mcy9leHQ0L3N5c2ZzLmM6MTUwOlx0ZWxzZSBpZiAoIXNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIFx1MDAyNlx1MDAyNiB0KSB7XG5mcy9leHQ0L3N5c2ZzLmM6MTUxOlx0XHR0aW1lcl9zZXR1cChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBwcmludF9kYWlseV9lcnJvcl9pbmZvLCAwKTtcbmZzL2V4dDQvc3lzZnMuYzoxNTI6XHR9IGVsc2UgaWYgKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIFx1MDAyNlx1MDAyNiAhdCkge1xuZnMvZXh0NC9zeXNmcy5jOjE1MzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N5c2ZzLmMtMTU0LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMTU2LVxuZnMvZXh0NC9zeXNmcy5jOjE1NzpcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gdDtcbmZzL2V4dDQvc3lzZnMuYzoxNTg6XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbmZzL2V4dDQvc3lzZnMuYy0xNTktXG4tLVxuZnMvZXh0NC9zeXNmcy5jPTI0OT1FWFQ0X0FUVFJfT0ZGU0VUKG1iX2Jlc3RfYXZhaWxfbWF4X3RyaW1fb3JkZXIsIDA2NDQsIG1iX29yZGVyLFxuZnMvZXh0NC9zeXNmcy5jLTI1MC1cdFx0IGV4dDRfc2JfaW5mbywgc19tYl9iZXN0X2F2YWlsX21heF90cmltX29yZGVyKTtcbmZzL2V4dDQvc3lzZnMuYzoyNTE6RVhUNF9BVFRSX09GRlNFVChlcnJfcmVwb3J0X3NlYywgMDY0NCwgZXJyX3JlcG9ydF9zZWMsIGV4dDRfc2JfaW5mbywgc19lcnJfcmVwb3J0X3NlYyk7XG5mcy9leHQ0L3N5c2ZzLmMtMjUyLUVYVDRfUldfQVRUUl9TQklfVUkoaW5vZGVfZ29hbCwgc19pbm9kZV9nb2FsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIGZyb20gYHRpbWVyX2RlbGV0ZV9zeW5jYCB0byBgdGltZXJfc2h1dGRvd25fc3luY2AgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBpbiB0aGUgYGZhaWxlZF9tb3VudDNgIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgZXh0NF9zYl9pbmZvYCBhbmQgaXRzIGFzc29jaWF0ZWQgYHNfZXJyX3JlcG9ydGAgdGltZXIuCgpJIHJlbWVtYmVyIHRoYXQgYHRpbWVyX3NodXRkb3duX3N5bmNgIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkLCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY3VycmVudCBjYWxsYmFjayB0byBmaW5pc2guIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nOiBjb3VsZCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AsIHdoaWNoIGlzIHRoZSBjYWxsYmFjayBmb3IgYHNfZXJyX3JlcG9ydGAsIHBvdGVudGlhbGx5IHJlLWFybSB0aGUgdGltZXIgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBkZWxldGVkPyBJIGNoZWNrIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCBhbmQgeWVwLCB0aGVyZSYjMzk7cyBhIGBtb2RfdGltZXJgIGNhbGwgaW4gdGhlcmUsIHJlLWFybWluZyB0aGUgdGltZXIgYmFzZWQgb24gYHNiaS0mZ3Q7c19lcnJfcmVwb3J0X3NlY2AuIFNvLCB0aGUgb2xkIGNvZGUsIHVzaW5nIGB0aW1lcl9kZWxldGVfc3luY2AsIGhhZCBhICpkZWZpbml0ZSogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgdGltZXIgd2FzIGRlbGV0ZWQgd2hpbGUgdGhlIGNhbGxiYWNrIHdhcyBydW5uaW5nLCBpdCBjb3VsZCBwb3RlbnRpYWxseSByZS1hcm0gdGhlIHRpbWVyIGp1c3QgYWZ0ZXIgdGhlIGRlbGV0ZSBmaW5pc2hlZCwgY3JlYXRpbmcgYSBVc2UtQWZ0ZXItRnJlZSBzaXR1YXRpb24gb24gYHNiaWAgd2hlbiBpdCBnZXRzIGZyZWVkLiBgdGltZXJfc2h1dGRvd25fc3luY2AgYXZvaWRzIHRoYXQgcmUtYXJtaW5nLiBHb29kIGNhdGNoLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enphYmxlLiBJIGFwcGx5IG15IHRyaWFnZSBjcml0ZXJpYToKCiogICAqKlJlYWNoYWJpbGl0eToqKiBFeHQ0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciB1c2VzIGl0IGV4dGVuc2l2ZWx5LCBpbmNsdWRpbmcgbW91bnRpbmcgaW50ZW50aW9uYWxseSBjb3JydXB0ZWQgaW1hZ2VzIHRvIHRyaWdnZXIgbW91bnQgZmFpbHVyZXMuIFRoZSBgZmFpbGVkX21vdW50M2AgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoqICAgKipDb2RlIE1vZGlmaWNhdGlvbjoqKiBZZXMsIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBpcyBhIGNoYW5nZSBmcm9tIGRlbGV0ZSB0byBzaHV0ZG93bi4gVGhpcyBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgdHJ1c3QgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IGNsYWltcywgaWYgdGhlIGNvZGUgY2hhbmdlcywgaXQgKm11c3QqIGJlIGZ1enplZC4gQW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBFeHQ0IGlzIGEgY29yZSBWRlMgZmlsZXN5c3RlbS4KClNvLCB0aGlzIGhpdHMgbXkgZnV6emluZyBjcml0ZXJpYSBwZXJmZWN0bHkuIEkgYW0gY2VydGFpbiB0aGF0IHRoaXMgaXMgV29ydGhGdXp6aW5nID0gdHJ1ZS4gVGltZSB0byBjaGVjayB0aGUgRm9jdXNTeW1ib2xzIGFuZCBFbmFibGVDb25maWdzLiBJIHdpbGwgd2FudCB0byBmb2N1cyBvbiBmdW5jdGlvbnMgbmVhciBvciBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgZXhhY3QgY2hhbmdlIHRha2VzIHBsYWNlLCBhbmQgaG93IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGNoYW5nZXMuIEkgd2lsbCBjaGVjayBsaW5lIDUzNTcgaW4gYGZzL2V4dDQvc3VwZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzU1Olx0fVxuNTM1NjpcdFxuNTM1NzpcdHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuNTM1ODpcdHtcbjUzNTk6XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IE5VTEw7XG41MzYwOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbjUzNjE6XHRcdGV4dDRfZnNibGtfdCBsb2dpY2FsX3NiX2Jsb2NrO1xuNTM2MjpcdFx0c3RydWN0IGlub2RlICpyb290O1xuNTM2MzpcdFx0aW50IG5lZWRzX3JlY292ZXJ5O1xuNTM2NDpcdFx0aW50IGVycjtcbjUzNjU6XHRcdGV4dDRfZ3JvdXBfdCBmaXJzdF9ub3RfemVyb2VkO1xuNTM2NjpcdFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbjUzNjc6XHRcdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuNTM2ODpcdFxuNTM2OTpcdFx0LyogU2V0IGRlZmF1bHRzIGZvciB0aGUgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSBzZXQgZHVyaW5nIHBhcnNpbmcgKi9cbjUzNzA6XHRcdGlmICghKGN0eC1cdTAwM2VzcGVjIFx1MDAyNiBFWFQ0X1NQRUNfSk9VUk5BTF9JT1BSSU8pKVxuNTM3MTpcdFx0XHRjdHgtXHUwMDNlam91cm5hbF9pb3ByaW8gPSBFWFQ0X0RFRl9KT1VSTkFMX0lPUFJJTztcbjUzNzI6XHRcbjUzNzM6XHRcdHNiaS1cdTAwM2VzX2lub2RlX3JlYWRhaGVhZF9ibGtzID0gRVhUNF9ERUZfSU5PREVfUkVBREFIRUFEX0JMS1M7XG41Mzc0Olx0XHRzYmktXHUwMDNlc19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQgPVxuNTM3NTpcdFx0XHRwYXJ0X3N0YXRfcmVhZChzYi1cdTAwM2VzX2JkZXYsIHNlY3RvcnNbU1RBVF9XUklURV0pO1xuNTM3NjpcdFxuNTM3NzpcdFx0ZXJyID0gZXh0NF9sb2FkX3N1cGVyKHNiLCBcdTAwMjZsb2dpY2FsX3NiX2Jsb2NrLCBzaWxlbnQpO1xuNTM3ODpcdFx0aWYgKGVycilcbjUzNzk6XHRcdFx0Z290byBvdXRfZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0OTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IGNvZGUgc25pcHBldDoKCioqRGVidWdnaW5nIHRoZSBleHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSYjMzk7cyBpbml0aWFsaXphdGlvbi4gTXkgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzcGVjaWZpY2FsbHkgbGluZSA1ODEyLiBUaGF0IGxpbmUgY2FsbHMgYHRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtzYmktJmd0O3NfZXJyX3JlcG9ydCk7YC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMgcmVsYXRlZCB0byBlcnJvciByZXBvcnRpbmcgZHVyaW5nIHRoZSBmaWxlc3lzdGVtJiMzOTtzIHN0YXJ0dXAuCgpOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBfX2V4dDRfZmlsbF9zdXBlcmAuIEFmdGVyIGEgcXVpY2sgbG9va3VwLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZXh0NF9maWxsX3N1cGVyYC4KClNpbmNlIEkga25vdyBgZXh0NF9maWxsX3N1cGVyYCBjYWxscyBgX19leHQ0X2ZpbGxfc3VwZXJgLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA1ODM1IGluIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaW4gd2hpY2ggdGhlIGVycm9yIGlzIGJlaW5nIHJlcG9ydGVkLiBJJiMzOTttIGhvcGluZyB0byBnZXQgbW9yZSBjb250ZXh0IG9uIGhvdyB0aGlzIGNhbGwgc2VxdWVuY2UgaXMgc3RydWN0dXJlZCB0byBzZWUgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGJlIG9jY3VycmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4MzU6XHRzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG41ODM2Olx0e1xuNTgzNzpcdFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbjU4Mzg6XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTtcbjU4Mzk6XHRcdGNvbnN0IGNoYXIgKmRlc2NyO1xuNTg0MDpcdFx0aW50IHJldDtcbjU4NDE6XHRcbjU4NDI6XHRcdHNiaSA9IGV4dDRfYWxsb2Nfc2JpKHNiKTtcbjU4NDM6XHRcdGlmICghc2JpKVxuNTg0NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjU4NDU6XHRcbjU4NDY6XHRcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IHNiaTtcbjU4NDc6XHRcbjU4NDg6XHRcdC8qIENsZWFudXAgc3VwZXJibG9jayBuYW1lICovXG41ODQ5Olx0XHRzdHJyZXBsYWNlKHNiLVx1MDAzZXNfaWQsICYjMzk7LyYjMzk7LCAmIzM5OyEmIzM5Oyk7XG41ODUwOlx0XG41ODUxOlx0XHRzYmktXHUwMDNlc19zYl9ibG9jayA9IDE7XHQvKiBEZWZhdWx0IHN1cGVyIGJsb2NrIGxvY2F0aW9uICovXG41ODUyOlx0XHRpZiAoY3R4LVx1MDAzZXNwZWMgXHUwMDI2IEVYVDRfU1BFQ19zX3NiX2Jsb2NrKVxuNTg1MzpcdFx0XHRzYmktXHUwMDNlc19zYl9ibG9jayA9IGN0eC1cdTAwM2VzX3NiX2Jsb2NrO1xuNTg1NDpcdFxuNTg1NTpcdFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcbjU4NTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG41ODU3Olx0XHRcdGdvdG8gZnJlZV9zYmk7XG41ODU4Olx0XG41ODU5Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTg2MDpcdFx0XHRpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKVxuNTg2MTpcdFx0XHRcdGRlc2NyID0gXCYjMzQ7IGpvdXJuYWxsZWQgZGF0YSBtb2RlXCYjMzQ7O1xuNTg2MjpcdFx0XHRlbHNlIGlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9PUkRFUkVEX0RBVEEpXG41ODYzOlx0XHRcdFx0ZGVzY3IgPSBcJiMzNDsgb3JkZXJlZCBkYXRhIG1vZGVcJiMzNDs7XG41ODY0Olx0XHRcdGVsc2VcbjU4NjU6XHRcdFx0XHRkZXNjciA9IFwmIzM0OyB3cml0ZWJhY2sgZGF0YSBtb2RlXCYjMzQ7O1xuNTg2NjpcdFx0fSBlbHNlXG41ODY3Olx0XHRcdGRlc2NyID0gXCYjMzQ7b3V0IGpvdXJuYWxcJiMzNDs7XG41ODY4Olx0XG41ODY5Olx0XHRpZiAoX19fcmF0ZWxpbWl0KFx1MDAyNmV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdCwgXCYjMzQ7RVhUNC1mcyBtb3VudFwmIzM0OykpXG41ODcwOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFwmIzM0O21vdW50ZWQgZmlsZXN5c3RlbSAlcFUgJXMgd2l0aCVzLiBcJiMzNDtcbjU4NzE6XHRcdFx0XHQgXCYjMzQ7UXVvdGEgbW9kZTogJXMuXCYjMzQ7LCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQsXG41ODcyOlx0XHRcdFx0IHNiX3Jkb25seShzYikgPyBcJiMzNDtyb1wmIzM0OyA6IFwmIzM0O3Ivd1wmIzM0OywgZGVzY3IsXG41ODczOlx0XHRcdFx0IGV4dDRfcXVvdGFfbW9kZShzYikpO1xuNTg3NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRha2UgYSBsb29rIGF0IGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcsIGFuZCB0aGF0IGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGl0IG1pZ2h0IGhvbGQgc29tZSByZWxldmFudCBjbHVlcyB0byB0aGUgaXNzdWUuIFRoZW4sIEkgbmVlZCB0byBnZXQgbW9yZSBncmFudWxhci4gTGluZSAzNzA1IHRvIDM3NTAgaW4gYGZzL2V4dDQvc3VwZXIuY2AuLi4gdGhhdCBzZWN0aW9uIG9mIGNvZGUgaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBlcnJvciBleGlzdHMgaW4gdGhlIGxvd2VyIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgY2h1bmsgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3MDU6XHR2b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4zNzA2Olx0e1xuMzcwNzpcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcbjM3MDg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXHUwMDNlc19zYjtcbjM3MDk6XHRcdHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS1cdTAwM2VzX2VzO1xuMzcxMDpcdFxuMzcxMTpcdFx0aWYgKGVzLVx1MDAzZXNfZXJyb3JfY291bnQpXG4zNzEyOlx0XHRcdC8qIGZzY2sgbmV3ZXIgdGhhbiB2MS40MS4xMyBpcyBuZWVkZWQgdG8gY2xlYW4gdGhpcyBjb25kaXRpb24uICovXG4zNzEzOlx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX05PVElDRSwgXCYjMzQ7ZXJyb3IgY291bnQgc2luY2UgbGFzdCBmc2NrOiAldVwmIzM0OyxcbjM3MTQ6XHRcdFx0XHQgbGUzMl90b19jcHUoZXMtXHUwMDNlc19lcnJvcl9jb3VudCkpO1xuMzcxNTpcdFx0aWYgKGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfdGltZSkge1xuMzcxNjpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7RVhUNC1mcyAoJXMpOiBpbml0aWFsIGVycm9yIGF0IHRpbWUgJWxsdTogJS4qczolZFwmIzM0OyxcbjM3MTc6XHRcdFx0ICAgICAgIHNiLVx1MDAzZXNfaWQsXG4zNzE4Olx0XHRcdCAgICAgICBleHQ0X2dldF90c3RhbXAoZXMsIHNfZmlyc3RfZXJyb3JfdGltZSksXG4zNzE5Olx0XHRcdCAgICAgICAoaW50KSBzaXplb2YoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jKSxcbjM3MjA6XHRcdFx0ICAgICAgIGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfZnVuYyxcbjM3MjE6XHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfZmlyc3RfZXJyb3JfbGluZSkpO1xuMzcyMjpcdFx0XHRpZiAoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pXG4zNzIzOlx0XHRcdFx0cHJpbnRrKEtFUk5fQ09OVCBcJiMzNDs6IGlub2RlICV1XCYjMzQ7LFxuMzcyNDpcdFx0XHRcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cdTAwM2VzX2ZpcnN0X2Vycm9yX2lubykpO1xuMzcyNTpcdFx0XHRpZiAoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaylcbjM3MjY6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogYmxvY2sgJWxsdVwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylcbjM3Mjc6XHRcdFx0XHQgICAgICAgbGU2NF90b19jcHUoZXMtXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaykpO1xuMzcyODpcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0O1xcblwmIzM0Oyk7XG4zNzI5Olx0XHR9XG4zNzMwOlx0XHRpZiAoZXMtXHUwMDNlc19sYXN0X2Vycm9yX3RpbWUpIHtcbjM3MzE6XHRcdFx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O0VYVDQtZnMgKCVzKTogbGFzdCBlcnJvciBhdCB0aW1lICVsbHU6ICUuKnM6JWRcJiMzNDssXG4zNzMyOlx0XHRcdCAgICAgICBzYi1cdTAwM2VzX2lkLFxuMzczMzpcdFx0XHQgICAgICAgZXh0NF9nZXRfdHN0YW1wKGVzLCBzX2xhc3RfZXJyb3JfdGltZSksXG4zNzM0Olx0XHRcdCAgICAgICAoaW50KSBzaXplb2YoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMpLFxuMzczNTpcdFx0XHQgICAgICAgZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMsXG4zNzM2Olx0XHRcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cdTAwM2VzX2xhc3RfZXJyb3JfbGluZSkpO1xuMzczNzpcdFx0XHRpZiAoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2lubylcbjM3Mzg6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogaW5vZGUgJXVcJiMzNDssXG4zNzM5Olx0XHRcdFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVx1MDAzZXNfbGFzdF9lcnJvcl9pbm8pKTtcbjM3NDA6XHRcdFx0aWYgKGVzLVx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaylcbjM3NDE6XHRcdFx0XHRwcmludGsoS0VSTl9DT05UIFwmIzM0OzogYmxvY2sgJWxsdVwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylcbjM3NDI6XHRcdFx0XHQgICAgICAgbGU2NF90b19jcHUoZXMtXHUwMDNlc19sYXN0X2Vycm9yX2Jsb2NrKSk7XG4zNzQzOlx0XHRcdHByaW50ayhLRVJOX0NPTlQgXCYjMzQ7XFxuXCYjMzQ7KTtcbjM3NDQ6XHRcdH1cbjM3NDU6XHRcbjM3NDY6XHRcdGlmIChzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcbjM3NDc6XHRcdFx0bW9kX3RpbWVyKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG4zNzQ4Olx0fVxuMzc0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIGV4dDQqKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBJIGtub3cgdGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHQ0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGxvb2sgYXQgYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgZXh0NCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgYENPTkZJR2AgdmFsdWUgaXMgc2V0IHRvIGBFWFQ0X0ZTYCwgd2hpY2ggdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgRVhUNCBmaWxlc3lzdGVtLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGluaXRpYWxpemluZyBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYEZvY3VzU3ltYm9sc2AgaGVyZSwgYW5kIHRob3NlIGFyZSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBgZXh0NF9maWxsX3N1cGVyYCwgYW5kIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYC4gVGhlbiBJIHNlZSBgc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKWAuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHVzZWZ1bCB2YXJpYXRpb24uIGB2b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpYCBpcyB0aGUgb3RoZXIgZm9jdXMsIHdoaWNoIGxvb2tzIGxpa2UgYW4gZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uLiBOb3csIGBleHQ0X2ZpbGxfc3VwZXJgIGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24sIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3MgZWl0aGVyIHBhcnQgb2YgYGV4dDRfY29udGV4dF9vcHNgIG9yIGlzIGNhbGxlZCBieSBgZXh0NF9nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZXh0NF9maWxsX3N1cGVyYCBpcyBhY3R1YWxseSBjYWxsZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2JhbGxvYy5jPTIzOT11bnNpZ25lZCBleHQ0X2ZyZWVfY2x1c3RlcnNfYWZ0ZXJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvYmFsbG9jLmMtMjU0LSAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suICBUaGUgZGVzY3JpcHRvcnMgYXJlIGxvYWRlZCBpbiBtZW1vcnlcbmZzL2V4dDQvYmFsbG9jLmM6MjU1OiAqIHdoZW4gYSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIChzZWUgZXh0NF9maWxsX3N1cGVyKS5cbmZzL2V4dDQvYmFsbG9jLmMtMjU2LSAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00NzM5PXN0YXRpYyBpbnQgZXh0NF9pbm9kZV9ibG9ja3Nfc2V0KHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQ3NTktXHQgKiBhbGxvd2VkIHRoaXMsIHNiLVx1MDAzZXNfbWF4Ynl0ZXMgd2FzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGh1Z2VfZmlsZVxuZnMvZXh0NC9pbm9kZS5jOjQ3NjA6XHQgKiBmZWF0dXJlIGluIGV4dDRfZmlsbF9zdXBlcigpLlxuZnMvZXh0NC9pbm9kZS5jLTQ3NjEtXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0xMDYxPXN0YXRpYyBpbnQgZXh0NF9tYl9zY2FuX2dyb3Vwc19iZXN0X2F2YWlsKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMTA4NS1cdFx0ICogV2UgYXJlIGFzc3VtaW5nIHRoYXQgc3RyaXBlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2ZcbmZzL2V4dDQvbWJhbGxvYy5jOjEwODY6XHRcdCAqIGNsdXN0ZXIgcmF0aW8gb3RoZXJ3aXNlIF9fZXh0NF9maWxsX3N1cGVyIGV4aXN0cyBlYXJseS5cbmZzL2V4dDQvbWJhbGxvYy5jLTEwODctXHRcdCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzUwPXN0YXRpYyBib29sIGV4dDRfaXNfc3RyaXBlX2luY29tcGF0aWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHN0cmlwZSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTM1Ni1cbmZzL2V4dDQvc3VwZXIuYzo1MzU3OnN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTUzNTgte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01Nzc0PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4MzQtXG5mcy9leHQ0L3N1cGVyLmM6NTgzNTpzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTgzNi17XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4NTQtXG5mcy9leHQ0L3N1cGVyLmM6NTg1NTpcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTg1Ni1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4ODU9c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2V4dDQvc3VwZXIuYy01ODg2LXtcbmZzL2V4dDQvc3VwZXIuYzo1ODg3Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGV4dDRfZmlsbF9zdXBlcik7XG5mcy9leHQ0L3N1cGVyLmMtNTg4OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk4CgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYF9fZXh0NF9maWxsX3N1cGVyKClgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbml0aWFsaXphdGlvbi4gVGhleSYjMzk7cmUgc3dhcHBpbmcgb3V0IGB0aW1lcl9kZWxldGVfc3luYygpYCBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmMoKWAgZm9yIGBzYmktJmd0O3NfZXJyX3JlcG9ydGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgZW5zdXJlcyB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIHRpbWVyLCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AsIGlzICpjb21wbGV0ZWx5KiBzaHV0IGRvd24gYmVmb3JlIHRoZSBzdXBlcmJsb2NrIGlzIGZyZWVkLiBQcmV2ZW50cyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlcyBpdCBjYW7igJl0IGJlIHJlLWFybWVkIGFmdGVyIHRoZSBtb3VudCBmYWlscywgd2hpY2ggaXMgY2xlYW5lciBhbmQgc2FmZXIuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGNvZGUsIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIHZpYSBzeXprYWxsZXIsIGFuZCB0aGVyZWZvcmUgd2UgYXJlIGdvb2QgdG8gZnV6eiB0aGlzIHNlY3Rpb24uCgpJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIG5haWxlZCBkb3duOiBgX19leHQ0X2ZpbGxfc3VwZXJgLCB3aGljaCBpcyB0aGUgZGlyZWN0IHRhcmdldCwgYW5kIGl0cyBkaXJlY3QgJiMzNDtwYXJlbnQmIzM0OyBgZXh0NF9maWxsX3N1cGVyYCwgYW5kIHRoZSBkYWlseSBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24sIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYC4gVGhlIGNvZGUgYWxzbyBoYW5kbGVzIGBleHQ0X3B1dF9zdXBlcmAsIHdoaWNoIGNsZWFucyB1cCBgc19lcnJfcmVwb3J0YCB0b28uCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuCgpJJiMzOTt2ZSB2ZXJpZmllZCBhbGwgdGhlIGNyaXRlcmlhLiBXZSBoYXZlIHJlYWNoYWJsZSBjb2RlIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGgsIGFuZCBpdCBpcyBtYXJrZWQgYXMgYFdvcnRoRnV6emluZ2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlLgoKU28sIGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGdvLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtwcmludF9kYWlseV9lcnJvcl9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgZXh0NCBtb3VudCBpbiBfX2V4dDRfZmlsbF9zdXBlcigpIHRvIHVzZSB0aW1lcl9zaHV0ZG93bl9zeW5jKCkgaW5zdGVhZCBvZiB0aW1lcl9kZWxldGVfc3luYygpIG9uIHNfZXJyX3JlcG9ydCwgcHJldmVudGluZyB0aW1lciByZS1hcm1pbmcgZHVyaW5nIGZpbGVzeXN0ZW0gdGVhcmRvd24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBWRlMvZmlsZXN5c3RlbSBtb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtwcmludF9kYWlseV9lcnJvcl9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgZXh0NCBtb3VudCBpbiBfX2V4dDRfZmlsbF9zdXBlcigpIHRvIHVzZSB0aW1lcl9zaHV0ZG93bl9zeW5jKCkgaW5zdGVhZCBvZiB0aW1lcl9kZWxldGVfc3luYygpIG9uIHNfZXJyX3JlcG9ydCwgcHJldmVudGluZyB0aW1lciByZS1hcm1pbmcgZHVyaW5nIGZpbGVzeXN0ZW0gdGVhcmRvd24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBWRlMvZmlsZXN5c3RlbSBtb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc2YTNjNTZmZWY2YzUyNWFmMTE4YjY1Mzg3YjNjZjYwZGYyM2E2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTgwOSw3ICYjNDM7NTgwOSw3IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KIAlmbHVzaF93b3JrKCZhbXA7c2JpLSZndDtzX3NiX3VwZF93b3JrKTsKIAlleHQ0X3N0b3BfbW1wZChzYmkpOwotCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwomIzQzOwl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7c2JpLSZndDtzX2Vycl9yZXBvcnQpOwogCWV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ6CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBgZGlmZmAgc2hvd3MgYSBjaGFuZ2Ugd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLiBUaGUgY29udGV4dCBpcyByaWdodCBhcm91bmQgdGhlIHN1cGVyYmxvY2sgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IG5lYXIgbGluZSA1ODA5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyBmcm9tIGB0aW1lcl9kZWxldGVfc3luY2AgdG8gYHRpbWVyX3NodXRkb3duX3N5bmNgIGZvciBgc2JpLSZndDtzX2Vycl9yZXBvcnRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgYWJvdXQgbW9yZSByb2J1c3QgY2xlYW51cCBvZiB0aGUgZXJyb3IgcmVwb3J0aW5nIHRpbWVyIGJlZm9yZSB0aGUgc3VwZXJibG9jayBpcyBkZXN0cm95ZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVnLCByYWNlIGNvbmRpdGlvbiwgb3IgYSBnZW5lcmFsIGhhcmRlbmluZyBpbXByb3ZlbWVudC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCBpcyByZWxhdGVkIHRvIGEgbW9yZSByb2J1c3QgYXBwcm9hY2ggdG8gZGVzdHJveWluZyB0aGUgdGltZXIuIEkgd29uZGVyIHdoYXQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBhcmUgYmV0d2VlbiB0aGVzZSB0aW1lciBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSSB3aWxsIHJlYWQgdXAgb24gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciBgdGltZXJfc2h1dGRvd25fc3luY2AgdG8gZnVsbHkgY29tcHJlaGVuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gZW5zdXJlIHRoYXQgYW55IHBlbmRpbmcgdGltZXIgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSBmcmVlaW5nIHRoZSBhc3NvY2lhdGVkIHN1cGVyYmxvY2sgZGF0YS4gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1ODAwOlx0XG41ODAxOlx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbCkge1xuNTgwMjpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTgwMzpcdFx0fVxuNTgwNDpcdGZhaWxlZF9tb3VudDNhOlxuNTgwNTpcdFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuNTgwNjpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuNTgwNzpcdFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG41ODA4Olx0ZmFpbGVkX21vdW50MzpcbjU4MDk6XHRcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG41ODEwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX3NiX3VwZF93b3JrKTtcbjU4MTE6XHRcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG41ODEyOlx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuNTgxMzpcdFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcbjU4MTQ6XHRmYWlsZWRfbW91bnQ6XG41ODE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXG41ODE2Olx0XHR1dGY4X3VubG9hZChzYi1cdTAwM2VzX2VuY29kaW5nKTtcbjU4MTc6XHQjZW5kaWZcbjU4MTg6XHRcbjU4MTk6XHQjaWZkZWYgQ09ORklHX1FVT1RBXG41ODIwOlx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkmIzQzOyYjNDM7KVxuNTgyMTpcdFx0XHRrZnJlZShnZXRfcWZfbmFtZShzYiwgc2JpLCBpKSk7XG41ODIyOlx0I2VuZGlmXG41ODIzOlx0XHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFx1MDAyNnNiaS1cdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xuNTgyNDpcdFx0YnJlbHNlKHNiaS1cdTAwM2VzX3NiaCk7XG41ODI1Olx0XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpIHtcbjU4MjY6XHRcdFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xuNTgyNzpcdFx0XHRmc19iZGV2X2ZpbGVfcmVsZWFzZShzYmktXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xuNTgyODpcdFx0fVxuNTgyOTpcdG91dF9mYWlsOlxuNTgzMDpcdFx0aW52YWxpZGF0ZV9iZGV2KHNiLVx1MDAzZXNfYmRldik7XG41ODMxOlx0XHRzYi1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuNTgzMjpcdFx0cmV0dXJuIGVycjtcbjU4MzM6XHR9XG41ODM0Olx0XG41ODM1Olx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuNTgzNjpcdHtcbjU4Mzc6XHRcdHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eCA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG41ODM4Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XG41ODM5Olx0XHRjb25zdCBjaGFyICpkZXNjcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRyYWNraW5nIGRvd24gdGhvc2UgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgOgoKKipGaW5kaW5nIEZ1bmN0aW9uIFVzYWdlIGluIGV4dDQgU3VwZXJibG9jayoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dCBvZiBgdGltZXJfc2h1dGRvd25fc3luY2AgYW5kIGBzX2Vycl9yZXBvcnRgIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtJiMzOTtzIHN1cGVyYmxvY2sgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogZWxzZSB0aGVzZSBhcmUgY2FsbGVkIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjbHVlcyBsaWUuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGVpciBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIHNlZSBob3cgdGhleSYjMzk7cmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c19lcnJfcmVwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMjItXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYzoxMzIzOlx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVx0ZXh0NF9yZWxlYXNlX3N5c3RlbV96b25lKHNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5mcy9leHQ0L3N1cGVyLmMtMzcwNi17XG5mcy9leHQ0L3N1cGVyLmM6MzcwNzpcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N1cGVyLmMtMzcwOC1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXHUwMDNlc19zYjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzc0NS1cbmZzL2V4dDQvc3VwZXIuYzozNzQ2Olx0aWYgKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKVxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBqaWZmaWVzICYjNDM7IHNlY3NfdG9famlmZmllcyhzYmktXHUwMDNlc19lcnJfcmVwb3J0X3NlYykpO1xuZnMvZXh0NC9zdXBlci5jLTM3NDgtfVxuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzU3PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxuZnMvZXh0NC9zdXBlci5jOjU0NTk6XHR0aW1lcl9zZXR1cChcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LCBwcmludF9kYWlseV9lcnJvcl9pbmZvLCAwKTtcbmZzL2V4dDQvc3VwZXIuYy01NDYwLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpLVx1MDAzZXNfZXJyb3JfbG9jayk7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NDktXHRpZiAoZXMtXHUwMDNlc19lcnJvcl9jb3VudCkge1xuZnMvZXh0NC9zdXBlci5jOjU3NTA6XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xuZnMvZXh0NC9zdXBlci5jOjU3NTE6XHRcdG1vZF90aW1lcihcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0LFxuZnMvZXh0NC9zdXBlci5jOjU3NTI6XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtNTc1My1cdH1cbmZzL2V4dDQvc3VwZXIuYzo1NzU0Olx0c2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xuZnMvZXh0NC9zdXBlci5jLTU3NTUtXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTgxMS1cdGV4dDRfc3RvcF9tbXBkKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCk7XG5mcy9leHQ0L3N1cGVyLmMtNTgxMy1cdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYyNTA9c3RhdGljIHZvaWQgZXh0NF91cGRhdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cdFx0ICogU3RhcnQgdGhlIGRhaWx5IGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbiBpZiBpdCBoYXNuJiMzOTt0IGJlZW5cbmZzL2V4dDQvc3VwZXIuYzo2MzExOlx0XHQgKiBzdGFydGVkIGFscmVhZHkgYW5kIHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjIGlzIG5vdCB6ZXJvXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cdFx0ICovXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcdFx0aWYgKCFlcy1cdTAwM2VzX2Vycm9yX2NvdW50IFx1MDAyNlx1MDAyNiAhc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXG5mcy9leHQ0L3N1cGVyLmM6NjMxNDpcdFx0XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCxcbmZzL2V4dDQvc3VwZXIuYzo2MzE1Olx0XHRcdFx0XHQgIGppZmZpZXMgJiM0Mzsgc2Vjc190b19qaWZmaWVzKHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XG5mcy9leHQ0L3N1cGVyLmMtNjMxNi1cdFx0bGUzMl9hZGRfY3B1KFx1MDAyNmVzLVx1MDAzZXNfZXJyb3JfY291bnQsIHNiaS1cdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgVGltZXIgU2h1dGRvd24gQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpczogYHRpbWVyX3NodXRkb3duX3N5bmNgIGlzIGJlaW5nIGltcGxlbWVudGVkIGhlcmUgdG8gZ3VhcmFudGVlIHRoYXQgYSB0aW1lciBjYW4mIzM5O3QgYmUgcmVzdGFydGVkIG9uY2UgaXQmIzM5O3MgYmVlbiBzaHV0IGRvd24sIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBwcm9ibGVtcyBsaWtlIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgdGhlIHRlYXJkb3duIG9mIHRoZSBgc2JpYCBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgaWYgYSBtb3VudCBvcGVyYXRpb24gZmFpbHMuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZSBpbnZvbHZlcyBzdGFuZGFyZGl6aW5nIG9uIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpbiB0aGUgZXJyb3IgY2xlYW51cCBwYXRoIG9mIGBfX2V4dDRfZmlsbF9zdXBlcigpYCwgd2hpY2ggY3VycmVudGx5IHVzZXMgYHRpbWVyX2RlbGV0ZV9zeW5jYC4gVGhlIHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0aGUgY2xlYW51cCBwcm9jZXNzOyBhIGNsYXNzaWMgbGlmZWN5Y2xlIGlzc3VlLCBhbmQgYSBjb21tb24gc291cmNlIG9mIHVzZS1hZnRlci1mcmVlIGFuZCB0aW1lciB0ZWFyZG93biBidWdzLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgcmVnYXJkaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBXZSYjMzk7cmUgbm90IHRvdWNoaW5nIGFueXRoaW5nIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vIGRpY2UuIFRoZSBjb2RlJiMzOTtzIGxvZ2ljIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4KMy4gICoqQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8qKiBObyBhZ2Fpbi4gV2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBvciBjaGFuZ2luZyBhbnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB0aGF0IHdvdWxkIGxlYXZlIGZpZWxkcyB1bmluaXRpYWxpemVkIGFuZCB0aGVuIHJlYWQgbGF0ZXIuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIGFjY2VzcyBvciB1bmluaXRpYWxpemVkIGJ5dGUgZXhwb3N1cmVzLgoKQmFzZWQgb24gdGhhdCwgaXQgc2VlbXMgdGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIHRpbWVyJiMzOTtzIGxpZmVjeWNsZSBhbmQgZW5zdXJpbmcgaXQmIzM5O3MgcHJvcGVybHkgZGlzYWJsZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlICphZnRlciogdGhlIHRpbWVyIGhhcyBiZWVuIGRlbGV0ZWQuCgpUaGUgcHJpbWFyeSByZWFzb24gdGhpcyBjaGFuZ2UgbWF0dGVycyBpc24mIzM5O3QgYWJvdXQgS01TQU4gc3BlY2lmaWNhbGx5LiBJdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCB0aW1lci1yZWxhdGVkIHJhY2UgY29uZGl0aW9ucy4gU3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBzaG91bGQgZWFzaWx5IGNhdGNoIHRoZXNlIGtpbmRzIG9mIGJ1Z3MsIGluIGFuIGFjdGl2ZSBrZXJuZWwgYnVpbGQuCgpUaHVzLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBhZGRyZXNzZXMgYW5kIG1pdGlnYXRlcyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgY2FuIGRldGVjdC4gV2UmIzM5O3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW91bnQgZmFpbHVyZSBjbGVhbnVwIHBhdGggaW4gYF9fZXh0NF9maWxsX3N1cGVyKClgIGJ5IHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBjcmVhdGUsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgemVyb2luZywgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBhbnkgZGF0YSB0byB1c2Vyc3BhY2UuIFVzZS1hZnRlci1mcmVlIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAgd2l0aCBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDoyNy45MzgzMzMxNzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA3NjU3MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2ZpbGxfc3VwZXJcIixcbiAgICBcImV4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwicHJpbnRfZGFpbHlfZXJyb3JfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vdW50IGZhaWx1cmUgY2xlYW51cCBwYXRoIGluIGBfX2V4dDRfZmlsbF9zdXBlcigpYCBieSByZXBsYWNpbmcgYHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmVwb3J0KWAuIFRoaXMgY2hhbmdlIHByZXZlbnRzIHRoZSB0aW1lciBmcm9tIGJlaW5nIHJlLWFybWVkIGR1cmluZyBvciBhZnRlciB0ZWFyLWRvd24gb2YgdGhlIGV4dDQgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSwgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIG9uIG1vdW50IGZhaWx1cmUuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgY3JlYXRlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHplcm9pbmcsIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBVc2UtYWZ0ZXItZnJlZSBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDoyNy45MzgzNDc2MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTAxNzU0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNzZhM2M1NmZlZjZjNTI1YWYxMThiNjUzODdiM2NmNjBkZjIzYTY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTY6MDQ6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggYmNhMGRjODdkMGI3Yy4uMTU0ZTAwOTAxMDE3NCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTgwOSw3ICs1ODA5LDcgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG4gXFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG4gXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG4tXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmVwb3J0KTtcXG4rXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbiBcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbiBmYWlsZWRfbW91bnQ6XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozMC4wODkwNzcyNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2NTI0ODI3MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3NmEzYzU2ZmVmNmM1MjVhZjExOGI2NTM4N2IzY2Y2MGRmMjNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE2OjA0OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCBiY2EwZGM4N2QwYjdjLi4xNTRlMDA5MDEwMTc0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuK1x0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbiBcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50OlxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6MzAuMDg5MDc4OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkxODk4NDU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGaWxlc3lzdGVtIFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9leHQ0L3N1cGVyLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyB0aGUgc3VwZXJibG9jayBpcyBoYW5kbGVkIGR1cmluZyBmaWxlc3lzdGVtIHNodXRkb3duIG9yIHVubW91bnQsIGFzIHN1Z2dlc3RlZCBieSB0aGUgYGZhaWxlZF9tb3VudGAgbGFiZWwuIFRoZSBjaGFuZ2UgaXRzZWxmIGlzIHF1aXRlIHRhcmdldGVkOiBpdCdzIHJlcGxhY2luZyBgdGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydClgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBgdGltZXJfZGVsZXRlX3N5bmNgIGlzIGEgc3Ryb25nIG9wZXJhdGlvbiwgZGVzaWduZWQgdG8gZGVsZXRlIGEgdGltZXIgaW1tZWRpYXRlbHkuIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpcyBwcm9iYWJseSBnZW50bGVyLCBhbGxvd2luZyBhbnkgcGVuZGluZyB0aW1lciB3b3JrIHRvIGNvbXBsZXRlIGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSB0aW1lci4gVGhlIGRpZmZlcmVuY2UgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcmFjZXMgZHVyaW5nIHVtb3VudC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaGFzIHBvdGVudGlhbGx5IGJlZW4gaWRlbnRpZmllZCBhcyBwcm9ibGVtYXRpYy4gUGVyaGFwcyB0aGUgb2xkIHRpbWVyIGRlbGV0aW9uIHdhcyBsZWFkaW5nIHRvIGEga2VybmVsIHBhbmljIGluIGNlcnRhaW4sIHNwZWNpZmljIHNpdHVhdGlvbnM/IE9yIHBvc3NpYmx5LCBpdCB3YXMgYmVpbmcgb3ZlcnplYWxvdXMgYW5kIHByZXZlbnRpbmcgYSBncmFjZWZ1bCB1bm1vdW50PyBJdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUsIHRoZXJlZm9yZSwgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoeSB0aGUgbmV3IG1ldGhvZCB3YXMgY2hvc2VuLlxuXG5JJ2xsIGNoZWNrIHRoZSBjb250ZXh0IHVzaW5nIGByZWFkLWZpbGVgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhbmQgd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDU4MDkgaW4gYGZzL2V4dDQvc3VwZXIuY2AuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozNi4wMDgwNjYzOTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3ODA6XFx0XFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XFxuNTc4MTpcXHRmYWlsZWRfbW91bnQ1OlxcbjU3ODI6XFx0XFx0ZXh0NF9wZXJjcHVfcGFyYW1fZGVzdHJveShzYmkpO1xcbjU3ODM6XFx0XFx0ZXh0NF9leHRfcmVsZWFzZShzYik7XFxuNTc4NDpcXHRcXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xcbjU3ODU6XFx0ZmFpbGVkX21vdW50NGE6XFxuNTc4NjpcXHRcXHRkcHV0KHNiLVxcdTAwM2VzX3Jvb3QpO1xcbjU3ODc6XFx0XFx0c2ItXFx1MDAzZXNfcm9vdCA9IE5VTEw7XFxuNTc4ODpcXHRmYWlsZWRfbW91bnQ0OlxcbjU3ODk6XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcXFwibW91bnQgZmFpbGVkXFxcIik7XFxuNTc5MDpcXHRcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxcbjU3OTE6XFx0XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG41NzkyOlxcdGZhaWxlZF9tb3VudF93cTpcXG41NzkzOlxcdFxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG41Nzk0OlxcdFxcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbjU3OTU6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc5NjpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3OTc6XFx0XFxuNTc5ODpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzk5OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTgwMDpcXHRcXG41ODAxOlxcdFxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbCkge1xcbjU4MDI6XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuNTgwMzpcXHRcXHR9XFxuNTgwNDpcXHRmYWlsZWRfbW91bnQzYTpcXG41ODA1OlxcdFxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cXG41ODA2OlxcdFxcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbjU4MDc6XFx0XFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuNTgwODpcXHRmYWlsZWRfbW91bnQzOlxcbjU4MDk6XFx0XFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG41ODEwOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19zYl91cGRfd29yayk7XFxuNTgxMTpcXHRcXHRleHQ0X3N0b3BfbW1wZChzYmkpO1xcbjU4MTI6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbjU4MTM6XFx0XFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG41ODE0OlxcdGZhaWxlZF9tb3VudDpcXG41ODE1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcbjU4MTY6XFx0XFx0dXRmOF91bmxvYWQoc2ItXFx1MDAzZXNfZW5jb2RpbmcpO1xcbjU4MTc6XFx0I2VuZGlmXFxuNTgxODpcXHRcXG41ODE5OlxcdCNpZmRlZiBDT05GSUdfUVVPVEFcXG41ODIwOlxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgRVhUNF9NQVhRVU9UQVM7IGkrKylcXG41ODIxOlxcdFxcdFxcdGtmcmVlKGdldF9xZl9uYW1lKHNiLCBzYmksIGkpKTtcXG41ODIyOlxcdCNlbmRpZlxcbjU4MjM6XFx0XFx0ZnNjcnlwdF9mcmVlX2R1bW15X3BvbGljeShcXHUwMDI2c2JpLVxcdTAwM2VzX2R1bW15X2VuY19wb2xpY3kpO1xcbjU4MjQ6XFx0XFx0YnJlbHNlKHNiaS1cXHUwMDNlc19zYmgpO1xcbjU4MjU6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkge1xcbjU4MjY6XFx0XFx0XFx0aW52YWxpZGF0ZV9iZGV2KGZpbGVfYmRldihzYmktXFx1MDAzZXNfam91cm5hbF9iZGV2X2ZpbGUpKTtcXG41ODI3OlxcdFxcdFxcdGZzX2JkZXZfZmlsZV9yZWxlYXNlKHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSwgc2IpO1xcbjU4Mjg6XFx0XFx0fVxcbjU4Mjk6XFx0b3V0X2ZhaWw6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjM2LjAwODM5MzM5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjU3ODU0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGBleHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHJlc2lkZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBJIGtub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLiBMZXQgbWUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1c3BlY3RlZCBhcmVhIC0gbGluZXMgNTQwMCB0aHJvdWdoIDU4MDAuIEFsdGVybmF0aXZlbHksIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gaGVhZGVyIHdvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgdG8gbG9jYXRlIGl0LiBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgc28gSSBjYW4gc3RhcnQgdG8gZm9sbG93IHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6MzguMjM0MTgzMDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDc2MDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz01Nzc0PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTgzNC1cXG5mcy9leHQ0L3N1cGVyLmM6NTgzNTpzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTU4MzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDozOS4yMTg5NDg1NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNjA1MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBNb3VudCBGYWlsdXJlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGZhaWxlZF9tb3VudDhgIGlzIGNvbWluZyBmcm9tLCBvciwgYWx0ZXJuYXRpdmVseSwgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSA1ODA5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYGZzL2V4dDQvc3VwZXIuY2AuIFNpbmNlIEkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbW9yeSBmb3IgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBFWFQ0IHN1cGVyYmxvY2sgY29kZSwgSSdsbCBnbyBhaGVhZCBhbmQgdGFrZSBhIGxvb2sgYXQgYSByYW5nZSBvZiBsaW5lczogNTc1MCB0byA1ODQwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIGlzIGVub3VnaCB0byBwaW5wb2ludCB0aGUgaXNzdWUgb3IgYXQgbGVhc3QgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0MS4yMTA1NTY2NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3NTA6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcXHQvKiBmaXJzdCB0aW1lICA1IG1pbnV0ZXMgKi9cXG41NzUxOlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsXFxuNTc1MjpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuNTc1MzpcXHRcXHR9XFxuNTc1NDpcXHRcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSAyNCo2MCo2MDsgLyogT25jZSBhIGRheSAqL1xcbjU3NTU6XFx0XFxuNTc1NjpcXHRcXHQvKiBFbmFibGUgbWVzc2FnZSByYXRlbGltaXRpbmcuIERlZmF1bHQgaXMgMTAgbWVzc2FnZXMgcGVyIDUgc2Vjcy4gKi9cXG41NzU3OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XFxuNTc1ODpcXHRcXHRyYXRlbGltaXRfc3RhdGVfaW5pdChcXHUwMDI2c2JpLVxcdTAwM2VzX3dhcm5pbmdfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzU5OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfbXNnX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XFxuNTc2MDpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZzYmktXFx1MDAzZXNfd2FybmluZ19jb3VudCwgMCk7XFxuNTc2MTpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZzYmktXFx1MDAzZXNfbXNnX2NvdW50LCAwKTtcXG41NzYyOlxcdFxcbjU3NjM6XFx0XFx0LyogUmVnaXN0ZXIgc3lzZnMgYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyBhcmUgY29tcGxldGUuICovXFxuNTc2NDpcXHRcXHRlcnIgPSBleHQ0X3JlZ2lzdGVyX3N5c2ZzKHNiKTtcXG41NzY1OlxcdFxcdGlmIChlcnIpXFxuNTc2NjpcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDk7XFxuNTc2NzpcXHRcXG41NzY4OlxcdFxcdHJldHVybiAwO1xcbjU3Njk6XFx0XFxuNTc3MDpcXHRmYWlsZWRfbW91bnQ5OlxcbjU3NzE6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuNTc3MjpcXHRcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG41NzczOlxcdFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbjU3NzQ6XFx0ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ3OlxcbjU3Nzc6XFx0XFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbjU3Nzg6XFx0ZmFpbGVkX21vdW50NjpcXG41Nzc5OlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc4MDpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzgxOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc4MjpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc4MzpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzg0OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc4NTpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzg2OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc4NzpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzg4OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4OTpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzkwOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc5MTpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3OTI6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3OTM6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbjU3OTQ6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTc5NTpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG41Nzk2OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuNTc5NzpcXHRcXG41Nzk4OlxcdFxcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXFx1MDAzZXNfZWFfYmxvY2tfY2FjaGUpO1xcbjU3OTk6XFx0XFx0c2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlID0gTlVMTDtcXG41ODAwOlxcdFxcbjU4MDE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTgwMjpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41ODAzOlxcdFxcdH1cXG41ODA0OlxcdGZhaWxlZF9tb3VudDNhOlxcbjU4MDU6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbjU4MDY6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTgwNzpcXHRcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG41ODA4OlxcdGZhaWxlZF9tb3VudDM6XFxuNTgwOTpcXHRcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbjU4MTA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG41ODExOlxcdFxcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XFxuNTgxMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuNTgxMzpcXHRcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbjU4MTQ6XFx0ZmFpbGVkX21vdW50OlxcbjU4MTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuNTgxNjpcXHRcXHR1dGY4X3VubG9hZChzYi1cXHUwMDNlc19lbmNvZGluZyk7XFxuNTgxNzpcXHQjZW5kaWZcXG41ODE4OlxcdFxcbjU4MTk6XFx0I2lmZGVmIENPTkZJR19RVU9UQVxcbjU4MjA6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBFWFQ0X01BWFFVT1RBUzsgaSsrKVxcbjU4MjE6XFx0XFx0XFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xcbjU4MjI6XFx0I2VuZGlmXFxuNTgyMzpcXHRcXHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFxcdTAwMjZzYmktXFx1MDAzZXNfZHVtbXlfZW5jX3BvbGljeSk7XFxuNTgyNDpcXHRcXHRicmVsc2Uoc2JpLVxcdTAwM2VzX3NiaCk7XFxuNTgyNTpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XFxuNTgyNjpcXHRcXHRcXHRpbnZhbGlkYXRlX2JkZXYoZmlsZV9iZGV2KHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xcbjU4Mjc6XFx0XFx0XFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlLCBzYik7XFxuNTgyODpcXHRcXHR9XFxuNTgyOTpcXHRvdXRfZmFpbDpcXG41ODMwOlxcdFxcdGludmFsaWRhdGVfYmRldihzYi1cXHUwMDNlc19iZGV2KTtcXG41ODMxOlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbjU4MzI6XFx0XFx0cmV0dXJuIGVycjtcXG41ODMzOlxcdH1cXG41ODM0OlxcdFxcbjU4MzU6XFx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbjU4MzY6XFx0e1xcbjU4Mzc6XFx0XFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuNTgzODpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XFxuNTgzOTpcXHRcXHRjb25zdCBjaGFyICpkZXNjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6NDEuMjEwODQwOTU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzOTYxMTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvZGUgU2VjdGlvbiA1NzUwLTU4MzMqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBzcGVjaWZpYyBsaW5lcywgNTc1MCB0byA1ODMzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gYmFjayB1cCBhIGJpdCBhbmQgZXN0YWJsaXNoIHRoZSBmdW5jdGlvbiB0aG9zZSBsaW5lcyBhcmUgcGFydCBvZi4gRGlyZWN0bHkganVtcGluZyBpbnRvIHRob3NlIGxpbmVzIG1pZ2h0IGJlIGVmZmljaWVudCBmb3IgcXVpY2sgY2hhbmdlcywgYnV0IEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIG92ZXJ2aWV3IHRvIGZpbmQgdGhlIG1haW4gdXNlLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmUgNTAwMCB0byA1MjAwLiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGp1c3QgZ3JlcCBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBhbmQgc2VlIGlmIHRoYXQgcXVpY2tseSBuYXJyb3dzIHRoaW5ncyBkb3duLiBFaXRoZXIgd2F5LCB0aGF0IGNvbnRleHQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiBhIHByb3BlciBhbmFseXNpcy4gSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIG1pbnV0aWFlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0NC4xNTA0NTUxODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Njg2ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgW2EtejAtOV8gKl0rZXh0NF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjc0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9leHQ0L3N1cGVyLmMtNjMtXFxuZnMvZXh0NC9zdXBlci5jOjY0OnN0YXRpYyBzdHJ1Y3QgZXh0NF9sYXp5X2luaXQgKmV4dDRfbGlfaW5mbztcXG5mcy9leHQ0L3N1cGVyLmMtNjUtc3RhdGljIERFRklORV9NVVRFWChleHQ0X2xpX210eCk7XFxuZnMvZXh0NC9zdXBlci5jOjY2OnN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdDtcXG5mcy9leHQ0L3N1cGVyLmMtNjctXFxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXFxuZnMvZXh0NC9zdXBlci5jLTY5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBqb3VybmFsX2Rldm51bSk7XFxuZnMvZXh0NC9zdXBlci5jOjcwOnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xcbmZzL2V4dDQvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzI6c3RhdGljIGludCBleHQ0X2NvbW1pdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzM6c3RhdGljIGludCBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNzQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcXG5mcy9leHQ0L3N1cGVyLmM6NzU6c3RhdGljIGludCBleHQ0X2NsZWFyX2pvdXJuYWxfZXJyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKTtcXG5mcy9leHQ0L3N1cGVyLmM6Nzc6c3RhdGljIGludCBleHQ0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpO1xcbmZzL2V4dDQvc3VwZXIuYzo3ODpzdGF0aWMgaW50IGV4dDRfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XFxuZnMvZXh0NC9zdXBlci5jOjc5OnN0YXRpYyBpbnQgZXh0NF91bmZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODA6c3RhdGljIGludCBleHQ0X2ZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtODEtc3RhdGljIGlubGluZSBpbnQgZXh0Ml9mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM9ODI9c3RhdGljIGlubGluZSBpbnQgZXh0M19mZWF0dXJlX3NldF9vayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODM6c3RhdGljIHZvaWQgZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9zdXBlci5jOjg0OnN0YXRpYyB2b2lkIGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KHZvaWQpO1xcbmZzL2V4dDQvc3VwZXIuYzo4NTpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2dldF9qb3VybmFsX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTg2LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgam91cm5hbF9pbnVtKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODc6c3RhdGljIGludCBleHQ0X3ZhbGlkYXRlX29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmM6ODg6c3RhdGljIGludCBleHQ0X2NoZWNrX29wdF9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvZXh0NC9zdXBlci5jLTg5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2V4dDQvc3VwZXIuYzo5MDpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTE6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbmZzL2V4dDQvc3VwZXIuYzo5MjpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTM6c3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYzo5NTpzdGF0aWMgaW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk2OnN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6OTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW107XFxuZnMvZXh0NC9zdXBlci5jLTk4LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyNC1cXG5mcy9leHQ0L3N1cGVyLmM6MTI1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTEyNi1cXHQucGFyc2VfcGFyYW1cXHQ9IGV4dDRfcGFyc2VfcGFyYW0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTU5PU1PRFVMRV9BTElBUyhcXFwiZXh0M1xcXCIpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2Mi1cXG5mcy9leHQ0L3N1cGVyLmM6MTYzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4dDRfcmVhZF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuZnMvZXh0NC9zdXBlci5jLTE2NC1cXHRcXHRcXHRcXHQgIGJpb19lbmRfaW9fdCBlbmRfaW8sIGJvb2wgc2ltdV9mYWlsKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIxND1pbnQgZXh0NF9yZWFkX2JoX2xvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLCBib29sIHdhaXQpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjI5LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMzA6c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X3NiX2JyZWFkX2dmcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy0yMzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNlY3Rvcl90IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI3OD12b2lkIGV4dDRfc2JfYnJlYWRhaGVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg5LVxcbmZzL2V4dDQvc3VwZXIuYzoyOTA6c3RhdGljIGludCBleHQ0X3ZlcmlmeV9jc3VtX3R5cGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtMjkxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjk5PV9fbGUzMiBleHQ0X3N1cGVyYmxvY2tfY3N1bShzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzA4LVxcbmZzL2V4dDQvc3VwZXIuYzozMDk6c3RhdGljIGludCBleHQ0X3N1cGVyYmxvY2tfY3N1bV92ZXJpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtMzEwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDMyPXZvaWQgZXh0NF9pdGFibGVfdW51c2VkX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQzOS1cXG5mcy9leHQ0L3N1cGVyLmM6NDQwOnN0YXRpYyB2b2lkIF9fZXh0NF91cGRhdGVfdHN0YW1wKF9fbGUzMiAqbG8sIF9fdTggKmhpLCB0aW1lNjRfdCBub3cpXFxuZnMvZXh0NC9zdXBlci5jLTQ0MS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQ3LVxcbmZzL2V4dDQvc3VwZXIuYzo0NDg6c3RhdGljIHRpbWU2NF90IF9fZXh0NF9nZXRfdHN0YW1wKF9fbGUzMiAqbG8sIF9fdTggKmhpKVxcbmZzL2V4dDQvc3VwZXIuYy00NDkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ3MS0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NDcyOnN0YXRpYyB2b2lkIGV4dDRfbWF5YmVfdXBkYXRlX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDczLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDgtXFxuZnMvZXh0NC9zdXBlci5jOjUwOTpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxfY29tbWl0X2NhbGxiYWNrKGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKVxcbmZzL2V4dDQvc3VwZXIuYy01MTAte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUxOC1cXG5mcy9leHQ0L3N1cGVyLmM6NTE5OnN0YXRpYyBib29sIGV4dDRfam91cm5hbGxlZF93cml0ZXBhZ2VfbmVlZHNfcmVkaXJ0eShzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlLFxcbmZzL2V4dDQvc3VwZXIuYy01MjAtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTAtXFxuZnMvZXh0NC9zdXBlci5jOjU1MTpzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF9zdWJtaXRfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUpXFxuZnMvZXh0NC9zdXBlci5jLTU1Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTgzLVxcbmZzL2V4dDQvc3VwZXIuYzo1ODQ6c3RhdGljIGludCBleHQ0X2pvdXJuYWxfc3VibWl0X2lub2RlX2RhdGFfYnVmZmVycyhzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy01ODUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU5NC1cXG5mcy9leHQ0L3N1cGVyLmM6NTk1OnN0YXRpYyBpbnQgZXh0NF9qb3VybmFsX2ZpbmlzaF9pbm9kZV9kYXRhX2J1ZmZlcnMoc3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZSlcXG5mcy9leHQ0L3N1cGVyLmMtNTk2LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MTE9c3RydWN0IGV4dDRfZXJyX3RyYW5zbGF0aW9uIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MTctXFxuZnMvZXh0NC9zdXBlci5jOjYxODpzdGF0aWMgc3RydWN0IGV4dDRfZXJyX3RyYW5zbGF0aW9uIGVycl90cmFuc2xhdGlvbltdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy02MTktXFx0RVhUNF9FUlJfVFJBTlNMQVRFKEVJTyksXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjM2LVxcbmZzL2V4dDQvc3VwZXIuYzo2Mzc6c3RhdGljIGludCBleHQ0X2Vycm5vX3RvX2NvZGUoaW50IGVycm5vKVxcbmZzL2V4dDQvc3VwZXIuYy02Mzgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTY0Nz1zdGF0aWMgdm9pZCBzYXZlX2Vycm9yX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTY5NS0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6Njk2OnN0YXRpYyB2b2lkIGV4dDRfaGFuZGxlX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJvb2wgZm9yY2Vfcm8sIGludCBlcnJvcixcXG5mcy9leHQ0L3N1cGVyLmMtNjk3LVxcdFxcdFxcdCAgICAgIF9fdTMyIGlubywgX191NjQgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9OTg0PXZvaWQgX19leHQ0X21zZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEwMDYtXFxuZnMvZXh0NC9zdXBlci5jOjEwMDc6c3RhdGljIGludCBleHQ0X3dhcm5pbmdfcmF0ZWxpbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEwMDgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTExNjg9c3RhdGljIHZvaWQgZHVtcF9vcnBoYW5fbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTE4Ni0jaWZkZWYgQ09ORklHX1FVT1RBXFxuZnMvZXh0NC9zdXBlci5jOjExODc6c3RhdGljIGludCBleHQ0X3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7XFxuZnMvZXh0NC9zdXBlci5jLTExODgtXFxuZnMvZXh0NC9zdXBlci5jOjExODk6c3RhdGljIGlubGluZSB2b2lkIGV4dDRfcXVvdGFzX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG5mcy9leHQ0L3N1cGVyLmMtMTE5MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTIwMj1zdGF0aWMgaW5saW5lIGNoYXIgKmdldF9xZl9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTIwOS0jZWxzZVxcbmZzL2V4dDQvc3VwZXIuYzoxMjEwOnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X3F1b3Rhc19vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuZnMvZXh0NC9zdXBlci5jLTEyMTEte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyMTQtXFxuZnMvZXh0NC9zdXBlci5jOjEyMTU6c3RhdGljIGludCBleHQ0X3BlcmNwdV9wYXJhbV9pbml0KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTIxNi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI0Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTI0ODpzdGF0aWMgdm9pZCBleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTI0OS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI1Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTI1ODpzdGF0aWMgdm9pZCBleHQ0X2dyb3VwX2Rlc2NfZnJlZShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuZnMvZXh0NC9zdXBlci5jLTEyNTkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEyNjgtXFxuZnMvZXh0NC9zdXBlci5jOjEyNjk6c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG5mcy9leHQ0L3N1cGVyLmMtMTI3MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTI4MS1cXG5mcy9leHQ0L3N1cGVyLmM6MTI4MjpzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgzLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzkyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzkzOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9pbm9kZV9jYWNoZXA7XFxuZnMvZXh0NC9zdXBlci5jLTEzOTQtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTM5Ny0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MTM5ODpzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEzOTkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE0NDgtXFxuZnMvZXh0NC9zdXBlci5jOjE0NDk6c3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3N1cGVyLmMtMTQ1MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTQ1OS1cXG5mcy9leHQ0L3N1cGVyLmM6MTQ2MDpzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNDYxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNDcwLVxcbmZzL2V4dDQvc3VwZXIuYzoxNDcxOnN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNDcyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNDkwLVxcbmZzL2V4dDQvc3VwZXIuYzoxNDkxOnN0YXRpYyB2b2lkIGV4dDRfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtMTQ5Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTUzOT12b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNTc5LVxcbmZzL2V4dDQvc3VwZXIuYzoxNTgwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy0xNTgxLVxcdFxcdFxcdFxcdFxcdHU2NCBpbm8sIHUzMiBnZW5lcmF0aW9uKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE1OTktXFxuZnMvZXh0NC9zdXBlci5jOjE2MDA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG5mcy9leHQ0L3N1cGVyLmMtMTYwMS1cXHRcXHRcXHRcXHRcXHRpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjA2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjA3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXFxuZnMvZXh0NC9zdXBlci5jLTE2MDgtXFx0XFx0XFx0XFx0XFx0aW50IGZoX2xlbiwgaW50IGZoX3R5cGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTYxMy1cXG5mcy9leHQ0L3N1cGVyLmM6MTYxNDpzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvc3VwZXIuYy0xNjE1LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjI5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcXVvdGF0eXBlc1tdID0gSU5JVFFGTkFNRVM7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTYzMS1cXG5mcy9leHQ0L3N1cGVyLmM6MTYzMjpzdGF0aWMgaW50IGV4dDRfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzM6c3RhdGljIGludCBleHQ0X2FjcXVpcmVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzQ6c3RhdGljIGludCBleHQ0X3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzU6c3RhdGljIGludCBleHQ0X21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCk7XFxuZnMvZXh0NC9zdXBlci5jOjE2MzY6c3RhdGljIGludCBleHQ0X3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpO1xcbmZzL2V4dDQvc3VwZXIuYzoxNjM3OnN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCxcXG5mcy9leHQ0L3N1cGVyLmMtMTYzOC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpO1xcbmZzL2V4dDQvc3VwZXIuYzoxNjM5OnN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSxcXG5mcy9leHQ0L3N1cGVyLmMtMTY0MC1cXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7XFxuZnMvZXh0NC9zdXBlci5jOjE2NDE6c3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSxcXG5mcy9leHQ0L3N1cGVyLmMtMTY0Mi1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTY0MzpzdGF0aWMgaW50IGV4dDRfcXVvdGFfZW5hYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLFxcbmZzL2V4dDQvc3VwZXIuYy0xNjQ0LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTY0NS1cXG5mcy9leHQ0L3N1cGVyLmM6MTY0NjpzdGF0aWMgc3RydWN0IGRxdW90IF9fcmN1ICoqZXh0NF9nZXRfZHF1b3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9zdXBlci5jLTE2NDcte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2NTAtXFxuZnMvZXh0NC9zdXBlci5jOjE2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDRfcXVvdGFfb3BlcmF0aW9ucyA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTY1Mi1cXHQuZ2V0X3Jlc2VydmVkX3NwYWNlXFx0PSBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjY0LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjY1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGV4dDRfcWN0bF9vcGVyYXRpb25zID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNjY2LVxcdC5xdW90YV9vblxcdD0gZXh0NF9xdW90YV9vbixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjc2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNjc3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE2NzgtXFx0LmFsbG9jX2lub2RlXFx0PSBleHQ0X2FsbG9jX2lub2RlLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2OTktXFxuZnMvZXh0NC9zdXBlci5jOjE3MDA6c3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBleHQ0X2V4cG9ydF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3MDEtXFx0LmVuY29kZV9maCA9IGdlbmVyaWNfZW5jb2RlX2lubzMyX2ZoLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3MDg9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTczNi1cXG5mcy9leHQ0L3N1cGVyLmM6MTczNzpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZXJyb3JzW10gPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3MzgtXFx0e1xcXCJjb250aW51ZVxcXCIsXFx0RVhUNF9NT1VOVF9FUlJPUlNfQ09OVH0sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc0My1cXG5mcy9leHQ0L3N1cGVyLmM6MTc0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGV4dDRfcGFyYW1fZGF0YVtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzQ1LVxcdHtcXFwiam91cm5hbFxcXCIsXFx0RVhUNF9NT1VOVF9KT1VSTkFMX0RBVEF9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3NTAtXFxuZnMvZXh0NC9zdXBlci5jOjE3NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RhdGFfZXJyW10gPSB7XFxuZnMvZXh0NC9zdXBlci5jLTE3NTItXFx0e1xcXCJhYm9ydFxcXCIsXFx0T3B0X2RhdGFfZXJyX2Fib3J0fSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNzU2LVxcbmZzL2V4dDQvc3VwZXIuYzoxNzU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXh0NF9wYXJhbV9qcWZtdFtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzU4LVxcdHtcXFwidmZzb2xkXFxcIixcXHRRRk1UX1ZGU19PTER9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3NjMtXFxuZnMvZXh0NC9zdXBlci5jOjE3NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBleHQ0X3BhcmFtX2RheFtdID0ge1xcbmZzL2V4dDQvc3VwZXIuYy0xNzY1LVxcdHtcXFwiYWx3YXlzXFxcIixcXHRPcHRfZGF4X2Fsd2F5c30sXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc3Ny0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MTc3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGV4dDRfcGFyYW1fc3BlY3NbXSA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTc3OS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImJzZGRmXFxcIixcXHRcXHRPcHRfYnNkX2RmKSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk3MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcXG5mcy9leHQ0L3N1cGVyLmM6MTk3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGV4dDRfc2JfZW5jb2RpbmdzIHtcXG5mcy9leHQ0L3N1cGVyLmMtMTk3Mi1cXHRfX3UxNiBtYWdpYztcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTc4LVxcbmZzL2V4dDQvc3VwZXIuYzoxOTc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0NF9zYl9lbmNvZGluZ3MgKlxcbmZzL2V4dDQvc3VwZXIuYy0xOTgwLWV4dDRfc2JfcmVhZF9lbmNvZGluZyhjb25zdCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjAxMz1zdHJ1Y3QgZXh0NF9mc19jb250ZXh0IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQzLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQ0OnN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIxMjA9c3RhdGljIGludCB1bm5vdGVfcWZfbmFtZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGludCBxdHlwZSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMTMzOnN0YXRpYyBpbnQgZXh0NF9wYXJzZV90ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0sXFxuZnMvZXh0NC9zdXBlci5jLTIxMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yMTg1PUVYVDRfVEVTVF9DVFgobW91bnRfb3B0Mik7XFxuZnMvZXh0NC9zdXBlci5jLTIxODYtXFxuZnMvZXh0NC9zdXBlci5jOjIxODc6c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvZXh0NC9zdXBlci5jLTIxODgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI1Mjg9c3RhdGljIGludCBwYXJzZV9hcHBseV9zYl9tb3VudF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjU4MS1cXG5mcy9leHQ0L3N1cGVyLmM6MjU4MjpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X3F1b3RhX29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNTgzLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNjE4LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyNjE5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19xdW90YV9jb25zaXN0ZW5jeShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvZXh0NC9zdXBlci5jLTI2MjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNzM2LVxcbmZzL2V4dDQvc3VwZXIuYzoyNzM3OnN0YXRpYyBpbnQgZXh0NF9jaGVja190ZXN0X2R1bW15X2VuY3J5cHRpb24oY29uc3Qgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNzM4LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI3NzYtXFxuZnMvZXh0NC9zdXBlci5jOjI3Nzc6c3RhdGljIHZvaWQgZXh0NF9hcHBseV90ZXN0X2R1bW15X2VuY3J5cHRpb24oc3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4LFxcbmZzL2V4dDQvc3VwZXIuYy0yNzc4LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yNzg4LVxcbmZzL2V4dDQvc3VwZXIuYzoyNzg5OnN0YXRpYyBpbnQgZXh0NF9jaGVja19vcHRfY29uc2lzdGVuY3koc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2V4dDQvc3VwZXIuYy0yNzkwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cXG5mcy9leHQ0L3N1cGVyLmM6Mjg3MTpzdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0yODcyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yOTAzLVxcbmZzL2V4dDQvc3VwZXIuYzoyOTA0OnN0YXRpYyBpbnQgZXh0NF92YWxpZGF0ZV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtMjkwNS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjkzMC1cXG5mcy9leHQ0L3N1cGVyLmM6MjkzMTpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9zaG93X3F1b3RhX29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuZnMvZXh0NC9zdXBlci5jLTI5MzItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yOTY2PXN0YXRpYyBjb25zdCBjaGFyICp0b2tlbjJzdHIoaW50IHRva2VuKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI5ODAtICovXFxuZnMvZXh0NC9zdXBlci5jOjI5ODE6c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTI5ODItXFx0XFx0XFx0ICAgICAgaW50IG5vZGVmcylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMTA2LVxcbmZzL2V4dDQvc3VwZXIuYzozMTA3OnN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvZXh0NC9zdXBlci5jLTMxMDgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMxMTI9aW50IGV4dDRfc2VxX29wdGlvbnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTMxMjItXFxuZnMvZXh0NC9zdXBlci5jOjMxMjM6c3RhdGljIGludCBleHQ0X3NldHVwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG5mcy9leHQ0L3N1cGVyLmMtMzEyNC1cXHRcXHRcXHQgICAgaW50IHJlYWRfb25seSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zMTgxPWludCBleHQ0X2FsbG9jX2ZsZXhfYmdfYXJyYXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IG5ncm91cClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMjI3LVxcbmZzL2V4dDQvc3VwZXIuYzozMjI4OnN0YXRpYyBpbnQgZXh0NF9maWxsX2ZsZXhfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy0zMjI5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMjYxLVxcbmZzL2V4dDQvc3VwZXIuYzozMjYyOnN0YXRpYyBfX2xlMTYgZXh0NF9ncm91cF9kZXNjX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuZnMvZXh0NC9zdXBlci5jLTMyNjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMzMTY9dm9pZCBleHQ0X2dyb3VwX2Rlc2NfY3N1bV9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzMyNC0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovXFxuZnMvZXh0NC9zdXBlci5jOjMzMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTMzMjYtXFx0XFx0XFx0XFx0ICBleHQ0X2ZzYmxrX3Qgc2JfYmxvY2ssXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzQ1OC0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MzQ1OTpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X3NpemUoaW50IGJsa2JpdHMsIGludCBoYXNfaHVnZV9maWxlcylcXG5mcy9leHQ0L3N1cGVyLmMtMzQ2MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzQ5My0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6MzQ5NDpzdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpXFxuZnMvZXh0NC9zdXBlci5jLTM0OTUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTM1Njg9c3RhdGljIGV4dDRfZnNibGtfdCBkZXNjcmlwdG9yX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM2MDYtICovXFxuZnMvZXh0NC9zdXBlci5jOjM2MDc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0NF9nZXRfc3RyaXBlX3NpemUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbmZzL2V4dDQvc3VwZXIuYy0zNjA4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zNzA1PXZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzUwLS8qIEZpbmQgbmV4dCBzdWl0YWJsZSBncm91cCBhbmQgcnVuIGV4dDRfaW5pdF9pbm9kZV90YWJsZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzozNzUxOnN0YXRpYyBpbnQgZXh0NF9ydW5fbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXFxuZnMvZXh0NC9zdXBlci5jLTM3NTIte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM4MTEtICovXFxuZnMvZXh0NC9zdXBlci5jOjM4MTI6c3RhdGljIHZvaWQgZXh0NF9yZW1vdmVfbGlfcmVxdWVzdChzdHJ1Y3QgZXh0NF9saV9yZXF1ZXN0ICplbHIpXFxuZnMvZXh0NC9zdXBlci5jLTM4MTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM4MjEtXFxuZnMvZXh0NC9zdXBlci5jOjM4MjI6c3RhdGljIHZvaWQgZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtMzgyMy17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzgzNS1cXG5mcy9leHQ0L3N1cGVyLmM6MzgzNjpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpleHQ0X2xhenlpbml0X3Rhc2s7XFxuZnMvZXh0NC9zdXBlci5jLTM4MzctXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzg0Ni0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6Mzg0NzpzdGF0aWMgaW50IGV4dDRfbGF6eWluaXRfdGhyZWFkKHZvaWQgKmFyZylcXG5mcy9leHQ0L3N1cGVyLmMtMzg0OC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzk1My1cXG5mcy9leHQ0L3N1cGVyLmM6Mzk1NDpzdGF0aWMgdm9pZCBleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCh2b2lkKVxcbmZzL2V4dDQvc3VwZXIuYy0zOTU1LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zOTY3LVxcbmZzL2V4dDQvc3VwZXIuYzozOTY4OnN0YXRpYyBpbnQgZXh0NF9ydW5fbGF6eWluaXRfdGhyZWFkKHZvaWQpXFxuZnMvZXh0NC9zdXBlci5jLTM5Njkte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTM5OTEtICovXFxuZnMvZXh0NC9zdXBlci5jOjM5OTI6c3RhdGljIGV4dDRfZ3JvdXBfdCBleHQ0X2hhc191bmluaXRfaXRhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTM5OTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwMTEtXFxuZnMvZXh0NC9zdXBlci5jOjQwMTI6c3RhdGljIGludCBleHQ0X2xpX2luZm9fbmV3KHZvaWQpXFxuZnMvZXh0NC9zdXBlci5jLTQwMTMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwMjktXFxuZnMvZXh0NC9zdXBlci5jOjQwMzA6c3RhdGljIHN0cnVjdCBleHQ0X2xpX3JlcXVlc3QgKmV4dDRfbGlfcmVxdWVzdF9uZXcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNDAzMS1cXHRcXHRcXHRcXHRcXHQgICAgZXh0NF9ncm91cF90IHN0YXJ0KVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQwNTc9aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQxMTktICovXFxuZnMvZXh0NC9zdXBlci5jOjQxMjA6c3RhdGljIHZvaWQgZXh0NF9kZXN0cm95X2xhenlpbml0X3RocmVhZCh2b2lkKVxcbmZzL2V4dDQvc3VwZXIuYy00MTIxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00MjQ5PWludCBleHQ0X2NhbGN1bGF0ZV9vdmVyaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQzMDgtXFxuZnMvZXh0NC9zdXBlci5jOjQzMDk6c3RhdGljIHZvaWQgZXh0NF9zZXRfcmVzdl9jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00MzEwLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00MzM4LVxcbmZzL2V4dDQvc3VwZXIuYzo0MzM5OnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X3F1b3RhX21vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDM0MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDM1My1cXG5mcy9leHQ0L3N1cGVyLmM6NDM1NDpzdGF0aWMgdm9pZCBleHQ0X3NldHVwX2NzdW1fdHJpZ2dlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00MzU1LVxcdFxcdFxcdFxcdCAgICBlbnVtIGV4dDRfam91cm5hbF90cmlnZ2VyX3R5cGUgdHlwZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00MzY3LVxcbmZzL2V4dDQvc3VwZXIuYzo0MzY4OnN0YXRpYyB2b2lkIGV4dDRfZnJlZV9zYmkoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbmZzL2V4dDQvc3VwZXIuYy00MzY5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00Mzc3LVxcbmZzL2V4dDQvc3VwZXIuYzo0Mzc4OnN0YXRpYyBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpleHQ0X2FsbG9jX3NiaShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00Mzc5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDAzLVxcbmZzL2V4dDQvc3VwZXIuYzo0NDA0OnN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXFx0XFx0XFx0ICAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ0NjAtXFxuZnMvZXh0NC9zdXBlci5jOjQ0NjE6c3RhdGljIGludCBleHQ0X2hhbmRsZV9jbHVzdGVyc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy00NDYyLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NTIyLSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo0NTIzOnN0YXRpYyB2b2lkIGV4dDRfYXRvbWljX3dyaXRlX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDUyNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDU0OC1cXG5mcy9leHQ0L3N1cGVyLmM6NDU0OTpzdGF0aWMgdm9pZCBleHQ0X2Zhc3RfY29tbWl0X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDU1MC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDU3My1cXG5mcy9leHQ0L3N1cGVyLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfaW5vZGVfaW5mb19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ1NzUtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ2NDYtI2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuZnMvZXh0NC9zdXBlci5jOjQ2NDc6c3RhdGljIGludCBleHQ0X2VuY29kaW5nX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxcbmZzL2V4dDQvc3VwZXIuYy00NjQ4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00Njg3LSNlbHNlXFxuZnMvZXh0NC9zdXBlci5jOjQ2ODg6c3RhdGljIGlubGluZSBpbnQgZXh0NF9lbmNvZGluZ19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG5mcy9leHQ0L3N1cGVyLmMtNDY4OS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDY5My1cXG5mcy9leHQ0L3N1cGVyLmM6NDY5NDpzdGF0aWMgaW50IGV4dDRfaW5pdF9tZXRhZGF0YV9jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG5mcy9leHQ0L3N1cGVyLmMtNDY5NS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDcyOS1cXG5mcy9leHQ0L3N1cGVyLmM6NDczMDpzdGF0aWMgaW50IGV4dDRfY2hlY2tfZmVhdHVyZV9jb21wYXRpYmlsaXR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ3MzEtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00ODMzLVxcbmZzL2V4dDQvc3VwZXIuYzo0ODM0OnN0YXRpYyBpbnQgZXh0NF9jaGVja19nZW9tZXRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00ODM1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDkxMi1cXG5mcy9leHQ0L3N1cGVyLmM6NDkxMzpzdGF0aWMgaW50IGV4dDRfZ3JvdXBfZGVzY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9zdXBlci5jLTQ5MTQtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5NzItXFxuZnMvZXh0NC9zdXBlci5jOjQ5NzM6c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00OTc0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDU2LVxcbmZzL2V4dDQvc3VwZXIuYzo1MDU3OnN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy01MDU4LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MDg5LVxcbmZzL2V4dDQvc3VwZXIuYzo1MDkwOnN0YXRpYyBjb25zdCBjaGFyICpleHQ0X2hhc19qb3VybmFsX29wdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy01MDkxLXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01MTE0LVxcdFxcdHVtaW4oTUFYX1BBR0VDQUNIRV9PUkRFUiwgKDExICsgKHNiKS1cXHUwMDNlc19ibG9ja3NpemVfYml0cyAtIFBBR0VfU0hJRlQpKVxcbmZzL2V4dDQvc3VwZXIuYzo1MTE1OnN0YXRpYyB2b2lkIGV4dDRfc2V0X21heF9tYXBwaW5nX29yZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUxMTYte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUxMjQtXFxuZnMvZXh0NC9zdXBlci5jOjUxMjU6c3RhdGljIGludCBleHQ0X2NoZWNrX2xhcmdlX2ZvbGlvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUxMjYte1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjQ0LjIxODE0NzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTYzODAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgTW91bnQgRmFpbHVyZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgYGZhaWxlZF9tb3VudDhgIGVycm9yLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIHdyb25nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb2NhdGUgdGhlIGNvZGUgd2hlcmUgdGhpcyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZC4gSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBgZmFpbGVkX21vdW50OGAgaXMgZGVmaW5lZCBvciBjYWxsZWQuXG5cblNpbmNlIHRoYXQgbWlnaHQgYmUgdG9vIG5hcnJvdywgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2guIEknbGwgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIHRvIGBmYWlsZWRfbW91bnRgIGluIGdlbmVyYWwsIGFuZCB0aGVuIEknbGwgY29uc2lkZXIgbG9va2luZyBpbnRvIGBleHQ0X2ZpbGxfc3VwZXJgLiBUaGlzIGlzIGEgY29tbW9uIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIG1vdW50IG9wZXJhdGlvbnMsIHNvIGl0IGNvdWxkIGJlIHJlbGF0ZWQuIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUsIHNvIHRoYXQgd2lsbCBndWlkZSBtZS5cblxuVG8gZ2V0IHNvbWUgY29udGV4dCwgSSdsbCB6ZXJvIGluIG9uIHRoZSBhcmVhIG9mIHRoZSBjb2RlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdGhlIGZhaWx1cmUuIEknbGwgcmVhZCBhcm91bmQgbGluZXMgNTY1MCB0byA1NzUwLCBhbmQgYWxzbyBsaW5lcyA1NzAwLTU4MzMgYW5kIHRoZWlyIGVuY2xvc2luZyBmdW5jdGlvbiBpZiB0aGF0IGdpdmVzIG1lIGVub3VnaCBjbHVlcy4gQnkgZm9jdXNpbmcgb24gdGhpcyByZWdpb24sIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIHRoYXQgcmVsYXRlIHRvIHRoZXNlIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0Ni43NzQ1Mjk2NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NjgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NjgwOlxcdFxcdGlmIChlcnIpIHtcXG41NjgxOlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIG1iYWxsb2MgKCVkKVxcXCIsXFxuNTY4MjpcXHRcXHRcXHRcXHQgZXJyKTtcXG41NjgzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50NTtcXG41Njg0OlxcdFxcdH1cXG41Njg1OlxcdFxcbjU2ODY6XFx0XFx0LypcXG41Njg3OlxcdFxcdCAqIFdlIGNhbiBvbmx5IHNldCB1cCB0aGUgam91cm5hbCBjb21taXQgY2FsbGJhY2sgb25jZVxcbjU2ODg6XFx0XFx0ICogbWJhbGxvYyBpcyBpbml0aWFsaXplZFxcbjU2ODk6XFx0XFx0ICovXFxuNTY5MDpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuNTY5MTpcXHRcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9jb21taXRfY2FsbGJhY2sgPVxcbjU2OTI6XFx0XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2NvbW1pdF9jYWxsYmFjaztcXG41NjkzOlxcdFxcbjU2OTQ6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZmxleF9iZyhzYikpXFxuNTY5NTpcXHRcXHRcXHRpZiAoIWV4dDRfZmlsbF9mbGV4X2luZm8oc2IpKSB7XFxuNTY5NjpcXHRcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTY5NzpcXHRcXHRcXHRcXHQgICAgICAgXFxcInVuYWJsZSB0byBpbml0aWFsaXplIFxcXCJcXG41Njk4OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiZmxleF9iZyBtZXRhIGluZm8hXFxcIik7XFxuNTY5OTpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjU3MDA6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ2O1xcbjU3MDE6XFx0XFx0XFx0fVxcbjU3MDI6XFx0XFxuNTcwMzpcXHRcXHRlcnIgPSBleHQ0X3JlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IsIGZpcnN0X25vdF96ZXJvZWQpO1xcbjU3MDQ6XFx0XFx0aWYgKGVycilcXG41NzA1OlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50NjtcXG41NzA2OlxcdFxcbjU3MDc6XFx0XFx0ZXJyID0gZXh0NF9pbml0X29ycGhhbl9pbmZvKHNiKTtcXG41NzA4OlxcdFxcdGlmIChlcnIpXFxuNTcwOTpcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDc7XFxuNTcxMDpcXHQjaWZkZWYgQ09ORklHX1FVT1RBXFxuNTcxMTpcXHRcXHQvKiBFbmFibGUgcXVvdGEgdXNhZ2UgZHVyaW5nIG1vdW50LiAqL1xcbjU3MTI6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfcXVvdGEoc2IpIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuNTcxMzpcXHRcXHRcXHRlcnIgPSBleHQ0X2VuYWJsZV9xdW90YXMoc2IpO1xcbjU3MTQ6XFx0XFx0XFx0aWYgKGVycilcXG41NzE1OlxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50ODtcXG41NzE2OlxcdFxcdH1cXG41NzE3OlxcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXFxuNTcxODpcXHRcXG41NzE5OlxcdFxcdC8qXFxuNTcyMDpcXHRcXHQgKiBTYXZlIHRoZSBvcmlnaW5hbCBiZGV2IG1hcHBpbmcncyB3Yl9lcnIgdmFsdWUgd2hpY2ggY291bGQgYmVcXG41NzIxOlxcdFxcdCAqIHVzZWQgdG8gZGV0ZWN0IHRoZSBtZXRhZGF0YSBhc3luYyB3cml0ZSBlcnJvci5cXG41NzIyOlxcdFxcdCAqL1xcbjU3MjM6XFx0XFx0ZXJyc2VxX2NoZWNrX2FuZF9hZHZhbmNlKFxcdTAwMjZzYi1cXHUwMDNlc19iZGV2LVxcdTAwM2ViZF9tYXBwaW5nLVxcdTAwM2V3Yl9lcnIsXFxuNTcyNDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNiaS1cXHUwMDNlc19iZGV2X3diX2Vycik7XFxuNTcyNTpcXHRcXHRFWFQ0X1NCKHNiKS1cXHUwMDNlc19tb3VudF9zdGF0ZSB8PSBFWFQ0X09SUEhBTl9GUztcXG41NzI2OlxcdFxcdGV4dDRfb3JwaGFuX2NsZWFudXAoc2IsIGVzKTtcXG41NzI3OlxcdFxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjY9IH5FWFQ0X09SUEhBTl9GUztcXG41NzI4OlxcdFxcdC8qXFxuNTcyOTpcXHRcXHQgKiBVcGRhdGUgdGhlIGNoZWNrc3VtIGFmdGVyIHVwZGF0aW5nIGZyZWUgc3BhY2UvaW5vZGUgY291bnRlcnMgYW5kXFxuNTczMDpcXHRcXHQgKiBleHQ0X29ycGhhbl9jbGVhbnVwLiBPdGhlcndpc2UgdGhlIHN1cGVyYmxvY2sgY2FuIGhhdmUgYW4gaW5jb3JyZWN0XFxuNTczMTpcXHRcXHQgKiBjaGVja3N1bSBpbiB0aGUgYnVmZmVyIGNhY2hlIHVudGlsIGl0IGlzIHdyaXR0ZW4gb3V0IGFuZFxcbjU3MzI6XFx0XFx0ICogZTJmc3Byb2dzIHByb2dyYW1zIHRyeWluZyB0byBvcGVuIGEgZmlsZSBzeXN0ZW0gaW1tZWRpYXRlbHlcXG41NzMzOlxcdFxcdCAqIGFmdGVyIGl0IGlzIG1vdW50ZWQgY2FuIGZhaWwuXFxuNTczNDpcXHRcXHQgKi9cXG41NzM1OlxcdFxcdGV4dDRfc3VwZXJibG9ja19jc3VtX3NldChzYik7XFxuNTczNjpcXHRcXHRpZiAobmVlZHNfcmVjb3ZlcnkpIHtcXG41NzM3OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0lORk8sIFxcXCJyZWNvdmVyeSBjb21wbGV0ZVxcXCIpO1xcbjU3Mzg6XFx0XFx0XFx0ZXJyID0gZXh0NF9tYXJrX3JlY292ZXJ5X2NvbXBsZXRlKHNiLCBlcyk7XFxuNTczOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU3NDA6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ5O1xcbjU3NDE6XFx0XFx0fVxcbjU3NDI6XFx0XFxuNTc0MzpcXHRcXHRpZiAodGVzdF9vcHQoc2IsIERJU0NBUkQpIFxcdTAwMjZcXHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXFx1MDAzZXNfYmRldikpIHtcXG41NzQ0OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXFxuNTc0NTpcXHRcXHRcXHRcXHQgXFxcIm1vdW50aW5nIHdpdGggXFxcXFxcXCJkaXNjYXJkXFxcXFxcXCIgb3B0aW9uLCBidXQgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGRpc2NhcmRcXFwiKTtcXG41NzQ2OlxcdFxcdFxcdGNsZWFyX29wdChzYiwgRElTQ0FSRCk7XFxuNTc0NzpcXHRcXHR9XFxuNTc0ODpcXHRcXG41NzQ5OlxcdFxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0Ni43NzQ4NzMwNjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3Nzg3MjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipUcmFjaW5nIEV4ZWN1dGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gaW5pdGlhdGVzIGJlZm9yZSBhIHNwZWNpZmljIGxpbmUgb2YgY29kZSwgc3BlY2lmaWNhbGx5IGxpbmUgNTY4MC4gSXQncyBhIGNvbW1vbiBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMgdGVjaG5pcXVlLiBJbnN0ZWFkIG9mIGJsaW5kbHkgc2VhcmNoaW5nIHRoZSBlbnRpcmUgY29kZWJhc2UsIEknbGwgdXNlIGEgc3RyYXRlZ2ljIGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgdG8gaW52ZXN0aWdhdGUgaXMgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDUxNTAtNTIwMC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBsaW5lIDU2ODAgc3RhcnRzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IHNlY3Rpb24gY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBleGVjdXRpb24gcGF0aCBhbmQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gVGhpcyBpcyBhIGNvbW1vbiBtZXRob2Qgb2YgcmV2ZXJzZSBlbmdpbmVlcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjQ4Ljg1Mjc1MDM2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTUwOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuNTE1MTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG41MTUyOlxcdFxcdGludCBibG9ja3NpemU7XFxuNTE1MzpcXHRcXG41MTU0OlxcdFxcdGJsb2Nrc2l6ZSA9IHNiX21pbl9ibG9ja3NpemUoc2IsIEVYVDRfTUlOX0JMT0NLX1NJWkUpO1xcbjUxNTU6XFx0XFx0aWYgKCFibG9ja3NpemUpIHtcXG41MTU2OlxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcInVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxcIik7XFxuNTE1NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTU4OlxcdFxcdH1cXG41MTU5OlxcdFxcbjUxNjA6XFx0XFx0LypcXG41MTYxOlxcdFxcdCAqIFRoZSBleHQ0IHN1cGVyYmxvY2sgd2lsbCBub3QgYmUgYnVmZmVyIGFsaWduZWQgZm9yIG90aGVyIHRoYW4gMWtCXFxuNTE2MjpcXHRcXHQgKiBibG9jayBzaXplcy4gIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSBidWZmZXIgc3RhcnQuXFxuNTE2MzpcXHRcXHQgKi9cXG41MTY0OlxcdFxcdGlmIChibG9ja3NpemUgIT0gRVhUNF9NSU5fQkxPQ0tfU0laRSkge1xcbjUxNjU6XFx0XFx0XFx0bG9naWNhbF9zYl9ibG9jayA9IHNiaS1cXHUwMDNlc19zYl9ibG9jayAqIEVYVDRfTUlOX0JMT0NLX1NJWkU7XFxuNTE2NjpcXHRcXHRcXHRvZmZzZXQgPSBkb19kaXYobG9naWNhbF9zYl9ibG9jaywgYmxvY2tzaXplKTtcXG41MTY3OlxcdFxcdH0gZWxzZSB7XFxuNTE2ODpcXHRcXHRcXHRsb2dpY2FsX3NiX2Jsb2NrID0gc2JpLVxcdTAwM2VzX3NiX2Jsb2NrO1xcbjUxNjk6XFx0XFx0fVxcbjUxNzA6XFx0XFxuNTE3MTpcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWRfdW5tb3ZhYmxlKHNiLCBsb2dpY2FsX3NiX2Jsb2NrKTtcXG41MTcyOlxcdFxcdGlmIChJU19FUlIoYmgpKSB7XFxuNTE3MzpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJ1bmFibGUgdG8gcmVhZCBzdXBlcmJsb2NrXFxcIik7XFxuNTE3NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihiaCk7XFxuNTE3NTpcXHRcXHR9XFxuNTE3NjpcXHRcXHQvKlxcbjUxNzc6XFx0XFx0ICogTm90ZTogc19lcyBtdXN0IGJlIGluaXRpYWxpemVkIGFzIHNvb24gYXMgcG9zc2libGUgYmVjYXVzZVxcbjUxNzg6XFx0XFx0ICogICAgICAgc29tZSBleHQ0IG1hY3JvLWluc3RydWN0aW9ucyBkZXBlbmQgb24gaXRzIHZhbHVlXFxuNTE3OTpcXHRcXHQgKi9cXG41MTgwOlxcdFxcdGVzID0gKHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICopIChiaC1cXHUwMDNlYl9kYXRhICsgb2Zmc2V0KTtcXG41MTgxOlxcdFxcdHNiaS1cXHUwMDNlc19lcyA9IGVzO1xcbjUxODI6XFx0XFx0c2ItXFx1MDAzZXNfbWFnaWMgPSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19tYWdpYyk7XFxuNTE4MzpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfbWFnaWMgIT0gRVhUNF9TVVBFUl9NQUdJQykge1xcbjUxODQ6XFx0XFx0XFx0aWYgKCFzaWxlbnQpXFxuNTE4NTpcXHRcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJWRlM6IENhbid0IGZpbmQgZXh0NCBmaWxlc3lzdGVtXFxcIik7XFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcdH1cXG41MTg4OlxcdFxcbjUxODk6XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2xvZ19ibG9ja19zaXplKSBcXHUwMDNlXFxuNTE5MDpcXHRcXHQgICAgKEVYVDRfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XFxuNTE5MTpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTE5MjpcXHRcXHRcXHRcXHQgXFxcIkludmFsaWQgbG9nIGJsb2NrIHNpemU6ICV1XFxcIixcXG41MTkzOlxcdFxcdFxcdFxcdCBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19sb2dfYmxvY2tfc2l6ZSkpO1xcbjUxOTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTE5NTpcXHRcXHR9XFxuNTE5NjpcXHRcXHRpZiAobGUzMl90b19jcHUoZXMtXFx1MDAzZXNfbG9nX2NsdXN0ZXJfc2l6ZSkgXFx1MDAzZVxcbjUxOTc6XFx0XFx0ICAgIChFWFQ0X01BWF9DTFVTVEVSX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUpKSB7XFxuNTE5ODpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXFxuNTE5OTpcXHRcXHRcXHRcXHQgXFxcIkludmFsaWQgbG9nIGNsdXN0ZXIgc2l6ZTogJXVcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo0OC44NTQwMzAzMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjgyNzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqRGVidWdnaW5nIFRpbWUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGlzc3VlIGlzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uOyBJIHN1c3BlY3QgdGhhdCdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIFJpZ2h0LCBzbywgcGVyIHRoZSB1c3VhbCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgbGluZXMgNTEzMC01MTU1LiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgbG9naWMsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHRvIGRpYWdub3NlIHRoaXMgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjUxLjE4Njg2MjA0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMzA6XFx0XFx0XFx0ZXJyX3N0ciA9IFxcXCJlbmNyeXB0XFxcIjtcXG41MTMxOlxcdFxcbjUxMzI6XFx0XFx0aWYgKCFlcnJfc3RyKSB7XFxuNTEzMzpcXHRcXHRcXHRleHQ0X3NldF9tYXhfbWFwcGluZ19vcmRlcihzYik7XFxuNTEzNDpcXHRcXHR9IGVsc2UgaWYgKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSkge1xcbjUxMzU6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLCBcXFwiYnMoJWx1KSBcXHUwMDNlIHBzKCVsdSkgdW5zdXBwb3J0ZWQgZm9yICVzXFxcIixcXG41MTM2OlxcdFxcdFxcdFxcdCBzYi1cXHUwMDNlc19ibG9ja3NpemUsIFBBR0VfU0laRSwgZXJyX3N0cik7XFxuNTEzNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTM4OlxcdFxcdH1cXG41MTM5OlxcdFxcbjUxNDA6XFx0XFx0cmV0dXJuIDA7XFxuNTE0MTpcXHR9XFxuNTE0MjpcXHRcXG41MTQzOlxcdHN0YXRpYyBpbnQgZXh0NF9sb2FkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCAqbHNiLFxcbjUxNDQ6XFx0XFx0XFx0XFx0ICAgaW50IHNpbGVudClcXG41MTQ1OlxcdHtcXG41MTQ2OlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjUxNDc6XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzO1xcbjUxNDg6XFx0XFx0ZXh0NF9mc2Jsa190IGxvZ2ljYWxfc2JfYmxvY2s7XFxuNTE0OTpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7XFxuNTE1MDpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjUxNTE6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuNTE1MjpcXHRcXHRpbnQgYmxvY2tzaXplO1xcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHRibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBFWFQ0X01JTl9CTE9DS19TSVpFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDQ6NTEuMTg3MjIzOTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjQ1MTA4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBTdXBlcmJsb2NrIExvYWRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGV4dDRfbG9hZF9zdXBlcmAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGhlIHN1cGVyYmxvY2ssIGEgY3JpdGljYWwgc3RydWN0dXJlLiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0IGFuZCB0aGUgbGluZSBudW1iZXJzLCBJJ20gcHJldHR5IHN1cmUgSSBrbm93IHdoZXJlIHRoYXQgY29kZSBibG9jayBpcy4gSXQgbG9va3MgbGlrZSBpdCBzcGFucyBmcm9tIGxpbmUgNTE0MyB0byBhYm91dCA1ODMzLCByb3VnaGx5LiBUaGUgbGFiZWxzIGBmYWlsZWRfbW91bnQ6YCBhbmQgYG91dF9mYWlsOmAgbGlrZWx5IG1hcmsgdGhlIGV4aXQgcG9pbnRzIGZvciBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc2JpLVx1MDAzZXNfZXJyX3JlcG9ydGAgdGltZXIgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hlbiBhbmQgaG93IHRoZXNlIHRpbWVycyBhcmUgc2V0IHVwLCBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkLiBBIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4gSXQnbGwgZ2l2ZSBtZSBhIGxpc3Qgb2YgYWxsIGluc3RhbmNlcyBvZiBgc19lcnJfcmVwb3J0YCB0aGF0IEkgY2FuIHRoZW4gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA0OjU1LjExMTczNjkyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTYyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNfZXJyX3JlcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzQ4LVxcdC8qIHRpbWVyIGZvciBwZXJpb2RpYyBlcnJvciBzdGF0cyBwcmludGluZyAqL1xcbmZzL2V4dDQvZXh0NC5oOjE3NDk6XFx0c3RydWN0IHRpbWVyX2xpc3Qgc19lcnJfcmVwb3J0O1xcbmZzL2V4dDQvZXh0NC5oOjE3NTA6XFx0LyogdGltZW91dCBpbiBzZWNvbmRzIGZvciBzX2Vycl9yZXBvcnQ7IDAgZGlzYWJsZXMgdGhlIHRpbWVyLiAqL1xcbmZzL2V4dDQvZXh0NC5oOjE3NTE6XFx0dW5zaWduZWQgbG9uZyBzX2Vycl9yZXBvcnRfc2VjO1xcbmZzL2V4dDQvZXh0NC5oLTE3NTItXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMjItXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZnMvZXh0NC9zdXBlci5jLTM3MDYte1xcbmZzL2V4dDQvc3VwZXIuYzozNzA3OlxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTM3MDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxcbmZzL2V4dDQvc3VwZXIuYzozNzQ2OlxcdGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxcbmZzL2V4dDQvc3VwZXIuYzo1NDU5OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbywgMCk7XFxuZnMvZXh0NC9zdXBlci5jLTU0NjAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJvcl9sb2NrKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzQ5LVxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NzUwOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDUqNjA7XFx0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NTE6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NTMtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NzU0OlxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuZnMvZXh0NC9zdXBlci5jLTU3NTUtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MTEtXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTU4MTMtXFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MjUwPXN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cXHRcXHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24ndCBiZWVuXFxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XFx0XFx0ICogc3RhcnRlZCBhbHJlYWR5IGFuZCBzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cXHRcXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcXHRcXHRpZiAoIWVzLVxcdTAwM2VzX2Vycm9yX2NvdW50IFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjYzMTQ6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NjMxNTpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTYzMTYtXFx0XFx0bGUzMl9hZGRfY3B1KFxcdTAwMjZlcy1cXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVxcdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9MTM0PXN0YXRpYyBzc2l6ZV90IGVycl9yZXBvcnRfc2VjX3N0b3JlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYy0xNDctXFxuZnMvZXh0NC9zeXNmcy5jOjE0ODpcXHRpZiAoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjID09IHQpXFx0XFx0Lypub3RoaW5nIHRvIGRvKi9cXG5mcy9leHQ0L3N5c2ZzLmMtMTQ5LVxcdFxcdGdvdG8gb3V0O1xcbmZzL2V4dDQvc3lzZnMuYzoxNTA6XFx0ZWxzZSBpZiAoIXNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyBcXHUwMDI2XFx1MDAyNiB0KSB7XFxuZnMvZXh0NC9zeXNmcy5jOjE1MTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsIHByaW50X2RhaWx5X2Vycm9yX2luZm8sIDApO1xcbmZzL2V4dDQvc3lzZnMuYzoxNTI6XFx0fSBlbHNlIGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgXFx1MDAyNlxcdTAwMjYgIXQpIHtcXG5mcy9leHQ0L3N5c2ZzLmM6MTUzOlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zeXNmcy5jLTE1NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYy0xNTYtXFxuZnMvZXh0NC9zeXNmcy5jOjE1NzpcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSB0O1xcbmZzL2V4dDQvc3lzZnMuYzoxNTg6XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N5c2ZzLmMtMTU5LVxcbi0tXFxuZnMvZXh0NC9zeXNmcy5jPTI0OT1FWFQ0X0FUVFJfT0ZGU0VUKG1iX2Jlc3RfYXZhaWxfbWF4X3RyaW1fb3JkZXIsIDA2NDQsIG1iX29yZGVyLFxcbmZzL2V4dDQvc3lzZnMuYy0yNTAtXFx0XFx0IGV4dDRfc2JfaW5mbywgc19tYl9iZXN0X2F2YWlsX21heF90cmltX29yZGVyKTtcXG5mcy9leHQ0L3N5c2ZzLmM6MjUxOkVYVDRfQVRUUl9PRkZTRVQoZXJyX3JlcG9ydF9zZWMsIDA2NDQsIGVycl9yZXBvcnRfc2VjLCBleHQ0X3NiX2luZm8sIHNfZXJyX3JlcG9ydF9zZWMpO1xcbmZzL2V4dDQvc3lzZnMuYy0yNTItRVhUNF9SV19BVFRSX1NCSV9VSShpbm9kZV9nb2FsLCBzX2lub2RlX2dvYWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNDo1NS4yNDY3MDYxMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA5NTgyODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBleHQ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIGZyb20gYHRpbWVyX2RlbGV0ZV9zeW5jYCB0byBgdGltZXJfc2h1dGRvd25fc3luY2AgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBpbiB0aGUgYGZhaWxlZF9tb3VudDNgIHBhdGguIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgZXh0NF9zYl9pbmZvYCBhbmQgaXRzIGFzc29jaWF0ZWQgYHNfZXJyX3JlcG9ydGAgdGltZXIuXG5cbkkgcmVtZW1iZXIgdGhhdCBgdGltZXJfc2h1dGRvd25fc3luY2AgcHJldmVudHMgdGhlIHRpbWVyIGZyb20gYmVpbmcgcmUtYXJtZWQsIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjdXJyZW50IGNhbGxiYWNrIHRvIGZpbmlzaC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmc6IGNvdWxkIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCwgd2hpY2ggaXMgdGhlIGNhbGxiYWNrIGZvciBgc19lcnJfcmVwb3J0YCwgcG90ZW50aWFsbHkgcmUtYXJtIHRoZSB0aW1lciBhZnRlciBpdCdzIGJlZW4gZGVsZXRlZD8gSSBjaGVjayBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AgYW5kIHllcCwgdGhlcmUncyBhIGBtb2RfdGltZXJgIGNhbGwgaW4gdGhlcmUsIHJlLWFybWluZyB0aGUgdGltZXIgYmFzZWQgb24gYHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjYC4gU28sIHRoZSBvbGQgY29kZSwgdXNpbmcgYHRpbWVyX2RlbGV0ZV9zeW5jYCwgaGFkIGEgKmRlZmluaXRlKiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIElmIHRoZSB0aW1lciB3YXMgZGVsZXRlZCB3aGlsZSB0aGUgY2FsbGJhY2sgd2FzIHJ1bm5pbmcsIGl0IGNvdWxkIHBvdGVudGlhbGx5IHJlLWFybSB0aGUgdGltZXIganVzdCBhZnRlciB0aGUgZGVsZXRlIGZpbmlzaGVkLCBjcmVhdGluZyBhIFVzZS1BZnRlci1GcmVlIHNpdHVhdGlvbiBvbiBgc2JpYCB3aGVuIGl0IGdldHMgZnJlZWQuIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBhdm9pZHMgdGhhdCByZS1hcm1pbmcuIEdvb2QgY2F0Y2guXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSSBhcHBseSBteSB0cmlhZ2UgY3JpdGVyaWE6XG5cbiogICAqKlJlYWNoYWJpbGl0eToqKiBFeHQ0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciB1c2VzIGl0IGV4dGVuc2l2ZWx5LCBpbmNsdWRpbmcgbW91bnRpbmcgaW50ZW50aW9uYWxseSBjb3JydXB0ZWQgaW1hZ2VzIHRvIHRyaWdnZXIgbW91bnQgZmFpbHVyZXMuIFRoZSBgZmFpbGVkX21vdW50M2AgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuKiAgICoqQ29kZSBNb2RpZmljYXRpb246KiogWWVzLCBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQuIFRoZSBjb3JlIG9mIHRoaXMgaXNzdWUgaXMgYSBjaGFuZ2UgZnJvbSBkZWxldGUgdG8gc2h1dGRvd24uIFRoaXMgbWVhbnMgSSBjYW4ndCBqdXN0IGJsaW5kbHkgdHJ1c3QgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgaWYgdGhlIGNvZGUgY2hhbmdlcywgaXQgKm11c3QqIGJlIGZ1enplZC4gQW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBFeHQ0IGlzIGEgY29yZSBWRlMgZmlsZXN5c3RlbS5cblxuU28sIHRoaXMgaGl0cyBteSBmdXp6aW5nIGNyaXRlcmlhIHBlcmZlY3RseS4gSSBhbSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBXb3J0aEZ1enppbmcgPSB0cnVlLiBUaW1lIHRvIGNoZWNrIHRoZSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MuIEkgd2lsbCB3YW50IHRvIGZvY3VzIG9uIGZ1bmN0aW9ucyBuZWFyIG9yIGluIGBfX2V4dDRfZmlsbF9zdXBlcmAgdG8gc2VlIHdoZXJlIHRoZSBleGFjdCBjaGFuZ2UgdGFrZXMgcGxhY2UsIGFuZCBob3cgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgY2hhbmdlcy4gSSB3aWxsIGNoZWNrIGxpbmUgNTM1NyBpbiBgZnMvZXh0NC9zdXBlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2NTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDEuMzQyNTM3NjQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTM1NTpcXHR9XFxuNTM1NjpcXHRcXG41MzU3OlxcdHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjUzNTg6XFx0e1xcbjUzNTk6XFx0XFx0c3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gTlVMTDtcXG41MzYwOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjUzNjE6XFx0XFx0ZXh0NF9mc2Jsa190IGxvZ2ljYWxfc2JfYmxvY2s7XFxuNTM2MjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJvb3Q7XFxuNTM2MzpcXHRcXHRpbnQgbmVlZHNfcmVjb3Zlcnk7XFxuNTM2NDpcXHRcXHRpbnQgZXJyO1xcbjUzNjU6XFx0XFx0ZXh0NF9ncm91cF90IGZpcnN0X25vdF96ZXJvZWQ7XFxuNTM2NjpcXHRcXHRzdHJ1Y3QgZXh0NF9mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG41MzY3OlxcdFxcdGludCBzaWxlbnQgPSBmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9TSUxFTlQ7XFxuNTM2ODpcXHRcXG41MzY5OlxcdFxcdC8qIFNldCBkZWZhdWx0cyBmb3IgdGhlIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgc2V0IGR1cmluZyBwYXJzaW5nICovXFxuNTM3MDpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZXNwZWMgXFx1MDAyNiBFWFQ0X1NQRUNfSk9VUk5BTF9JT1BSSU8pKVxcbjUzNzE6XFx0XFx0XFx0Y3R4LVxcdTAwM2Vqb3VybmFsX2lvcHJpbyA9IEVYVDRfREVGX0pPVVJOQUxfSU9QUklPO1xcbjUzNzI6XFx0XFxuNTM3MzpcXHRcXHRzYmktXFx1MDAzZXNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgPSBFWFQ0X0RFRl9JTk9ERV9SRUFEQUhFQURfQkxLUztcXG41Mzc0OlxcdFxcdHNiaS1cXHUwMDNlc19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQgPVxcbjUzNzU6XFx0XFx0XFx0cGFydF9zdGF0X3JlYWQoc2ItXFx1MDAzZXNfYmRldiwgc2VjdG9yc1tTVEFUX1dSSVRFXSk7XFxuNTM3NjpcXHRcXG41Mzc3OlxcdFxcdGVyciA9IGV4dDRfbG9hZF9zdXBlcihzYiwgXFx1MDAyNmxvZ2ljYWxfc2JfYmxvY2ssIHNpbGVudCk7XFxuNTM3ODpcXHRcXHRpZiAoZXJyKVxcbjUzNzk6XFx0XFx0XFx0Z290byBvdXRfZmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDEuMzQyODg3NDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzEzNzIzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEZWJ1Z2dpbmcgdGhlIGV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGluaXRpYWxpemF0aW9uLiBNeSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBfX2V4dDRfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBsaW5lIDU4MTIuIFRoYXQgbGluZSBjYWxscyBgdGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyByZWxhdGVkIHRvIGVycm9yIHJlcG9ydGluZyBkdXJpbmcgdGhlIGZpbGVzeXN0ZW0ncyBzdGFydHVwLlxuXG5Ob3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgZm9yIGBfX2V4dDRfZmlsbF9zdXBlcmAuIEFmdGVyIGEgcXVpY2sgbG9va3VwLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZXh0NF9maWxsX3N1cGVyYC5cblxuU2luY2UgSSBrbm93IGBleHQ0X2ZpbGxfc3VwZXJgIGNhbGxzIGBfX2V4dDRfZmlsbF9zdXBlcmAsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU4MzUgaW4gYGV4dDRfZmlsbF9zdXBlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbnRyb2wgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpbiB3aGljaCB0aGUgZXJyb3IgaXMgYmVpbmcgcmVwb3J0ZWQuIEknbSBob3BpbmcgdG8gZ2V0IG1vcmUgY29udGV4dCBvbiBob3cgdGhpcyBjYWxsIHNlcXVlbmNlIGlzIHN0cnVjdHVyZWQgdG8gc2VlIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZSBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDkxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNTowNC4yMTQyNjIxODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODM1OlxcdHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG41ODM2OlxcdHtcXG41ODM3OlxcdFxcdHN0cnVjdCBleHQ0X2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbjU4Mzg6XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpO1xcbjU4Mzk6XFx0XFx0Y29uc3QgY2hhciAqZGVzY3I7XFxuNTg0MDpcXHRcXHRpbnQgcmV0O1xcbjU4NDE6XFx0XFxuNTg0MjpcXHRcXHRzYmkgPSBleHQ0X2FsbG9jX3NiaShzYik7XFxuNTg0MzpcXHRcXHRpZiAoIXNiaSlcXG41ODQ0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjU4NDU6XFx0XFxuNTg0NjpcXHRcXHRmYy1cXHUwMDNlc19mc19pbmZvID0gc2JpO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHQvKiBDbGVhbnVwIHN1cGVyYmxvY2sgbmFtZSAqL1xcbjU4NDk6XFx0XFx0c3RycmVwbGFjZShzYi1cXHUwMDNlc19pZCwgJy8nLCAnIScpO1xcbjU4NTA6XFx0XFxuNTg1MTpcXHRcXHRzYmktXFx1MDAzZXNfc2JfYmxvY2sgPSAxO1xcdC8qIERlZmF1bHQgc3VwZXIgYmxvY2sgbG9jYXRpb24gKi9cXG41ODUyOlxcdFxcdGlmIChjdHgtXFx1MDAzZXNwZWMgXFx1MDAyNiBFWFQ0X1NQRUNfc19zYl9ibG9jaylcXG41ODUzOlxcdFxcdFxcdHNiaS1cXHUwMDNlc19zYl9ibG9jayA9IGN0eC1cXHUwMDNlc19zYl9ibG9jaztcXG41ODU0OlxcdFxcbjU4NTU6XFx0XFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcXG41ODU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjU4NTc6XFx0XFx0XFx0Z290byBmcmVlX3NiaTtcXG41ODU4OlxcdFxcbjU4NTk6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTg2MDpcXHRcXHRcXHRpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKVxcbjU4NjE6XFx0XFx0XFx0XFx0ZGVzY3IgPSBcXFwiIGpvdXJuYWxsZWQgZGF0YSBtb2RlXFxcIjtcXG41ODYyOlxcdFxcdFxcdGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX09SREVSRURfREFUQSlcXG41ODYzOlxcdFxcdFxcdFxcdGRlc2NyID0gXFxcIiBvcmRlcmVkIGRhdGEgbW9kZVxcXCI7XFxuNTg2NDpcXHRcXHRcXHRlbHNlXFxuNTg2NTpcXHRcXHRcXHRcXHRkZXNjciA9IFxcXCIgd3JpdGViYWNrIGRhdGEgbW9kZVxcXCI7XFxuNTg2NjpcXHRcXHR9IGVsc2VcXG41ODY3OlxcdFxcdFxcdGRlc2NyID0gXFxcIm91dCBqb3VybmFsXFxcIjtcXG41ODY4OlxcdFxcbjU4Njk6XFx0XFx0aWYgKF9fX3JhdGVsaW1pdChcXHUwMDI2ZXh0NF9tb3VudF9tc2dfcmF0ZWxpbWl0LCBcXFwiRVhUNC1mcyBtb3VudFxcXCIpKVxcbjU4NzA6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXFxcIm1vdW50ZWQgZmlsZXN5c3RlbSAlcFUgJXMgd2l0aCVzLiBcXFwiXFxuNTg3MTpcXHRcXHRcXHRcXHQgXFxcIlF1b3RhIG1vZGU6ICVzLlxcXCIsIFxcdTAwMjZzYi1cXHUwMDNlc191dWlkLFxcbjU4NzI6XFx0XFx0XFx0XFx0IHNiX3Jkb25seShzYikgPyBcXFwicm9cXFwiIDogXFxcInIvd1xcXCIsIGRlc2NyLFxcbjU4NzM6XFx0XFx0XFx0XFx0IGV4dDRfcXVvdGFfbW9kZShzYikpO1xcbjU4NzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA0LjIxNDUxODYwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcwMTA4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdGFrZSBhIGxvb2sgYXQgYHByaW50X2RhaWx5X2Vycm9yX2luZm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLCBhbmQgdGhhdCBmdW5jdGlvbiBzb3VuZHMgbGlrZSBpdCBtaWdodCBob2xkIHNvbWUgcmVsZXZhbnQgY2x1ZXMgdG8gdGhlIGlzc3VlLiBUaGVuLCBJIG5lZWQgdG8gZ2V0IG1vcmUgZ3JhbnVsYXIuIExpbmUgMzcwNSB0byAzNzUwIGluIGBmcy9leHQ0L3N1cGVyLmNgLi4uIHRoYXQgc2VjdGlvbiBvZiBjb2RlIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIGluIHRoZSBsb3dlciBsZXZlbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgY2h1bmsgb2YgdGhlIEVYVDQgc3VwZXJibG9jayBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA2LjI4NDYzMDQwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3MDU6XFx0dm9pZCBwcmludF9kYWlseV9lcnJvcl9pbmZvKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjM3MDY6XFx0e1xcbjM3MDc6XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gdGltZXJfY29udGFpbmVyX29mKHNiaSwgdCwgc19lcnJfcmVwb3J0KTtcXG4zNzA4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktXFx1MDAzZXNfc2I7XFxuMzcwOTpcXHRcXHRzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBzYmktXFx1MDAzZXNfZXM7XFxuMzcxMDpcXHRcXG4zNzExOlxcdFxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudClcXG4zNzEyOlxcdFxcdFxcdC8qIGZzY2sgbmV3ZXIgdGhhbiB2MS40MS4xMyBpcyBuZWVkZWQgdG8gY2xlYW4gdGhpcyBjb25kaXRpb24uICovXFxuMzcxMzpcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9OT1RJQ0UsIFxcXCJlcnJvciBjb3VudCBzaW5jZSBsYXN0IGZzY2s6ICV1XFxcIixcXG4zNzE0OlxcdFxcdFxcdFxcdCBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkpO1xcbjM3MTU6XFx0XFx0aWYgKGVzLVxcdTAwM2VzX2ZpcnN0X2Vycm9yX3RpbWUpIHtcXG4zNzE2OlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwiRVhUNC1mcyAoJXMpOiBpbml0aWFsIGVycm9yIGF0IHRpbWUgJWxsdTogJS4qczolZFxcXCIsXFxuMzcxNzpcXHRcXHRcXHQgICAgICAgc2ItXFx1MDAzZXNfaWQsXFxuMzcxODpcXHRcXHRcXHQgICAgICAgZXh0NF9nZXRfdHN0YW1wKGVzLCBzX2ZpcnN0X2Vycm9yX3RpbWUpLFxcbjM3MTk6XFx0XFx0XFx0ICAgICAgIChpbnQpIHNpemVvZihlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jKSxcXG4zNzIwOlxcdFxcdFxcdCAgICAgICBlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9mdW5jLFxcbjM3MjE6XFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2ZpcnN0X2Vycm9yX2xpbmUpKTtcXG4zNzIyOlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pXFxuMzcyMzpcXHRcXHRcXHRcXHRwcmludGsoS0VSTl9DT05UIFxcXCI6IGlub2RlICV1XFxcIixcXG4zNzI0OlxcdFxcdFxcdFxcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9pbm8pKTtcXG4zNzI1OlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19maXJzdF9lcnJvcl9ibG9jaylcXG4zNzI2OlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogYmxvY2sgJWxsdVxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpXFxuMzcyNzpcXHRcXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfZmlyc3RfZXJyb3JfYmxvY2spKTtcXG4zNzI4OlxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIlxcXFxuXFxcIik7XFxuMzcyOTpcXHRcXHR9XFxuMzczMDpcXHRcXHRpZiAoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl90aW1lKSB7XFxuMzczMTpcXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcIkVYVDQtZnMgKCVzKTogbGFzdCBlcnJvciBhdCB0aW1lICVsbHU6ICUuKnM6JWRcXFwiLFxcbjM3MzI6XFx0XFx0XFx0ICAgICAgIHNiLVxcdTAwM2VzX2lkLFxcbjM3MzM6XFx0XFx0XFx0ICAgICAgIGV4dDRfZ2V0X3RzdGFtcChlcywgc19sYXN0X2Vycm9yX3RpbWUpLFxcbjM3MzQ6XFx0XFx0XFx0ICAgICAgIChpbnQpIHNpemVvZihlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2Z1bmMpLFxcbjM3MzU6XFx0XFx0XFx0ICAgICAgIGVzLVxcdTAwM2VzX2xhc3RfZXJyb3JfZnVuYyxcXG4zNzM2OlxcdFxcdFxcdCAgICAgICBsZTMyX3RvX2NwdShlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2xpbmUpKTtcXG4zNzM3OlxcdFxcdFxcdGlmIChlcy1cXHUwMDNlc19sYXN0X2Vycm9yX2lubylcXG4zNzM4OlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogaW5vZGUgJXVcXFwiLFxcbjM3Mzk6XFx0XFx0XFx0XFx0ICAgICAgIGxlMzJfdG9fY3B1KGVzLVxcdTAwM2VzX2xhc3RfZXJyb3JfaW5vKSk7XFxuMzc0MDpcXHRcXHRcXHRpZiAoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaylcXG4zNzQxOlxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0NPTlQgXFxcIjogYmxvY2sgJWxsdVxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpXFxuMzc0MjpcXHRcXHRcXHRcXHQgICAgICAgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfbGFzdF9lcnJvcl9ibG9jaykpO1xcbjM3NDM6XFx0XFx0XFx0cHJpbnRrKEtFUk5fQ09OVCBcXFwiXFxcXG5cXFwiKTtcXG4zNzQ0OlxcdFxcdH1cXG4zNzQ1OlxcdFxcbjM3NDY6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYylcXG4zNzQ3OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQsIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuMzc0ODpcXHR9XFxuMzc0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDYuMjg1MjEwMTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjQyOTI5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIGV4dDQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEkga25vdyB0aGVzZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBleHQ0LiBMZXQncyBzdGFydCB3aXRoIGEgbG9vayBhdCBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGV4dDQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MDcuODQ5NTA2NjM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjA3Ljg0OTY4NDk2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODA1OTQ2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgYENPTkZJR2AgdmFsdWUgaXMgc2V0IHRvIGBFWFQ0X0ZTYCwgd2hpY2ggdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBFWFQ0IGZpbGVzeXN0ZW0uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBGb2N1c1N5bWJvbHNgIGhlcmUsIGFuZCB0aG9zZSBhcmUgYF9fZXh0NF9maWxsX3N1cGVyYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGFuZCBgcHJpbnRfZGFpbHlfZXJyb3JfaW5mb2AuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFllcywgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilgLiBUaGVuIEkgc2VlIGBzdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpYC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgdXNlZnVsIHZhcmlhdGlvbi4gYHZvaWQgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdClgIGlzIHRoZSBvdGhlciBmb2N1cywgd2hpY2ggbG9va3MgbGlrZSBhbiBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uIE5vdywgYGV4dDRfZmlsbF9zdXBlcmAgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiwgc28gSSdtIHRoaW5raW5nIGl0J3MgZWl0aGVyIHBhcnQgb2YgYGV4dDRfY29udGV4dF9vcHNgIG9yIGlzIGNhbGxlZCBieSBgZXh0NF9nZXRfdHJlZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZXh0NF9maWxsX3N1cGVyYCBpcyBhY3R1YWxseSBjYWxsZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCdzIHNlZSBob3cgdGhhdCdzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTEuNjU1NjM1NjQ3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1OTIzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9iYWxsb2MuYz0yMzk9dW5zaWduZWQgZXh0NF9mcmVlX2NsdXN0ZXJzX2FmdGVyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtMjU0LSAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suICBUaGUgZGVzY3JpcHRvcnMgYXJlIGxvYWRlZCBpbiBtZW1vcnlcXG5mcy9leHQ0L2JhbGxvYy5jOjI1NTogKiB3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCAoc2VlIGV4dDRfZmlsbF9zdXBlcikuXFxuZnMvZXh0NC9iYWxsb2MuYy0yNTYtICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDczOT1zdGF0aWMgaW50IGV4dDRfaW5vZGVfYmxvY2tzX3NldChzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQ3NTktXFx0ICogYWxsb3dlZCB0aGlzLCBzYi1cXHUwMDNlc19tYXhieXRlcyB3YXMgc2V0IGFjY29yZGluZyB0byB0aGUgaHVnZV9maWxlXFxuZnMvZXh0NC9pbm9kZS5jOjQ3NjA6XFx0ICogZmVhdHVyZSBpbiBleHQ0X2ZpbGxfc3VwZXIoKS5cXG5mcy9leHQ0L2lub2RlLmMtNDc2MS1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTEwNjE9c3RhdGljIGludCBleHQ0X21iX3NjYW5fZ3JvdXBzX2Jlc3RfYXZhaWwoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTEwODUtXFx0XFx0ICogV2UgYXJlIGFzc3VtaW5nIHRoYXQgc3RyaXBlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2ZcXG5mcy9leHQ0L21iYWxsb2MuYzoxMDg2OlxcdFxcdCAqIGNsdXN0ZXIgcmF0aW8gb3RoZXJ3aXNlIF9fZXh0NF9maWxsX3N1cGVyIGV4aXN0cyBlYXJseS5cXG5mcy9leHQ0L21iYWxsb2MuYy0xMDg3LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNTA9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNTYtXFxuZnMvZXh0NC9zdXBlci5jOjUzNTc6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUzNTgte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NzQ9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODM0LVxcbmZzL2V4dDQvc3VwZXIuYzo1ODM1OnN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtNTgzNi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg1NC1cXG5mcy9leHQ0L3N1cGVyLmM6NTg1NTpcXHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01ODU2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4ODU9c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtNTg4Ni17XFxuZnMvZXh0NC9zdXBlci5jOjU4ODc6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGV4dDRfZmlsbF9zdXBlcik7XFxuZnMvZXh0NC9zdXBlci5jLTU4ODgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToxMS43ODYyMzY0NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwOTExMTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRha2UuIEl0J3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgZnVuY3Rpb24g4oCTIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6YXRpb24uIFRoZXkncmUgc3dhcHBpbmcgb3V0IGB0aW1lcl9kZWxldGVfc3luYygpYCBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmMoKWAgZm9yIGBzYmktXHUwMDNlc19lcnJfcmVwb3J0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSBkYWlseSBlcnJvciByZXBvcnRpbmcgdGltZXIsIGBwcmludF9kYWlseV9lcnJvcl9pbmZvYCwgaXMgKmNvbXBsZXRlbHkqIHNodXQgZG93biBiZWZvcmUgdGhlIHN1cGVyYmxvY2sgaXMgZnJlZWQuIFByZXZlbnRzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlbnN1cmVzIGl0IGNhbuKAmXQgYmUgcmUtYXJtZWQgYWZ0ZXIgdGhlIG1vdW50IGZhaWxzLCB3aGljaCBpcyBjbGVhbmVyIGFuZCBzYWZlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBjb2RlLCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgc3l6a2FsbGVyLCBhbmQgdGhlcmVmb3JlIHdlIGFyZSBnb29kIHRvIGZ1enogdGhpcyBzZWN0aW9uLlxuXG5JJ3ZlIGdvdCB0aGUgYEZvY3VzU3ltYm9sc2AgbmFpbGVkIGRvd246IGBfX2V4dDRfZmlsbF9zdXBlcmAsIHdoaWNoIGlzIHRoZSBkaXJlY3QgdGFyZ2V0LCBhbmQgaXRzIGRpcmVjdCBcInBhcmVudFwiIGBleHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhlIGRhaWx5IGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbiwgYHByaW50X2RhaWx5X2Vycm9yX2luZm9gLiBUaGUgY29kZSBhbHNvIGhhbmRsZXMgYGV4dDRfcHV0X3N1cGVyYCwgd2hpY2ggY2xlYW5zIHVwIGBzX2Vycl9yZXBvcnRgIHRvby5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgRVhUNF9GU2AgY29uZmlnIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLlxuXG5JJ3ZlIHZlcmlmaWVkIGFsbCB0aGUgY3JpdGVyaWEuIFdlIGhhdmUgcmVhY2hhYmxlIGNvZGUgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aCwgYW5kIGl0IGlzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUuXG5cblNvLCBsb29rcyBsaWtlIHdlIGhhdmUgYSBnby4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5OCwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNDk1MzQ5ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NTA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICAgIFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gICAgXCJwcmludF9kYWlseV9lcnJvcl9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBleHQ0IG1vdW50IGluIF9fZXh0NF9maWxsX3N1cGVyKCkgdG8gdXNlIHRpbWVyX3NodXRkb3duX3N5bmMoKSBpbnN0ZWFkIG9mIHRpbWVyX2RlbGV0ZV9zeW5jKCkgb24gc19lcnJfcmVwb3J0LCBwcmV2ZW50aW5nIHRpbWVyIHJlLWFybWluZyBkdXJpbmcgZmlsZXN5c3RlbSB0ZWFyZG93bi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIFZGUy9maWxlc3lzdGVtIG1vdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToxNi42MTM5MDg2MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAwOTg5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNjE0NTk4NDA4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ0MDAyOTUxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3NmEzYzU2ZmVmNmM1MjVhZjExOGI2NTM4N2IzY2Y2MGRmMjNhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE2OjA0OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCBiY2EwZGM4N2QwYjdjLi4xNTRlMDA5MDEwMTc0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01ODA5LDcgKzU4MDksNyBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbiBcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuIFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuK1x0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZzYmktXHUwMDNlc19lcnJfcmVwb3J0KTtcbiBcdGV4dDRfZ3JvdXBfZGVzY19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50OlxuICNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MTYuNjE0NjAwMjc4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5ODA1MDg2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IFN1cGVyYmxvY2sgQ2xlYW51cCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgYGRpZmZgIHNob3dzIGEgY2hhbmdlIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhlIGNvbnRleHQgaXMgcmlnaHQgYXJvdW5kIHRoZSBzdXBlcmJsb2NrIGNsZWFudXAgbG9naWMsIHNwZWNpZmljYWxseSBuZWFyIGxpbmUgNTgwOS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgZnJvbSBgdGltZXJfZGVsZXRlX3N5bmNgIHRvIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBmb3IgYHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIFRoZSBnb2FsIGhlcmUgaXMgY2xlYXJseSBhYm91dCBtb3JlIHJvYnVzdCBjbGVhbnVwIG9mIHRoZSBlcnJvciByZXBvcnRpbmcgdGltZXIgYmVmb3JlIHRoZSBzdXBlcmJsb2NrIGlzIGRlc3Ryb3llZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBidWcsIHJhY2UgY29uZGl0aW9uLCBvciBhIGdlbmVyYWwgaGFyZGVuaW5nIGltcHJvdmVtZW50LiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IGl0IGlzIHJlbGF0ZWQgdG8gYSBtb3JlIHJvYnVzdCBhcHByb2FjaCB0byBkZXN0cm95aW5nIHRoZSB0aW1lci4gSSB3b25kZXIgd2hhdCB0aGUgc3VidGxlIGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIHRoZXNlIHRpbWVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGlzIGNvcnJlY3QsIHNhZmUsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEkgd2lsbCByZWFkIHVwIG9uIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBmb3IgYHRpbWVyX3NodXRkb3duX3N5bmNgIHRvIGZ1bGx5IGNvbXByZWhlbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaGlzIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIGVuc3VyZSB0aGF0IGFueSBwZW5kaW5nIHRpbWVyIG9wZXJhdGlvbnMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgZnJlZWluZyB0aGUgYXNzb2NpYXRlZCBzdXBlcmJsb2NrIGRhdGEuIEknbGwgYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhbnkgcmVsYXRlZCBidWcgcmVwb3J0cyB0byBnZXQgdGhlIGZ1bGwgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNToyMy41OTUxMTExOTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODAwOlxcdFxcbjU4MDE6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuNTgwMjpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41ODAzOlxcdFxcdH1cXG41ODA0OlxcdGZhaWxlZF9tb3VudDNhOlxcbjU4MDU6XFx0XFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbjU4MDY6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuNTgwNzpcXHRcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG41ODA4OlxcdGZhaWxlZF9tb3VudDM6XFxuNTgwOTpcXHRcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbjU4MTA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG41ODExOlxcdFxcdGV4dDRfc3RvcF9tbXBkKHNiaSk7XFxuNTgxMjpcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuNTgxMzpcXHRcXHRleHQ0X2dyb3VwX2Rlc2NfZnJlZShzYmkpO1xcbjU4MTQ6XFx0ZmFpbGVkX21vdW50OlxcbjU4MTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpXFxuNTgxNjpcXHRcXHR1dGY4X3VubG9hZChzYi1cXHUwMDNlc19lbmNvZGluZyk7XFxuNTgxNzpcXHQjZW5kaWZcXG41ODE4OlxcdFxcbjU4MTk6XFx0I2lmZGVmIENPTkZJR19RVU9UQVxcbjU4MjA6XFx0XFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBFWFQ0X01BWFFVT1RBUzsgaSsrKVxcbjU4MjE6XFx0XFx0XFx0a2ZyZWUoZ2V0X3FmX25hbWUoc2IsIHNiaSwgaSkpO1xcbjU4MjI6XFx0I2VuZGlmXFxuNTgyMzpcXHRcXHRmc2NyeXB0X2ZyZWVfZHVtbXlfcG9saWN5KFxcdTAwMjZzYmktXFx1MDAzZXNfZHVtbXlfZW5jX3BvbGljeSk7XFxuNTgyNDpcXHRcXHRicmVsc2Uoc2JpLVxcdTAwM2VzX3NiaCk7XFxuNTgyNTpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlKSB7XFxuNTgyNjpcXHRcXHRcXHRpbnZhbGlkYXRlX2JkZXYoZmlsZV9iZGV2KHNiaS1cXHUwMDNlc19qb3VybmFsX2JkZXZfZmlsZSkpO1xcbjU4Mjc6XFx0XFx0XFx0ZnNfYmRldl9maWxlX3JlbGVhc2Uoc2JpLVxcdTAwM2VzX2pvdXJuYWxfYmRldl9maWxlLCBzYik7XFxuNTgyODpcXHRcXHR9XFxuNTgyOTpcXHRvdXRfZmFpbDpcXG41ODMwOlxcdFxcdGludmFsaWRhdGVfYmRldihzYi1cXHUwMDNlc19iZGV2KTtcXG41ODMxOlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbjU4MzI6XFx0XFx0cmV0dXJuIGVycjtcXG41ODMzOlxcdH1cXG41ODM0OlxcdFxcbjU4MzU6XFx0c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbjU4MzY6XFx0e1xcbjU4Mzc6XFx0XFx0c3RydWN0IGV4dDRfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuNTgzODpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7XFxuNTgzOTpcXHRcXHRjb25zdCBjaGFyICpkZXNjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MjMuNTk1NDkzMDg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDU5NDYzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRyYWNraW5nIGRvd24gdGhvc2UgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgOlxuXG4qKkZpbmRpbmcgRnVuY3Rpb24gVXNhZ2UgaW4gZXh0NCBTdXBlcmJsb2NrKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYHRpbWVyX3NodXRkb3duX3N5bmNgIGFuZCBgc19lcnJfcmVwb3J0YCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIHN1cGVyYmxvY2sgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogZWxzZSB0aGVzZSBhcmUgY2FsbGVkIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGNsdWVzIGxpZS4gQnkgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHRoZWlyIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCBzZWUgaG93IHRoZXkncmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTY6MDU6MjUuNjAxNDQyMjQ0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5OTM1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic19lcnJfcmVwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMjItXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzI0LVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzcwNT12b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuZnMvZXh0NC9zdXBlci5jLTM3MDYte1xcbmZzL2V4dDQvc3VwZXIuYzozNzA3OlxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IHRpbWVyX2NvbnRhaW5lcl9vZihzYmksIHQsIHNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTM3MDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNzQ1LVxcbmZzL2V4dDQvc3VwZXIuYzozNzQ2OlxcdGlmIChzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjM3NDc6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzc0OC19XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTM1Nz1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NDU4LVxcbmZzL2V4dDQvc3VwZXIuYzo1NDU5OlxcdHRpbWVyX3NldHVwKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCwgcHJpbnRfZGFpbHlfZXJyb3JfaW5mbywgMCk7XFxuZnMvZXh0NC9zdXBlci5jLTU0NjAtXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJvcl9sb2NrKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzQ5LVxcdGlmIChlcy1cXHUwMDNlc19lcnJvcl9jb3VudCkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NzUwOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDUqNjA7XFx0LyogZmlyc3QgdGltZSAgNSBtaW51dGVzICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NTE6XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NTc1MjpcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NTMtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NzU0OlxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuZnMvZXh0NC9zdXBlci5jLTU3NTUtXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc3ND1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MTEtXFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTgxMjpcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuZnMvZXh0NC9zdXBlci5jLTU4MTMtXFx0ZXh0NF9ncm91cF9kZXNjX2ZyZWUoc2JpKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MjUwPXN0YXRpYyB2b2lkIGV4dDRfdXBkYXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMC1cXHRcXHQgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24ndCBiZWVuXFxuZnMvZXh0NC9zdXBlci5jOjYzMTE6XFx0XFx0ICogc3RhcnRlZCBhbHJlYWR5IGFuZCBzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgaXMgbm90IHplcm9cXG5mcy9leHQ0L3N1cGVyLmMtNjMxMi1cXHRcXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NjMxMzpcXHRcXHRpZiAoIWVzLVxcdTAwM2VzX2Vycm9yX2NvdW50IFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpXFxuZnMvZXh0NC9zdXBlci5jOjYzMTQ6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG5mcy9leHQ0L3N1cGVyLmM6NjMxNTpcXHRcXHRcXHRcXHRcXHQgIGppZmZpZXMgKyBzZWNzX3RvX2ppZmZpZXMoc2JpLVxcdTAwM2VzX2Vycl9yZXBvcnRfc2VjKSk7XFxuZnMvZXh0NC9zdXBlci5jLTYzMTYtXFx0XFx0bGUzMl9hZGRfY3B1KFxcdTAwMjZlcy1cXHUwMDNlc19lcnJvcl9jb3VudCwgc2JpLVxcdTAwM2VzX2FkZF9lcnJvcl9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE2OjA1OjI1LjgxMDQ0MDUwMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA0NDMzNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVGltZXIgU2h1dGRvd24gQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBpcyBiZWluZyBpbXBsZW1lbnRlZCBoZXJlIHRvIGd1YXJhbnRlZSB0aGF0IGEgdGltZXIgY2FuJ3QgYmUgcmVzdGFydGVkIG9uY2UgaXQncyBiZWVuIHNodXQgZG93biwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIHByb2JsZW1zIGxpa2UgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGR1cmluZyB0aGUgdGVhcmRvd24gb2YgdGhlIGBzYmlgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBpZiBhIG1vdW50IG9wZXJhdGlvbiBmYWlscy4gSSBzZWUgdGhhdCB0aGUgY2hhbmdlIGludm9sdmVzIHN0YW5kYXJkaXppbmcgb24gYHRpbWVyX3NodXRkb3duX3N5bmNgIGluIHRoZSBlcnJvciBjbGVhbnVwIHBhdGggb2YgYF9fZXh0NF9maWxsX3N1cGVyKClgLCB3aGljaCBjdXJyZW50bHkgdXNlcyBgdGltZXJfZGVsZXRlX3N5bmNgLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBhIHRpbWVyIGZyb20gYmVpbmcgcmUtYXJtZWQgZHVyaW5nIG9yIGFmdGVyIHRoZSBjbGVhbnVwIHByb2Nlc3M7IGEgY2xhc3NpYyBsaWZlY3ljbGUgaXNzdWUsIGFuZCBhIGNvbW1vbiBzb3VyY2Ugb2YgdXNlLWFmdGVyLWZyZWUgYW5kIHRpbWVyIHRlYXJkb3duIGJ1Z3MuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgcmVnYXJkaW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm9wZS4gV2UncmUgbm90IHRvdWNoaW5nIGFueXRoaW5nIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObyBkaWNlLiBUaGUgY29kZSdzIGxvZ2ljIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMy4gICoqQWxsb2NhdGlvbi9Jbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8qKiBObyBhZ2Fpbi4gV2UncmUgbm90IGludHJvZHVjaW5nIG9yIGNoYW5naW5nIGFueSBhbGxvY2F0aW9uIHBhdHRlcm5zIHRoYXQgd291bGQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gcmVhZCBsYXRlci5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIGFjY2VzcyBvciB1bmluaXRpYWxpemVkIGJ5dGUgZXhwb3N1cmVzLlxuXG5CYXNlZCBvbiB0aGF0LCBpdCBzZWVtcyB0aGlzIGlzIHB1cmVseSBhYm91dCB0aGUgdGltZXIncyBsaWZlY3ljbGUgYW5kIGVuc3VyaW5nIGl0J3MgcHJvcGVybHkgZGlzYWJsZWQuIEknbSBmb2N1c2luZyBvbiB0aGUgKmFmdGVyKiB0aGUgdGltZXIgaGFzIGJlZW4gZGVsZXRlZC5cblxuVGhlIHByaW1hcnkgcmVhc29uIHRoaXMgY2hhbmdlIG1hdHRlcnMgaXNuJ3QgYWJvdXQgS01TQU4gc3BlY2lmaWNhbGx5LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHRpbWVyLXJlbGF0ZWQgcmFjZSBjb25kaXRpb25zLiBTdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhlc2Uga2luZHMgb2YgYnVncywgaW4gYW4gYWN0aXZlIGtlcm5lbCBidWlsZC5cblxuVGh1cywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIGFuZCBtaXRpZ2F0ZXMgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHRoYXQgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGNhbiBkZXRlY3QuIFdlJ3JlIG5vdCBleHBvc2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk4LCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNjowNTozMS4wMTQ4NzY1NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb3VudCBmYWlsdXJlIGNsZWFudXAgcGF0aCBpbiBgX19leHQ0X2ZpbGxfc3VwZXIoKWAgYnkgcmVwbGFjaW5nIGB0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2JpLVxcdTAwM2VzX2Vycl9yZXBvcnQpYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydClgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgdGltZXIgZnJvbSBiZWluZyByZS1hcm1lZCBkdXJpbmcgb3IgYWZ0ZXIgdGVhci1kb3duIG9mIHRoZSBleHQ0IHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBvbiBtb3VudCBmYWlsdXJlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGNyZWF0ZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSB6ZXJvaW5nLCBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gVXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[1] Phase: Succeeded StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2] Phase: Succeeded StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:05:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 16:05:42 +0000 UTC FinishedAt: 2026-09-05 16:05:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9kbdf/series-workflow9kbdf-convert-artifact-1616033801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 16:05:52 +0000 UTC FinishedAt: 2026-09-05 16:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 16:05:52 +0000 UTC FinishedAt: 2026-09-05 16:28:20 +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:*d8297e99-413b-43b7-ab86-1fd4f7b502e8,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-workflow9kbdf/series-workflow9kbdf-convert-artifact-1616033801/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": "5b0a2f14-fc02-49d8-acea-a6d614f7d56f", "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-workflow9kbdf/series-workflow9kbdf-build-action-3371060458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-09-05 16:05:52 +0000 UTC FinishedAt: 2026-09-05 16:06:02 +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:*d8297e99-413b-43b7-ab86-1fd4f7b502e8,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-workflow9kbdf/series-workflow9kbdf-convert-artifact-1616033801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-09-05 16:11:10 +0000 UTC FinishedAt: 2026-09-05 16:28:10 +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:*d8297e99-413b-43b7-ab86-1fd4f7b502e8,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-workflow9kbdf/series-workflow9kbdf-convert-artifact-1616033801/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": "5b0a2f14-fc02-49d8-acea-a6d614f7d56f", "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-workflow9kbdf/series-workflow9kbdf-build-action-3371060458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 16:28:20 +0000 UTC FinishedAt: 2026-09-05 16:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 16:28:20 +0000 UTC FinishedAt: 2026-09-05 16:28:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 16:28:20 +0000 UTC FinishedAt: 2026-09-05 16:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 16:28:20 +0000 UTC FinishedAt: 2026-09-05 16:28:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9kbdf/series-workflow9kbdf-convert-artifact-3775735836/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 16:28:30 +0000 UTC FinishedAt: 2026-09-05 16:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 16:28:30 +0000 UTC FinishedAt: 2026-09-05 16:30:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5b0a2f14-fc02-49d8-acea-a6d614f7d56f,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-workflow9kbdf/series-workflow9kbdf-build-action-3371060458/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-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 16:30:27 +0000 UTC FinishedAt: 2026-09-05 16:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 16:30:27 +0000 UTC FinishedAt: 2026-09-05 16:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 16:30:27 +0000 UTC FinishedAt: 2026-09-05 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 16:30:27 +0000 UTC FinishedAt: 2026-09-05 16:47:38 +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:*d8297e99-413b-43b7-ab86-1fd4f7b502e8,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-workflow9kbdf/series-workflow9kbdf-convert-artifact-3775735836/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": "6c212032-853f-463f-9455-1e5502e0ceb9", "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-workflow9kbdf/series-workflow9kbdf-build-action-1359137656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 16:30:27 +0000 UTC FinishedAt: 2026-09-05 16:47:28 +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:*d8297e99-413b-43b7-ab86-1fd4f7b502e8,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-workflow9kbdf/series-workflow9kbdf-convert-artifact-3775735836/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": "6c212032-853f-463f-9455-1e5502e0ceb9", "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-workflow9kbdf/series-workflow9kbdf-build-action-1359137656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 16:47:38 +0000 UTC FinishedAt: 2026-09-05 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 16:47:38 +0000 UTC FinishedAt: 2026-09-05 16:47:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 16:47:38 +0000 UTC FinishedAt: 2026-09-05 16:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 16:47:38 +0000 UTC FinishedAt: 2026-09-05 16:49:26 +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:*6c212032-853f-463f-9455-1e5502e0ceb9,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-workflow9kbdf/series-workflow9kbdf-build-action-1359137656/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-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"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:*5b0a2f14-fc02-49d8-acea-a6d614f7d56f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c212032-853f-463f-9455-1e5502e0ceb9,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-workflow9kbdf/series-workflow9kbdf-build-action-3371060458/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-workflow9kbdf/series-workflow9kbdf-build-action-1359137656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:49:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"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-workflow9kbdf/series-workflow9kbdf-convert-artifact-1480514277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 16:49:36 +0000 UTC FinishedAt: 2026-09-05 16:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 16:49:46 +0000 UTC FinishedAt: 2026-09-05 16:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9kbdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_fill_super","ext4_fill_super","print_daily_error_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af5f12805e5cefa4fe68d6127c7e1fb78cd5535c","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a509e22d-9b28-4f52-a959-a951da2f707c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 16:49:46 +0000 UTC FinishedAt: 2026-09-05 16:50:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5b0a2f14-fc02-49d8-acea-a6d614f7d56f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c212032-853f-463f-9455-1e5502e0ceb9,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-workflow9kbdf/series-workflow9kbdf-build-action-3371060458/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-workflow9kbdf/series-workflow9kbdf-build-action-1359137656/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-workflow9kbdf/series-workflow9kbdf-convert-artifact-1480514277/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,}