Name: series-workflowlnftt Phase: Succeeded StartedAt: 2026-09-04 07:44:40 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[0] Phase: Succeeded StartedAt: 2026-09-04 07:44:40 +0000 UTC FinishedAt: 2026-09-04 08:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 07:44:40 +0000 UTC FinishedAt: 2026-09-04 08:46:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVERLAY_FS" ], "series_id": "229cbe2b-1d74-4e22-886e-aaa836afd348" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ovl_fs_params_verify" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtb3VudCBvcHRpb24gdmVyaWZpY2F0aW9uIGNoZWNrIGluIE92ZXJsYXlGUyAoZnMvb3ZlcmxheWZzL3BhcmFtcy5jKSB0byByZWplY3QgY29uZmxpY3Rpbmcgb3B0aW9ucyB3aGVuIGJvdGggJiMzOTt1c2VyeGF0dHImIzM5OyBhbmQgJiMzOTt2ZXJpdHkmIzM5OyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG92ZXJsYXlmcyBtb3VudCBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGluIG92bF9mc19wYXJhbXNfdmVyaWZ5KCkgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIGNvbWJpbmF0aW9ucyBvZiB1c2VyeGF0dHIgYW5kIHZlcml0eSBtb3VudCBvcHRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3aXRoaW4gdGhlIG92ZXJsYXkgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzNDIzNzE4M2U3YWJkYTk1NTA2NjkyYWI3Yzc1MGMwODFjZGM4ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA4OjQ1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuIFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogU2lsZW50bHkgZGlzYWJsZSBkZWZhdWx0IHNldHRpbmcgb2YgcmVkaXJlY3QgYW5kIG1ldGFjb3B5LlxuIFx0XHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZsX2ZzX3BhcmFtc192ZXJpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM0MjM3MTgzZTdhYmRhOTU1MDY2OTJhYjdjNzUwYzA4MWNkYzhlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmMKaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogCQkJcHJfZXJyKCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJaWYgKGNvbmZpZy0mZ3Q7dmVyaXR5X21vZGUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCQkvKgogCQkgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuCiAJCSAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPdmVybGF5ZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBtYW5hZ2luZyBvdmVybGF5IGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBlaXRoZXIgcmVhY2ggZm9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yLCBtb3JlIGxpa2VseSwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgOTk3LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgYWxsIGFib3V0IHF1aWNrbHkgZXN0YWJsaXNoaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL3BhcmFtcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0XHQgKiBpbiB0aGlzIGNvbmZsaWN0LlxuIDk4MTpcdFx0XHRcdCAqL1xuIDk4MjpcdFx0XHRcdHByX2luZm8oXCYjMzQ7ZGlzYWJsaW5nIG1ldGFjb3B5IGR1ZSB0byBuZnNfZXhwb3J0PW9uXFxuXCYjMzQ7KTtcbiA5ODM6XHRcdFx0XHRjb25maWctXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcbiA5ODQ6XHRcdFx0fVxuIDk4NTpcdFx0fVxuIDk4NjpcdFxuIDk4NzpcdFxuIDk4ODpcdFx0LyogUmVzb2x2ZSB1c2VyeGF0dHIgLVx1MDAzZSAhcmVkaXJlY3QgXHUwMDI2XHUwMDI2ICFtZXRhY29weSBkZXBlbmRlbmN5ICovXG4gOTg5Olx0XHRpZiAoY29uZmlnLVx1MDAzZXVzZXJ4YXR0cikge1xuIDk5MDpcdFx0XHRpZiAoc2V0LnJlZGlyZWN0IFx1MDAyNlx1MDAyNlxuIDk5MTpcdFx0XHQgICAgY29uZmlnLVx1MDAzZXJlZGlyZWN0X21vZGUgIT0gT1ZMX1JFRElSRUNUX05PRk9MTE9XKSB7XG4gOTkyOlx0XHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixyZWRpcmVjdF9kaXI9JXNcXG5cJiMzNDssXG4gOTkzOlx0XHRcdFx0ICAgICAgIG92bF9yZWRpcmVjdF9tb2RlKGNvbmZpZykpO1xuIDk5NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk5NTpcdFx0XHR9XG4gOTk2Olx0XHRcdGlmIChjb25maWctXHUwMDNlbWV0YWNvcHkgXHUwMDI2XHUwMDI2IHNldC5tZXRhY29weSkge1xuIDk5NzpcdFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXG5cJiMzNDspO1xuIDk5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk5OTpcdFx0XHR9XG4xMDAwOlx0XHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbjEwMDE6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcblwmIzM0OyxcbjEwMDI6XHRcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuMTAwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwNDpcdFx0XHR9XG4xMDA1Olx0XHRcdC8qXG4xMDA2Olx0XHRcdCAqIFNpbGVudGx5IGRpc2FibGUgZGVmYXVsdCBzZXR0aW5nIG9mIHJlZGlyZWN0IGFuZCBtZXRhY29weS5cbjEwMDc6XHRcdFx0ICogVGhpcyBzaGFsbCBiZSB0aGUgZGVmYXVsdCBpbiB0aGUgZnV0dXJlIGFzIHdlbGw6IHRoZXNlXG4xMDA4Olx0XHRcdCAqIG9wdGlvbnMgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaWYgdXNlZCB0b2dldGhlciB3aXRoXG4xMDA5Olx0XHRcdCAqIHVzZXJ4YXR0ci5cbjEwMTA6XHRcdFx0ICovXG4xMDExOlx0XHRcdGNvbmZpZy1cdTAwM2VyZWRpcmVjdF9tb2RlID0gT1ZMX1JFRElSRUNUX05PRk9MTE9XO1xuMTAxMjpcdFx0XHRjb25maWctXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcbjEwMTM6XHRcdH1cbjEwMTQ6XHRcbjEwMTU6XHRcdC8qXG4xMDE2Olx0XHQgKiBGYWlsIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRydXN0ZWQgeGF0dHIgY2FwYWJpbGl0eSBhbmQgYSBmZWF0dXJlIHdhc1xuMTAxNzpcdFx0ICogZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhhdCByZXF1aXJlcyB0aGVtLlxuMTAxODpcdFx0ICovXG4xMDE5Olx0XHRpZiAoIWNvbmZpZy1cdTAwM2V1c2VyeGF0dHIgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgb3ZlcmxheWZzIFBhcmFtZXRlcnMgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBmdW5jdGlvbiB3aXRoaW4gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW5mbHVlbmNlIGhvdyBgb3ZlcmxheWZzYCBiZWhhdmVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBgQ09ORklHYCBvcHRpb25zIHJlbGF0ZSB0byBvdmVybGF5ZnMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBnbyBkaWcgYXJvdW5kIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgYm9vbGVhbiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCB0byBlbmFibGUgYW5kIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIG92ZXJsYXlmcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gcGF0aHMgdGhhdCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0YWtlcy4gVGhhdCBraW5kIG9mIGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSB3aGF0IHNjZW5hcmlvcyBhcmUgcG9zc2libGUgd2l0aGluIHRoaXMgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPVkVSTEFZX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkV4YW1pbmluZyBPdmVybGF5RlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIG92ZXJsYXlmcyBhZ2FpbiwgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJsYXlmcyBjb2RlYmFzZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIHZlcml0eSBzdXBwb3J0LiBJJiMzOTttIGZhaXJseSBjZXJ0YWluIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgZmlsZSBiZWZvcmUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcnVjaWFsIG9yIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBkb3QgYWxsIHRoZSBpJiMzOTtzIGFuZCBjcm9zcyB0aGUgdCYjMzk7cy4gSXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgT1ZFUkxBWV9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBGU19TVEFDS1xuICAgNTpcdFx0c2VsZWN0IEVYUE9SVEZTXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIEFuIG92ZXJsYXkgZmlsZXN5c3RlbSBjb21iaW5lcyB0d28gZmlsZXN5c3RlbXMgLSBhbiAmIzM5O3VwcGVyJiMzOTsgZmlsZXN5c3RlbVxuICAgODpcdFx0ICBhbmQgYSAmIzM5O2xvd2VyJiMzOTsgZmlsZXN5c3RlbS4gIFdoZW4gYSBuYW1lIGV4aXN0cyBpbiBib3RoIGZpbGVzeXN0ZW1zLCB0aGVcbiAgIDk6XHRcdCAgb2JqZWN0IGluIHRoZSAmIzM5O3VwcGVyJiMzOTsgZmlsZXN5c3RlbSBpcyB2aXNpYmxlIHdoaWxlIHRoZSBvYmplY3QgaW4gdGhlXG4gIDEwOlx0XHQgICYjMzk7bG93ZXImIzM5OyBmaWxlc3lzdGVtIGlzIGVpdGhlciBoaWRkZW4gb3IsIGluIHRoZSBjYXNlIG9mIGRpcmVjdG9yaWVzLFxuICAxMTpcdFx0ICBtZXJnZWQgd2l0aCB0aGUgJiMzOTt1cHBlciYjMzk7IG9iamVjdC5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuICAxNjpcdFx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxuICAyMDpcdFx0ICByZWRpcmVjdHMgd2hlbiByZW5hbWluZyBkaXJlY3RvcmllcyBieSBkZWZhdWx0LiAgSW4gdGhpcyBjYXNlIGl0IGlzXG4gIDIxOlx0XHQgIHN0aWxsIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIHJlZGlyZWN0cyBnbG9iYWxseSB3aXRoIHRoZVxuICAyMjpcdFx0ICBcJiMzNDtyZWRpcmVjdF9kaXI9b2ZmXCYjMzQ7IG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtIGluc3RhbmNlIGJhc2lzXG4gIDIzOlx0XHQgIHdpdGggdGhlIFwmIzM0O3JlZGlyZWN0X2Rpcj1vZmZcJiMzNDsgbW91bnQgb3B0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBOb3RlLCB0aGF0IHJlZGlyZWN0cyBhcmUgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUuICBUaGF0IGlzLCBtb3VudGluZ1xuICAyNjpcdFx0ICBhbiBvdmVybGF5IHdoaWNoIGhhcyByZWRpcmVjdHMgb24gYSBrZXJuZWwgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXNcbiAgMjc6XHRcdCAgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4gIDMzOlx0XHRkZWZhdWx0IHlcbiAgMzQ6XHRcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBEaXNhYmxlIHRoaXMgdG8gZ2V0IGEgcG9zc2libHkgbW9yZSBzZWN1cmUgY29uZmlndXJhdGlvbiwgYnV0IHRoYXRcbiAgMzc6XHRcdCAgbWlnaHQgbm90IGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBrZXJuZWxzLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzIG5vdCBhbiBpc3N1ZSwgdGhlbiBpdCBpcyBzYWZlIGFuZFxuICA0MDpcdFx0ICByZWNvbW1lbmRlZCB0byBzYXkgTiBoZXJlLlxuICA0MTpcdFxuICA0MjpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxuICA0MzpcdFxuICA0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXG4gIDQ3Olx0XHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIE9WRVJMQVlfRlNcbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgdGhpcyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgdGhlbiBvdmVybGF5IGZpbGVzeXN0ZW1zIHdpbGwgdXNlXG4gIDUxOlx0XHQgIHRoZSBpbmRleCBkaXJlY3RvcnkgdG8gbWFwIGxvd2VyIGlub2RlcyB0byB1cHBlciBpbm9kZXMgYnkgZGVmYXVsdC5cbiAgNTI6XHRcdCAgSW4gdGhpcyBjYXNlIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIGluZGV4IGdsb2JhbGx5IHdpdGggdGhlXG4gIDUzOlx0XHQgIFwmIzM0O2luZGV4PW9mZlwmIzM0OyBtb2R1bGUgb3B0aW9uIG9yIG9uIGEgZmlsZXN5c3RlbSBpbnN0YW5jZSBiYXNpcyB3aXRoIHRoZVxuICA1NDpcdFx0ICBcJiMzNDtpbmRleD1vZmZcJiMzNDsgbW91bnQgb3B0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUaGUgaW5vZGVzIGluZGV4IGZlYXR1cmUgcHJldmVudHMgYnJlYWtpbmcgb2YgbG93ZXIgaGFyZGxpbmtzIG9uIGNvcHlcbiAgNTc6XHRcdCAgdXAuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIE5vdGUsIHRoYXQgdGhlIGlub2RlcyBpbmRleCBmZWF0dXJlIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICA2MDpcdFx0ICBUaGF0IGlzLCBtb3VudGluZyBhbiBvdmVybGF5IHdoaWNoIGhhcyBhbiBpbm9kZXMgaW5kZXggb24gYSBrZXJuZWxcbiAgNjE6XHRcdCAgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICA2MjpcdFxuICA2MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NDpcdFxuICA2NTpcdGNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4gIDY3Olx0XHRkZXBlbmRzIG9uIE9WRVJMQVlfRlNcbiAgNjg6XHRcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU19JTkRFWFxuICA2OTpcdFx0ZGVwZW5kcyBvbiAhT1ZFUkxBWV9GU19NRVRBQ09QWVxuICA3MDpcdFx0aGVscFxuICA3MTpcdFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcbiAgNzI6XHRcdCAgdGhlIGluZGV4IGRpcmVjdG9yeSB0byBkZWNvZGUgb3ZlcmxheSBORlMgZmlsZSBoYW5kbGVzIGJ5IGRlZmF1bHQuXG4gIDczOlx0XHQgIEluIHRoaXMgY2FzZSwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gdHVybiBvZmYgTkZTIGV4cG9ydCBzdXBwb3J0XG4gIDc0Olx0XHQgIGdsb2JhbGx5IHdpdGggdGhlIFwmIzM0O25mc19leHBvcnQ9b2ZmXCYjMzQ7IG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtXG4gIDc1Olx0XHQgIGluc3RhbmNlIGJhc2lzIHdpdGggdGhlIFwmIzM0O25mc19leHBvcnQ9b2ZmXCYjMzQ7IG1vdW50IG9wdGlvbi5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhlIE5GUyBleHBvcnQgZmVhdHVyZSBjcmVhdGVzIGFuIGluZGV4IG9uIGNvcHkgdXAgb2YgZXZlcnkgZmlsZSBhbmRcbiAgNzg6XHRcdCAgZGlyZWN0b3J5LiAgVGhpcyBmdWxsIGluZGV4IGlzIHVzZWQgdG8gZGV0ZWN0IG92ZXJsYXkgZmlsZXN5c3RlbXNcbiAgNzk6XHRcdCAgaW5jb25zaXN0ZW5jaWVzIG9uIGxvb2t1cCwgbGlrZSByZWRpcmVjdCBmcm9tIG11bHRpcGxlIHVwcGVyIGRpcnMgdG9cbiAgODA6XHRcdCAgdGhlIHNhbWUgbG93ZXIgZGlyLiAgVGhlIGZ1bGwgaW5kZXggbWF5IGluY3VyIHNvbWUgb3ZlcmhlYWQgb24gbW91bnRcbiAgODE6XHRcdCAgdGltZSwgZXNwZWNpYWxseSB3aGVuIHZlcmlmeWluZyB0aGF0IGRpcmVjdG9yeSBmaWxlIGhhbmRsZXMgYXJlIG5vdFxuICA4MjpcdFx0ICBzdGFsZS5cbiAgODM6XHRcbiAgODQ6XHRcdCAgTm90ZSwgdGhhdCB0aGUgTkZTIGV4cG9ydCBmZWF0dXJlIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICA4NTpcdFx0ICBUaGF0IGlzLCBtb3VudGluZyBhbiBvdmVybGF5IHdoaWNoIGhhcyBhIGZ1bGwgaW5kZXggb24gYSBrZXJuZWxcbiAgODY6XHRcdCAgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICA4NzpcdFxuICA4ODpcdFx0ICBNb3N0IHVzZXJzIHNob3VsZCBzYXkgTiBoZXJlIGFuZCBlbmFibGUgdGhpcyBmZWF0dXJlIG9uIGEgY2FzZS1ieS1cbiAgODk6XHRcdCAgY2FzZSBiYXNpcyB3aXRoIHRoZSBcJiMzNDtuZnNfZXhwb3J0PW9uXCYjMzQ7IG1vdW50IG9wdGlvbi5cbiAgOTA6XHRcbiAgOTE6XHRcdCAgU2F5IE4gdW5sZXNzIHlvdSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMuXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIE9WRVJMQVlfRlNfWElOT19BVVRPXG4gIDk0Olx0XHRib29sIFwmIzM0O092ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcJiMzNDtcbiAgOTU6XHRcdGRlZmF1bHQgblxuICA5NjpcdFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXG4gIDk3Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gIDk4Olx0XHRoZWxwXG4gIDk5Olx0XHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxuIDEwMDpcdFx0ICB1bnVzZWQgaGlnaCBiaXRzIGluIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpbm9kZSBudW1iZXJzIHRvIG1hcCBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgLiBUaW1lIHRvIGRpZyBpbnRvIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIHdhbnQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUga2luZHMgb2YgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcsIGFuZCB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGxpZS4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IE92ZXJsYXlGUyYjMzk7cyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgdG8gZm9jdXMgYW55IGZ1cnRoZXIgYW5hbHlzaXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292bF9mc19wYXJhbXNfdmVyaWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9wYXJhbXMuYz04NDA9dm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3NS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo4NzY6aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3Ny1cdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmg9NDA9dm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5oOjQxOmludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbmZzL292ZXJsYXlmcy9wYXJhbXMuaC00Mi1cdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9MTM3MT1zdGF0aWMgaW50IG92bF9maWxsX3N1cGVyX2NyZWRzKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzc5LVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MTM4MDpcdGVyciA9IG92bF9mc19wYXJhbXNfdmVyaWZ5KGN0eCwgXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZyk7XG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzgxLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE92ZXJsYXlGUyBhbmQgYHZlcml0eV9tb2RlYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB2ZXJpdHlfbW9kZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHBhcmFtZXRlciYjMzk7cyBiZWhhdmlvciBpcyBrZXkgdG8gW2luc2VydCB5b3VyIGZpZWxkJiMzOTtzIHJlbGF0ZWQgdGFzay9wcm9ibGVtIGhlcmUgLSBlLmcuLCBvcHRpbWl6aW5nIGNvbnRhaW5lciBzZWN1cml0eSwgdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYXVkaXRpbmcgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBldGMuXS4gSSBuZWVkIHRvIGdyYXNwIHByZWNpc2VseSBob3cgYHZlcml0eV9tb2RlYCBpbmZsdWVuY2VzIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0mIzM5O3MgaW50ZWdyaXR5IGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgbW91bnQgb3BlcmF0aW9ucyBhbmQgZmlsZSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGUgcGFyYW1ldGVyIGlzIHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG1ldGFkYXRhL2RhdGEgc3RydWN0dXJlIGhhbmRsaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBvdmVybGF5ZnMgZmVhdHVyZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB0byB1bmNvdmVyIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpdHlfbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvY29weV91cC5jPTEwMjg9c3RhdGljIGJvb2wgb3ZsX25lZWRfbWV0YV9jb3B5X3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0Mi1cdC8qIEZhbGwgYmFjayB0byBmdWxsIGNvcHkgaWYgbm8gZnN2ZXJpdHkgb24gc291cmNlIGRhdGEgYW5kIHdlIHJlcXVpcmUgdmVyaXR5ICovXG5mcy9vdmVybGF5ZnMvY29weV91cC5jOjEwNDM6XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0NC1cdFx0c3RydWN0IHBhdGggbG93ZXJkYXRhO1xuLS1cbmZzL292ZXJsYXlmcy9uYW1laS5jPTk1ND1zdGF0aWMgaW50IG92bF9tYXliZV92YWxpZGF0ZV92ZXJpdHkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2MC1cbmZzL292ZXJsYXlmcy9uYW1laS5jOjk2MTpcdGlmICghb2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSB8fFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYyLVx0ICAgICFvdmxfaXNfbWV0YWNvcHlfZGVudHJ5KGRlbnRyeSkgfHxcbi0tXG5mcy9vdmVybGF5ZnMvbmFtZWkuYy05NjYtXHRpZiAoIW92bF90ZXN0X2ZsYWcoT1ZMX0hBU19ESUdFU1QsIGlub2RlKSkge1xuZnMvb3ZlcmxheWZzL25hbWVpLmM6OTY3Olx0XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2OC1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O21ldGFjb3B5IGZpbGUgJiMzOTslcGQmIzM5OyBoYXMgbm8gZGlnZXN0IHNwZWNpZmllZFxcblwmIzM0Oyxcbi0tXG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5Lmg9OD1zdHJ1Y3Qgb3ZsX2NvbmZpZyB7XG4tLVxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTEzLVx0aW50IHJlZGlyZWN0X21vZGU7XG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5Lmg6MTQ6XHRpbnQgdmVyaXR5X21vZGU7XG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5LmgtMTUtXHRib29sIGluZGV4O1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz0xMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBvdmxfcGFyYW1ldGVyX3Zlcml0eVtdID0ge1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTM0OnN0YXRpYyBjb25zdCBjaGFyICpvdmxfdmVyaXR5X21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzUte1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNjpcdHJldHVybiBvdmxfcGFyYW1ldGVyX3Zlcml0eVtjb25maWctXHUwMDNldmVyaXR5X21vZGVdLm5hbWU7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM3LX1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzgtXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTM5OnN0YXRpYyBpbnQgb3ZsX3Zlcml0eV9tb2RlX2RlZih2b2lkKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTYxMj1zdGF0aWMgaW50IG92bF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy02ODQtXHRjYXNlIE9wdF92ZXJpdHk6XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6Njg1Olx0XHRjb25maWctXHUwMDNldmVyaXR5X21vZGUgPSByZXN1bHQudWludF8zMjtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy02ODYtXHRcdGJyZWFrO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz04NzY9aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NjgtXHRcdFx0Y29uZmlnLVx1MDAzZW5mc19leHBvcnQgPSBmYWxzZTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5Njk6XHRcdH0gZWxzZSBpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTcwLVx0XHRcdC8qXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3NC1cdFx0XHRwcl9pbmZvKFwmIzM0O2Rpc2FibGluZyBuZnNfZXhwb3J0IGR1ZSB0byB2ZXJpdHk9JXNcXG5cJiMzNDssXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6OTc1Olx0XHRcdFx0b3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3Ni1cdFx0XHRjb25maWctXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05OTktXHRcdH1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAwOlx0XHRpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAwMS1cdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcblwmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAyOlx0XHRcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAwMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAyOC1cdFx0fVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEwMjk6XHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDMwLVx0XHRcdHByX2VycihcJiMzNDt2ZXJpdHkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgdHJ1c3RlZCB4YXR0cnNcXG5cJiMzNDspO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz0xMDU0PWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA0LVx0XHRzZXFfcHV0cyhtLCBcJiMzNDssdXNlcnhhdHRyXCYjMzQ7KTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA1Olx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDYtXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LHZlcml0eT0lc1wmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA3Olx0XHRcdCAgIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwOC1cdHJldHVybiAwO1xuLS1cbmZzL292ZXJsYXlmcy91dGlsLmM9MTM3MT1pbnQgb3ZsX3ZhbGlkYXRlX3Zlcml0eShzdHJ1Y3Qgb3ZsX2ZzICpvZnMsXG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzgwLVxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxMzgxOlx0aWYgKCFvZnMtXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8XG5mcy9vdmVybGF5ZnMvdXRpbC5jLTEzODItXHQgICAgLyogVmVyaXR5IG9ubHkgd29ya3Mgb24gcmVndWxhciBmaWxlcyAqL1xuLS1cbmZzL292ZXJsYXlmcy91dGlsLmMtMTM5MC1cdGlmICgheGF0dHJfc2l6ZSB8fCAhbWV0YWNvcHlfZGF0YS5kaWdlc3RfYWxnbykge1xuZnMvb3ZlcmxheWZzL3V0aWwuYzoxMzkxOlx0XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM5Mi1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O21ldGFjb3B5IGZpbGUgJiMzOTslcGQmIzM5OyBoYXMgbm8gZGlnZXN0IHNwZWNpZmllZFxcblwmIzM0Oyxcbi0tXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTE0MjY9aW50IG92bF9nZXRfdmVyaXR5X2RpZ2VzdChzdHJ1Y3Qgb3ZsX2ZzICpvZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpzcmMsXG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDMwLVxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxNDMxOlx0aWYgKCFvZnMtXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8ICFTX0lTUkVHKGRfaW5vZGUoc3JjLVx1MDAzZWRlbnRyeSktXHUwMDNlaV9tb2RlKSlcbmZzL292ZXJsYXlmcy91dGlsLmMtMTQzMi1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ0LVx0ICAgIFdBUk5fT05fT05DRShkaWdlc3Rfc2l6ZSBcdTAwM2UgRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRSkpIHtcbmZzL292ZXJsYXlmcy91dGlsLmM6MTQ0NTpcdFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XG5mcy9vdmVybGF5ZnMvdXRpbC5jLTE0NDYtXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtsb3dlciBmaWxlICYjMzk7JXBkJiMzOTsgaGFzIG5vIGZzLXZlcml0eSBkaWdlc3RcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIE92ZXJsYXlGUyBQYXJhbWV0ZXIgVmVyaWZpY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKWAuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGEgY29uZmxpY3Q6IHRoZSBjb2RlIGlzIHJlamVjdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IHRyeSB0byB1c2UgYm90aCBgdXNlcnhhdHRyYCBhbmQgYSBub24tYG9mZmAgYHZlcml0eV9tb2RlYC4gSXQmIzM5O3MgcmV0dXJuaW5nIGAtRUlOVkFMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB2ZXJpdHkgbmVlZHMgdHJ1c3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgdHJ1c3RlZC5vdmVybGF5LipgKSwgYW5kIGB1c2VyLipgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGB1c2VyeGF0dHJgKSBkb24mIzM5O3QgY3V0IGl0LgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWxldmFudCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gRm9ydHVuYXRlbHksIG92ZXJsYXlmcyBpcyBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmaWxlc3lzdGVtIHN1cHBvcnQsIHNvIGEgc2ltcGxlIGBtb3VudCAtdCBvdmVybGF5IC4uLmAgc2hvdWxkIHRyaWdnZXIgaXQsIHdoaWNoIHN1Z2dlc3RzIHllcy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBTZWN0aW9uIDMsIHRoZSBhbnN3ZXIgaXMgbW9zdCBsaWtlbHkgeWVzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYW5kIG1vZGlmeWluZyBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGxvZ2ljIGluIG92ZXJsYXlmcywgd2hpY2ggaXMgYSAqY29yZSogZmlsZXN5c3RlbSBhbmQgVkZTIGRyaXZlci4gV2UgYXJlIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIHN5c3RlbS4KCkxldCYjMzk7cyBjb25maXJtIHJlYWNoYWJpbGl0eSBhbmQgdGhlIHJlcXVpcmVtZW50cy4gWWVzLCBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGlzIGluZGVlZCByZWFjaGFibGUgd2hlbiBtb3VudGluZyBvdmVybGF5ZnMgd2l0aCBib3RoIGB1c2VyeGF0dHJgIGFuZCBgdmVyaXR5YCBlbmFibGVkLiBJIGNhbiBzZWUgdGhhdCB0aGUgYE9WRVJMQVlfRlNgIGNvbmZpZyBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgb2YgY291cnNlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgZGlyZWN0bHkuIFdlIGNhbiBmb2N1cyBzeW1ib2xzIG9uIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgb3IgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgb3ZsX2ZpbGxfc3VwZXJfY3JlZHNgIG9yIGBvdmxfcGFyc2VfcGFyYW1gLCBidXQgYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgb3ZlcmxheWZzIE1ha2VmaWxlIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRoYXQgY291bGQgaW1wYWN0IHJlYWNoYWJpbGl0eS4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZ1enppbmcgY2FtcGFpZ24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL01ha2VmaWxlLTUtXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgJiM0Mzs9IG92ZXJsYXkub1xuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIE92ZXJsYXlGUyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgYXVkaXQgdGhlIGBmcy9vdmVybGF5ZnMvTWFrZWZpbGVgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggZmlsZXN5c3RlbXMsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgdGhpbmcgaXMgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBmcmFua2x5LCBhbnkgYXJlYXMgdGhhdCBtaWdodCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgdGhlIGNlbnRyYWwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYSBwcmV0dHkgY3JpdGljYWwgcGllY2Ugb2Yga2VybmVsIGZ1bmN0aW9uYWxpdHksIHNvIG5vIGFzc3VtcHRpb25zLCBqdXN0IGEgbGluZS1ieS1saW5lIGNoZWNrIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZSBzdXJlIGl0IHN0aWxsIG1ha2VzIHNlbnNlLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgbWFrZWZpbGVzIGFuZCB0aGUgcnVsZXMgc3BlY2lmaWMgdG8gdGhpcyBmaWxlc3lzdGVtLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MsIG9yIGRhbmdlcm91cyBnb3RjaGFzIGx1cmtpbmcgaW4gdGhlIGRldGFpbHM/IEkmIzM5O2xsIGFsc28gYmUgZm9jdXNpbmcgb24gaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgJiM0Mzs9IG92ZXJsYXkub1xuICAgNzpcdFxuICAgODpcdG92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxuICAgOTpcdFx0XHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzEKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT3ZlcmxheUZTIFBhcmFtZXRlciBWZXJpZmljYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoZSBgT1ZFUkxBWV9GU2AgY29uZmlnIGlzIHRoZSBrZXkgaGVyZSDigJMgaXQmIzM5O3MgYWxsIHRoYXQmIzM5O3MgbmVlZGVkIHRvIGJ1aWxkIGBwYXJhbXMuY2AuIExldCYjMzk7cyBkaXZlIGludG8gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gcXVpY2tseSBjb25maXJtaW5nIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHNuZWFreSBzeW1ib2xzIG9yIGNvbmZpZ3MgaW52b2x2ZWQuIFllcCwganVzdCBgT1ZFUkxBWV9GU2AgKG5vIGBDT05GSUdfYCBwcmVmaXgsIGdvdCBpdCkuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgbm93LgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBiZWluZyBzZXQgaXMgaW1wb3J0YW50LiBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHNpZ25pZmljYW50OiBUaGlzIHBhdGNoIGludHJvZHVjZXMgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHJlamVjdGluZyBjb25mbGljdGluZyBvcHRpb25zIGxpa2UgYHVzZXJ4YXR0cmAgYW5kIGB2ZXJpdHlgIGR1cmluZyBvdmVybGF5ZnMgbW91bnQgb3B0aW9uIHByb2Nlc3NpbmcgKndpdGhpbiogYG92bF9mc19wYXJhbXNfdmVyaWZ5KClgLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIHdpdGhpbiBvdmVybGF5ZnMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIHZhbHVhYmxlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoZSBhbmFseXNpcywgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICYjMzk7dXNlcnhhdHRyJiMzOTsgYW5kICYjMzk7dmVyaXR5JiMzOTsgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM0MjM3MTgzZTdhYmRhOTU1MDY2OTJhYjdjNzUwYzA4MWNkYzhlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmMKaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogCQkJcHJfZXJyKCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJaWYgKGNvbmZpZy0mZ3Q7dmVyaXR5X21vZGUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCQkvKgogCQkgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuCiAJCSAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE92ZXJsYXlGUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBpcyBjb25jZXJuaW5nIGxpbmUgOTk3LCBzbyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LiBBaCwgdGhlcmUgaXQgaXMg4oCTIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgZm9yIGNvbmZsaWN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV3IGB2ZXJpdHlfbW9kZWAgc2V0dGluZy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgYW4gZXJyb3IgY2hlY2s6IGlmIGB1c2VyeGF0dHJgIGlzIGVuYWJsZWQgKmFuZCogYHZlcml0eV9tb2RlYCBpcyBzZXQgKHRvIGFueXRoaW5nLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUpLCBpdCYjMzk7bGwgdGhyb3cgYW4gYC1FSU5WQUxgLiAgVGhlIGVycm9yIG1lc3NhZ2UgY2xlYXJseSBzdGF0ZXMgdGhlIGNvbmZsaWN0LiBJdCYjMzk7cyB1c2luZyBgb3ZsX3Zlcml0eV9tb2RlKClgIHRvIGdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVyaXR5IG1vZGUsIHdoaWNoIGlzIG5pY2UuIFNlZW1zIGxpa2UgYSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGhlcmUuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIGB1c2VyeGF0dHJgIGFuZCBhbnkgYHZlcml0eWAgc2V0dGluZy4gSSBhc3N1bWUgdGhlcmUmIzM5O3MgYW4gaW5oZXJlbnQgaW5jb21wYXRpYmlsaXR5IHRoZXJlLCBsaWtlbHkgc3RlbW1pbmcgZnJvbSBob3cgb3ZlcmxheWZzIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgaG93IHZlcml0eSBtb2RlIGludGVyYWN0cyB3aXRoIHRoYXQuICBMb29rcyBsaWtlIGl0IGlzIHByb2JhYmx5IGFuIGludGVuZGVkIGRlc2lnbiByZXN0cmljdGlvbiwgc2luY2UgdGhlIGNvbmZsaWN0IGlzIG5vdCAmIzM0O2ZpeGVkJiMzNDsgYnkgYW55IGNvZGUgY2hhbmdlcy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb25mbGljdCwgYnV0IHRoaXMgcGF0Y2ggc2VlbXMgd2VsbC1wbGFjZWQgYW5kIGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgYmFzZWQgb24gdGhpcyBzbmlwcGV0LiBJdOKAmXMgYSBnb29kLCBjbGVhbiBjaGVjayB0aGF0IHdpbGwgaGVscCBwcmV2ZW50IHVzZXIgbWlzY29uZmlndXJhdGlvbnMuIE5vdyBJIG5lZWQgdG8gcmV2aWV3IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY29uZmxpY3QgZXhpc3RzIGFuZCB3aGV0aGVyIHRoaXMgYXBwcm9hY2ggdG8gaGFuZGxlIGl0IGlzIHRoZSBiZXN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvcGFyYW1zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0XHRcdCAqIGluIHRoaXMgY29uZmxpY3QuXG4gOTgxOlx0XHRcdFx0ICovXG4gOTgyOlx0XHRcdFx0cHJfaW5mbyhcJiMzNDtkaXNhYmxpbmcgbWV0YWNvcHkgZHVlIHRvIG5mc19leHBvcnQ9b25cXG5cJiMzNDspO1xuIDk4MzpcdFx0XHRcdGNvbmZpZy1cdTAwM2VtZXRhY29weSA9IGZhbHNlO1xuIDk4NDpcdFx0XHR9XG4gOTg1Olx0XHR9XG4gOTg2Olx0XG4gOTg3Olx0XG4gOTg4Olx0XHQvKiBSZXNvbHZlIHVzZXJ4YXR0ciAtXHUwMDNlICFyZWRpcmVjdCBcdTAwMjZcdTAwMjYgIW1ldGFjb3B5IGRlcGVuZGVuY3kgKi9cbiA5ODk6XHRcdGlmIChjb25maWctXHUwMDNldXNlcnhhdHRyKSB7XG4gOTkwOlx0XHRcdGlmIChzZXQucmVkaXJlY3QgXHUwMDI2XHUwMDI2XG4gOTkxOlx0XHRcdCAgICBjb25maWctXHUwMDNlcmVkaXJlY3RfbW9kZSAhPSBPVkxfUkVESVJFQ1RfTk9GT0xMT1cpIHtcbiA5OTI6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHJlZGlyZWN0X2Rpcj0lc1xcblwmIzM0OyxcbiA5OTM6XHRcdFx0XHQgICAgICAgb3ZsX3JlZGlyZWN0X21vZGUoY29uZmlnKSk7XG4gOTk0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTk1Olx0XHRcdH1cbiA5OTY6XHRcdFx0aWYgKGNvbmZpZy1cdTAwM2VtZXRhY29weSBcdTAwMjZcdTAwMjYgc2V0Lm1ldGFjb3B5KSB7XG4gOTk3Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixtZXRhY29weT1vblxcblwmIzM0Oyk7XG4gOTk4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTk5Olx0XHRcdH1cbjEwMDA6XHRcdFx0aWYgKGNvbmZpZy1cdTAwM2V2ZXJpdHlfbW9kZSkge1xuMTAwMTpcdFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCYjMzQ7LFxuMTAwMjpcdFx0XHRcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG4xMDAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDA0Olx0XHRcdH1cbjEwMDU6XHRcdFx0LypcbjEwMDY6XHRcdFx0ICogU2lsZW50bHkgZGlzYWJsZSBkZWZhdWx0IHNldHRpbmcgb2YgcmVkaXJlY3QgYW5kIG1ldGFjb3B5LlxuMTAwNzpcdFx0XHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcbjEwMDg6XHRcdFx0ICogb3B0aW9ucyBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpZiB1c2VkIHRvZ2V0aGVyIHdpdGhcbjEwMDk6XHRcdFx0ICogdXNlcnhhdHRyLlxuMTAxMDpcdFx0XHQgKi9cbjEwMTE6XHRcdFx0Y29uZmlnLVx1MDAzZXJlZGlyZWN0X21vZGUgPSBPVkxfUkVESVJFQ1RfTk9GT0xMT1c7XG4xMDEyOlx0XHRcdGNvbmZpZy1cdTAwM2VtZXRhY29weSA9IGZhbHNlO1xuMTAxMzpcdFx0fVxuMTAxNDpcdFxuMTAxNTpcdFx0LypcbjEwMTY6XHRcdCAqIEZhaWwgaWYgd2UgZG9uJiMzOTt0IGhhdmUgdHJ1c3RlZCB4YXR0ciBjYXBhYmlsaXR5IGFuZCBhIGZlYXR1cmUgd2FzXG4xMDE3Olx0XHQgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCB0aGF0IHJlcXVpcmVzIHRoZW0uXG4xMDE4Olx0XHQgKi9cbjEwMTk6XHRcdGlmICghY29uZmlnLVx1MDAzZXVzZXJ4YXR0ciBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkludmVzdGlnYXRpbmcgYG92bF92ZXJpdHlfbW9kZShjb25maWcpYCoqCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiwgYG92bF92ZXJpdHlfbW9kZShjb25maWcpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBkb2luZywgYW5kIHRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBsb29rIGF0IGl0cyBpbnB1dCwgd2hpY2ggYXBwZWFycyB0byBiZSBgY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgYGNvbmZpZ2AgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgdG8gdGhlIGZ1bmN0aW9uLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBsaWtlIHRvIGRvLCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBpcyBsb29rIGF0IGBjb25maWctJmd0O3Zlcml0eV9tb2RlYC4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHR5cGUgdGhpcyBmaWVsZCBpcy4gSXMgaXQgYW4gZW51bT8gQW4gaW50ZWdlcj8gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBkYXRhIHR5cGUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpY3RhdGVzIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhpcyBwaWVjZSBvZiB0aGUgYGNvbmZpZ2AgZGF0YS4gVGhhdCYjMzk7bGwgbGV0IG1lIHVuZGVyc3RhbmQgd2hhdCBpdCBtZWFucyBpbiBjb250ZXh0IG9mIHRoZSBvdmVybGF5IGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdmxfdmVyaXR5X21vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzMy1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzQ6c3RhdGljIGNvbnN0IGNoYXIgKm92bF92ZXJpdHlfbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzOC1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTQwLXtcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODc2PWludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc0LVx0XHRcdHByX2luZm8oXCYjMzQ7ZGlzYWJsaW5nIG5mc19leHBvcnQgZHVlIHRvIHZlcml0eT0lc1xcblwmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5NzU6XHRcdFx0XHRvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc2LVx0XHRcdGNvbmZpZy1cdTAwM2VuZnNfZXhwb3J0ID0gZmFsc2U7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDEtXHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cix2ZXJpdHk9JXNcXG5cJiMzNDssXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMjpcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEwNTQ9aW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDQtXHRcdHNlcV9wdXRzKG0sIFwmIzM0Oyx1c2VyeGF0dHJcJiMzNDspO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDU6XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSAhPSBvdmxfdmVyaXR5X21vZGVfZGVmKCkpXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssdmVyaXR5PSVzXCYjMzQ7LFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDc6XHRcdFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBvdmxfdmVyaXR5X21vZGVgIGFuZCBgb3ZsX3BhcmFtZXRlcl92ZXJpdHlgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3ZlcmxheSBmaWxlc3lzdGVtIHZlcml0eSBzZXR0aW5ncyB3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgY29kZSB0aGF0IGRlZmluZXMgYG92bF92ZXJpdHlfbW9kZWAgYW5kIGBvdmxfcGFyYW1ldGVyX3Zlcml0eWAuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMjcg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9ucyB0aGVtc2VsdmVzIHdpbGwgb2ZmZXIgYSBjbGVhciBqdW1waW5nLW9mZiBwb2ludCBmb3IgdHJhY2luZyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGxhcmdlciBvdmVybGF5ZnMgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHRoZXNlIHBhcnRpY3VsYXIgc2V0dGluZ3MgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBmaWxlIGludGVncml0eSBtZWNoYW5pc21zIG9mIG92ZXJsYXlmcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvcGFyYW1zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdH1cbiAxMjY6XHRcbiAxMjc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XG4gMTI4Olx0XHR7IFwmIzM0O29mZlwmIzM0OyxcdE9WTF9WRVJJVFlfT0ZGICAgICB9LFxuIDEyOTpcdFx0eyBcJiMzNDtvblwmIzM0OyxcdFx0T1ZMX1ZFUklUWV9PTiAgICAgIH0sXG4gMTMwOlx0XHR7IFwmIzM0O3JlcXVpcmVcJiMzNDssXHRPVkxfVkVSSVRZX1JFUVVJUkUgfSxcbiAxMzE6XHRcdHt9XG4gMTMyOlx0fTtcbiAxMzM6XHRcbiAxMzQ6XHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXG4gMTM1Olx0e1xuIDEzNjpcdFx0cmV0dXJuIG92bF9wYXJhbWV0ZXJfdmVyaXR5W2NvbmZpZy1cdTAwM2V2ZXJpdHlfbW9kZV0ubmFtZTtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXG4gMTQwOlx0e1xuIDE0MTpcdFx0cmV0dXJuIE9WTF9WRVJJVFlfT0ZGO1xuIDE0MjpcdH1cbiAxNDM6XHRcbiAxNDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfZnN5bmNbXSA9IHtcbiAxNDU6XHRcdHsgXCYjMzQ7dm9sYXRpbGVcJiMzNDssXHRPVkxfRlNZTkNfVk9MQVRJTEUgfSxcbiAxNDY6XHRcdHsgXCYjMzQ7YXV0b1wmIzM0OyxcdE9WTF9GU1lOQ19BVVRPICAgICB9LFxuIDE0NzpcdFx0eyBcJiMzNDtzdHJpY3RcJiMzNDssXHRPVkxfRlNZTkNfU1RSSUNUICAgfSxcbiAxNDg6XHRcdHt9XG4gMTQ5Olx0fTtcbiAxNTA6XHRcbiAxNTE6XHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX2ZzeW5jX21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbiAxNTI6XHR7XG4gMTUzOlx0XHRyZXR1cm4gb3ZsX3BhcmFtZXRlcl9mc3luY1tjb25maWctXHUwMDNlZnN5bmNfbW9kZV0ubmFtZTtcbiAxNTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjUKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk92ZXJsYXlGUyBQYXRjaCBBbmFseXNpczogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBqdXN0IGFkZGluZyBhIHNhbml0eSBjaGVjayB0byB0aGUgT3ZlcmxheUZTIG1vdW50IG9wdGlvbiBwYXJzZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgc2ltdWx0YW5lb3VzIHVzZSBvZiBgdXNlcnhhdHRyYCBhbmQgYW55IGZvcm0gb2YgYHZlcml0eWAuIFRoZSBjb2RlIGlzIHNpbXBsZSBlbm91Z2g6IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgaXQgdGhyb3dzIGFuIGVycm9yIGFuZCByZWplY3RzIHRoZSBtb3VudC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgdXMgaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBBZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIG5vLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcCwgbm8gbW9kaWZpY2F0aW9ucyB0byBhbnkgcGF0aHMgdGhhdCBjb3VsZCBsZWFrIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IHJlYWRpbmcgb3IgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBjb25maWdgIHN0cnVjdHVyZSwgd2hpY2ggaG9sZHMgdGhlIG1vdW50IG9wdGlvbnMsIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIE92ZXJsYXlGUyBgZnNfY29udGV4dGAgc2V0dXAgYW5kIGlzIGluaXRpYWxpemVkIHRvIGRlZmF1bHQgdmFsdWVzLiBJdCYjMzk7cyBzaW1wbHkgdmFsaWRhdGluZyBwYXJhbWV0ZXJzIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgb3IgbW91bnQgb3B0aW9uIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcy4KClRoZXJlZm9yZSwgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggaXMgZXh0cmVtZWx5IHRhcmdldGVkIGFuZCBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgaW5wdXQsIHNvIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGZhbGwgaW50byBhIGRpZmZlcmVudCBjYXRlZ29yeS4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTmVlZHNLTVNBTj8gRmFsc2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgcGF0Y2gganVzdCB2YWxpZGF0ZXMgdGhlIG1vdW50IG9wdGlvbnMgd2l0aGluIHRoZSBPdmVybGF5RlMgY29kZS4gSXQgcmVqZWN0cyBzcGVjaWZpYyBwYXJhbWV0ZXIgY29tYmluYXRpb25zLCB3aXRob3V0IGFsbG9jYXRpb24gb3IgdXNlci1zcGFjZSBleHBvc3VyZS4KCkFscmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICYjMzk7dXNlcnhhdHRyJiMzOTsgYW5kICYjMzk7dmVyaXR5JiMzOTsgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1vdW50IG9wdGlvbiB2ZXJpZmljYXRpb24gY2hlY2sgaW4gT3ZlcmxheUZTIChmcy9vdmVybGF5ZnMvcGFyYW1zLmMpIHRvIHJlamVjdCBjb25mbGljdGluZyBvcHRpb25zIHdoZW4gYm90aCAmIzM5O3VzZXJ4YXR0ciYjMzk7IGFuZCAmIzM5O3Zlcml0eSYjMzk7IGFyZSBlbmFibGVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6MzAuODU0NTI0OTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMTczMjg1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICd1c2VyeGF0dHInIGFuZCAndmVyaXR5JyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozMC44NTQ1Mjk0OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc2NzcyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXFxuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXFxuIFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXFxuIFxcdFxcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozMi41MDMyNDQzNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTg3NTQwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdmxfZnNfcGFyYW1zX3ZlcmlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG92ZXJsYXlmcyBtb3VudCBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGluIG92bF9mc19wYXJhbXNfdmVyaWZ5KCkgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIGNvbWJpbmF0aW9ucyBvZiB1c2VyeGF0dHIgYW5kIHZlcml0eSBtb3VudCBvcHRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3aXRoaW4gdGhlIG92ZXJsYXkgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwODo0NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuKysrIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXG4gXHRcdFx0cHJfZXJyKFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbitcdFx0XHRwcl9lcnIoXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCIsXG4rXHRcdFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXG4gXHRcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6MzIuNTAzMjQ2OTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUxMjc4Njk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE92ZXJsYXlmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBtYW5hZ2luZyBvdmVybGF5IGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGRlZXBlci4gSSdsbCBlaXRoZXIgcmVhY2ggZm9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yLCBtb3JlIGxpa2VseSwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgOTk3LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgYWxsIGFib3V0IHF1aWNrbHkgZXN0YWJsaXNoaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozOC4wMTYwMzcwMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3ZlcmxheWZzL3BhcmFtcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRcXHRcXHRcXHQgKiBpbiB0aGlzIGNvbmZsaWN0LlxcbiA5ODE6XFx0XFx0XFx0XFx0ICovXFxuIDk4MjpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJkaXNhYmxpbmcgbWV0YWNvcHkgZHVlIHRvIG5mc19leHBvcnQ9b25cXFxcblxcXCIpO1xcbiA5ODM6XFx0XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtZXRhY29weSA9IGZhbHNlO1xcbiA5ODQ6XFx0XFx0XFx0fVxcbiA5ODU6XFx0XFx0fVxcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXG4gOTg4OlxcdFxcdC8qIFJlc29sdmUgdXNlcnhhdHRyIC1cXHUwMDNlICFyZWRpcmVjdCBcXHUwMDI2XFx1MDAyNiAhbWV0YWNvcHkgZGVwZW5kZW5jeSAqL1xcbiA5ODk6XFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldXNlcnhhdHRyKSB7XFxuIDk5MDpcXHRcXHRcXHRpZiAoc2V0LnJlZGlyZWN0IFxcdTAwMjZcXHUwMDI2XFxuIDk5MTpcXHRcXHRcXHQgICAgY29uZmlnLVxcdTAwM2VyZWRpcmVjdF9tb2RlICE9IE9WTF9SRURJUkVDVF9OT0ZPTExPVykge1xcbiA5OTI6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIscmVkaXJlY3RfZGlyPSVzXFxcXG5cXFwiLFxcbiA5OTM6XFx0XFx0XFx0XFx0ICAgICAgIG92bF9yZWRpcmVjdF9tb2RlKGNvbmZpZykpO1xcbiA5OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2VtZXRhY29weSBcXHUwMDI2XFx1MDAyNiBzZXQubWV0YWNvcHkpIHtcXG4gOTk3OlxcdFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxcXG5cXFwiKTtcXG4gOTk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5OTk6XFx0XFx0XFx0fVxcbjEwMDA6XFx0XFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUpIHtcXG4xMDAxOlxcdFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcXFxuXFxcIixcXG4xMDAyOlxcdFxcdFxcdFxcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XFxuMTAwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA0OlxcdFxcdFxcdH1cXG4xMDA1OlxcdFxcdFxcdC8qXFxuMTAwNjpcXHRcXHRcXHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXFxuMTAwNzpcXHRcXHRcXHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcXG4xMDA4OlxcdFxcdFxcdCAqIG9wdGlvbnMgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaWYgdXNlZCB0b2dldGhlciB3aXRoXFxuMTAwOTpcXHRcXHRcXHQgKiB1c2VyeGF0dHIuXFxuMTAxMDpcXHRcXHRcXHQgKi9cXG4xMDExOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlcmVkaXJlY3RfbW9kZSA9IE9WTF9SRURJUkVDVF9OT0ZPTExPVztcXG4xMDEyOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcXG4xMDEzOlxcdFxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0LypcXG4xMDE2OlxcdFxcdCAqIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSB0cnVzdGVkIHhhdHRyIGNhcGFiaWxpdHkgYW5kIGEgZmVhdHVyZSB3YXNcXG4xMDE3OlxcdFxcdCAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRoYXQgcmVxdWlyZXMgdGhlbS5cXG4xMDE4OlxcdFxcdCAqL1xcbjEwMTk6XFx0XFx0aWYgKCFjb25maWctXFx1MDAzZXVzZXJ4YXR0ciBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozOC4wMTYyNDkwNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTYxNDE0ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBvdmVybGF5ZnMgUGFyYW1ldGVycyBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBpbmZsdWVuY2UgaG93IGBvdmVybGF5ZnNgIGJlaGF2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgcmVsYXRlIHRvIG92ZXJsYXlmcyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGdvIGRpZyBhcm91bmQgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJvb2xlYW4gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHNwZWNpZmljIGZlYXR1cmVzIHdpdGhpbiBvdmVybGF5ZnMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gcGF0aHMgdGhhdCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0YWtlcy4gVGhhdCBraW5kIG9mIGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSB3aGF0IHNjZW5hcmlvcyBhcmUgcG9zc2libGUgd2l0aGluIHRoaXMgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo0Mi41Nzc2NjY2MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4MTQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9WRVJMQVlfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3ZlcmxheWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvb3ZlcmxheWZzL0tjb25maWc6Mjpjb25maWcgT1ZFUkxBWV9GU1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk92ZXJsYXkgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTQtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTU6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIHJlZGlyZWN0IGRpcmVjdG9yeSBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMzItXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6NDY6Y29uZmlnIE9WRVJMQVlfRlNfSU5ERVhcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gaW5vZGVzIGluZGV4IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY0LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjY1OmNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gTkZTIGV4cG9ydCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05Mi1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05NC1cXHRib29sIFxcXCJPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjExMTpjb25maWcgT1ZFUkxBWV9GU19NRVRBQ09QWVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gbWV0YWRhdGEgb25seSBjb3B5IHVwIGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEyOC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMjk6Y29uZmlnIE9WRVJMQVlfRlNfREVCVUdcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIGV4dHJhIGRlYnVnZ2luZyBjaGVja3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQyLjY0MzQ4NTk1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzA2NzU2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkV4YW1pbmluZyBPdmVybGF5RlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBvdmVybGF5ZnMgYWdhaW4sIGFuZCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJsYXlmcyBjb2RlYmFzZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgbGlrZSB2ZXJpdHkgc3VwcG9ydC4gSSdtIGZhaXJseSBjZXJ0YWluIEkndmUgcmV2aWV3ZWQgdGhpcyBmaWxlIGJlZm9yZSwgYnV0IGl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBlbnN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcnVjaWFsIG9yIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBkb3QgYWxsIHRoZSBpJ3MgYW5kIGNyb3NzIHRoZSB0J3MuIEl0J3MgYSBrZXkgZmlsZSBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDQuNjE0MTc0MzYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL292ZXJsYXlmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE9WRVJMQVlfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBGU19TVEFDS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEVYUE9SVEZTXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIEFuIG92ZXJsYXkgZmlsZXN5c3RlbSBjb21iaW5lcyB0d28gZmlsZXN5c3RlbXMgLSBhbiAndXBwZXInIGZpbGVzeXN0ZW1cXG4gICA4OlxcdFxcdCAgYW5kIGEgJ2xvd2VyJyBmaWxlc3lzdGVtLiAgV2hlbiBhIG5hbWUgZXhpc3RzIGluIGJvdGggZmlsZXN5c3RlbXMsIHRoZVxcbiAgIDk6XFx0XFx0ICBvYmplY3QgaW4gdGhlICd1cHBlcicgZmlsZXN5c3RlbSBpcyB2aXNpYmxlIHdoaWxlIHRoZSBvYmplY3QgaW4gdGhlXFxuICAxMDpcXHRcXHQgICdsb3dlcicgZmlsZXN5c3RlbSBpcyBlaXRoZXIgaGlkZGVuIG9yLCBpbiB0aGUgY2FzZSBvZiBkaXJlY3RvcmllcyxcXG4gIDExOlxcdFxcdCAgbWVyZ2VkIHdpdGggdGhlICd1cHBlcicgb2JqZWN0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy5yc3RcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXFxuICAxNjpcXHRcXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcXG4gIDIwOlxcdFxcdCAgcmVkaXJlY3RzIHdoZW4gcmVuYW1pbmcgZGlyZWN0b3JpZXMgYnkgZGVmYXVsdC4gIEluIHRoaXMgY2FzZSBpdCBpc1xcbiAgMjE6XFx0XFx0ICBzdGlsbCBwb3NzaWJsZSB0byB0dXJuIG9mZiByZWRpcmVjdHMgZ2xvYmFsbHkgd2l0aCB0aGVcXG4gIDIyOlxcdFxcdCAgXFxcInJlZGlyZWN0X2Rpcj1vZmZcXFwiIG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtIGluc3RhbmNlIGJhc2lzXFxuICAyMzpcXHRcXHQgIHdpdGggdGhlIFxcXCJyZWRpcmVjdF9kaXI9b2ZmXFxcIiBtb3VudCBvcHRpb24uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgTm90ZSwgdGhhdCByZWRpcmVjdHMgYXJlIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLiAgVGhhdCBpcywgbW91bnRpbmdcXG4gIDI2OlxcdFxcdCAgYW4gb3ZlcmxheSB3aGljaCBoYXMgcmVkaXJlY3RzIG9uIGEga2VybmVsIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXNcXG4gIDI3OlxcdFxcdCAgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcXG4gIDMyOlxcdFxcdGJvb2wgXFxcIk92ZXJsYXlmczogZm9sbG93IHJlZGlyZWN0cyBldmVuIGlmIHJlZGlyZWN0cyBhcmUgdHVybmVkIG9mZlxcXCJcXG4gIDMzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIERpc2FibGUgdGhpcyB0byBnZXQgYSBwb3NzaWJseSBtb3JlIHNlY3VyZSBjb25maWd1cmF0aW9uLCBidXQgdGhhdFxcbiAgMzc6XFx0XFx0ICBtaWdodCBub3QgYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIGtlcm5lbHMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUsIHRoZW4gaXQgaXMgc2FmZSBhbmRcXG4gIDQwOlxcdFxcdCAgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXFxuICA0NzpcXHRcXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gaW5vZGVzIGluZGV4IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcXG4gIDUxOlxcdFxcdCAgdGhlIGluZGV4IGRpcmVjdG9yeSB0byBtYXAgbG93ZXIgaW5vZGVzIHRvIHVwcGVyIGlub2RlcyBieSBkZWZhdWx0LlxcbiAgNTI6XFx0XFx0ICBJbiB0aGlzIGNhc2UgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gdHVybiBvZmYgaW5kZXggZ2xvYmFsbHkgd2l0aCB0aGVcXG4gIDUzOlxcdFxcdCAgXFxcImluZGV4PW9mZlxcXCIgbW9kdWxlIG9wdGlvbiBvciBvbiBhIGZpbGVzeXN0ZW0gaW5zdGFuY2UgYmFzaXMgd2l0aCB0aGVcXG4gIDU0OlxcdFxcdCAgXFxcImluZGV4PW9mZlxcXCIgbW91bnQgb3B0aW9uLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHQgIFRoZSBpbm9kZXMgaW5kZXggZmVhdHVyZSBwcmV2ZW50cyBicmVha2luZyBvZiBsb3dlciBoYXJkbGlua3Mgb24gY29weVxcbiAgNTc6XFx0XFx0ICB1cC5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBOb3RlLCB0aGF0IHRoZSBpbm9kZXMgaW5kZXggZmVhdHVyZSBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZS5cXG4gIDYwOlxcdFxcdCAgVGhhdCBpcywgbW91bnRpbmcgYW4gb3ZlcmxheSB3aGljaCBoYXMgYW4gaW5vZGVzIGluZGV4IG9uIGEga2VybmVsXFxuICA2MTpcXHRcXHQgIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcXG4gIDY2OlxcdFxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBORlMgZXhwb3J0IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgNjg6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTX0lOREVYXFxuICA2OTpcXHRcXHRkZXBlbmRzIG9uICFPVkVSTEFZX0ZTX01FVEFDT1BZXFxuICA3MDpcXHRcXHRoZWxwXFxuICA3MTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxcbiAgNzI6XFx0XFx0ICB0aGUgaW5kZXggZGlyZWN0b3J5IHRvIGRlY29kZSBvdmVybGF5IE5GUyBmaWxlIGhhbmRsZXMgYnkgZGVmYXVsdC5cXG4gIDczOlxcdFxcdCAgSW4gdGhpcyBjYXNlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byB0dXJuIG9mZiBORlMgZXhwb3J0IHN1cHBvcnRcXG4gIDc0OlxcdFxcdCAgZ2xvYmFsbHkgd2l0aCB0aGUgXFxcIm5mc19leHBvcnQ9b2ZmXFxcIiBtb2R1bGUgb3B0aW9uIG9yIG9uIGEgZmlsZXN5c3RlbVxcbiAgNzU6XFx0XFx0ICBpbnN0YW5jZSBiYXNpcyB3aXRoIHRoZSBcXFwibmZzX2V4cG9ydD1vZmZcXFwiIG1vdW50IG9wdGlvbi5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGUgTkZTIGV4cG9ydCBmZWF0dXJlIGNyZWF0ZXMgYW4gaW5kZXggb24gY29weSB1cCBvZiBldmVyeSBmaWxlIGFuZFxcbiAgNzg6XFx0XFx0ICBkaXJlY3RvcnkuICBUaGlzIGZ1bGwgaW5kZXggaXMgdXNlZCB0byBkZXRlY3Qgb3ZlcmxheSBmaWxlc3lzdGVtc1xcbiAgNzk6XFx0XFx0ICBpbmNvbnNpc3RlbmNpZXMgb24gbG9va3VwLCBsaWtlIHJlZGlyZWN0IGZyb20gbXVsdGlwbGUgdXBwZXIgZGlycyB0b1xcbiAgODA6XFx0XFx0ICB0aGUgc2FtZSBsb3dlciBkaXIuICBUaGUgZnVsbCBpbmRleCBtYXkgaW5jdXIgc29tZSBvdmVyaGVhZCBvbiBtb3VudFxcbiAgODE6XFx0XFx0ICB0aW1lLCBlc3BlY2lhbGx5IHdoZW4gdmVyaWZ5aW5nIHRoYXQgZGlyZWN0b3J5IGZpbGUgaGFuZGxlcyBhcmUgbm90XFxuICA4MjpcXHRcXHQgIHN0YWxlLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIE5vdGUsIHRoYXQgdGhlIE5GUyBleHBvcnQgZmVhdHVyZSBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZS5cXG4gIDg1OlxcdFxcdCAgVGhhdCBpcywgbW91bnRpbmcgYW4gb3ZlcmxheSB3aGljaCBoYXMgYSBmdWxsIGluZGV4IG9uIGEga2VybmVsXFxuICA4NjpcXHRcXHQgIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIE1vc3QgdXNlcnMgc2hvdWxkIHNheSBOIGhlcmUgYW5kIGVuYWJsZSB0aGlzIGZlYXR1cmUgb24gYSBjYXNlLWJ5LVxcbiAgODk6XFx0XFx0ICBjYXNlIGJhc2lzIHdpdGggdGhlIFxcXCJuZnNfZXhwb3J0PW9uXFxcIiBtb3VudCBvcHRpb24uXFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdCAgU2F5IE4gdW5sZXNzIHlvdSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdGNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xcbiAgOTQ6XFx0XFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBhdXRvIGVuYWJsZSBpbm9kZSBudW1iZXIgbWFwcGluZ1xcXCJcXG4gIDk1OlxcdFxcdGRlZmF1bHQgblxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuICA5ODpcXHRcXHRoZWxwXFxuICA5OTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxcbiAxMDA6XFx0XFx0ICB1bnVzZWQgaGlnaCBiaXRzIGluIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpbm9kZSBudW1iZXJzIHRvIG1hcCBhbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDQuNjE0MzU2NTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzAxNjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAuIFRpbWUgdG8gZGlnIGludG8gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIEkgd2FudCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGtpbmRzIG9mIGNoZWNrcyBpdCdzIHBlcmZvcm1pbmcsIGFuZCB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGxpZS4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IE92ZXJsYXlGUydzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSB0byBmb2N1cyBhbnkgZnVydGhlciBhbmFseXNpcy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo0Ni40NDczNzQ5MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjk3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL292ZXJsYXlmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODQwPXZvaWQgb3ZsX2ZyZWVfZnMoc3RydWN0IG92bF9mcyAqb2ZzKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3NS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6ODc2OmludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtODc3LVxcdFxcdFxcdCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5oPTQwPXZvaWQgb3ZsX2ZyZWVfZnMoc3RydWN0IG92bF9mcyAqb2ZzKTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmg6NDE6aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuaC00Mi1cXHRcXHRcXHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0xMzcxPXN0YXRpYyBpbnQgb3ZsX2ZpbGxfc3VwZXJfY3JlZHMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMTM3OS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzoxMzgwOlxcdGVyciA9IG92bF9mc19wYXJhbXNfdmVyaWZ5KGN0eCwgXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKTtcXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzgxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQ2LjUzMTA3NzYxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQyNjQ1Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBPdmVybGF5RlMgYW5kIGB2ZXJpdHlfbW9kZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB2ZXJpdHlfbW9kZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHBhcmFtZXRlcidzIGJlaGF2aW9yIGlzIGtleSB0byBbaW5zZXJ0IHlvdXIgZmllbGQncyByZWxhdGVkIHRhc2svcHJvYmxlbSBoZXJlIC0gZS5nLiwgb3B0aW1pemluZyBjb250YWluZXIgc2VjdXJpdHksIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGF1ZGl0aW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZXRjLl0uIEkgbmVlZCB0byBncmFzcCBwcmVjaXNlbHkgaG93IGB2ZXJpdHlfbW9kZWAgaW5mbHVlbmNlcyB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtJ3MgaW50ZWdyaXR5IGFuZCBob3cgaXQncyBoYW5kbGVkIGR1cmluZyBtb3VudCBvcGVyYXRpb25zIGFuZCBmaWxlIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhlIHBhcmFtZXRlciBpcyBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBtZXRhZGF0YS9kYXRhIHN0cnVjdHVyZSBoYW5kbGluZy4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgb3ZlcmxheWZzIGZlYXR1cmVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB0byB1bmNvdmVyIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDkuMzczNzI1NTkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4OTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpdHlfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vdmVybGF5ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3ZlcmxheWZzL2NvcHlfdXAuYz0xMDI4PXN0YXRpYyBib29sIG92bF9uZWVkX21ldGFfY29weV91cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0Mi1cXHQvKiBGYWxsIGJhY2sgdG8gZnVsbCBjb3B5IGlmIG5vIGZzdmVyaXR5IG9uIHNvdXJjZSBkYXRhIGFuZCB3ZSByZXF1aXJlIHZlcml0eSAqL1xcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmM6MTA0MzpcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL2NvcHlfdXAuYy0xMDQ0LVxcdFxcdHN0cnVjdCBwYXRoIGxvd2VyZGF0YTtcXG4tLVxcbmZzL292ZXJsYXlmcy9uYW1laS5jPTk1ND1zdGF0aWMgaW50IG92bF9tYXliZV92YWxpZGF0ZV92ZXJpdHkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYwLVxcbmZzL292ZXJsYXlmcy9uYW1laS5jOjk2MTpcXHRpZiAoIW9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8XFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYyLVxcdCAgICAhb3ZsX2lzX21ldGFjb3B5X2RlbnRyeShkZW50cnkpIHx8XFxuLS1cXG5mcy9vdmVybGF5ZnMvbmFtZWkuYy05NjYtXFx0aWYgKCFvdmxfdGVzdF9mbGFnKE9WTF9IQVNfRElHRVNULCBpbm9kZSkpIHtcXG5mcy9vdmVybGF5ZnMvbmFtZWkuYzo5Njc6XFx0XFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlID09IE9WTF9WRVJJVFlfUkVRVUlSRSkge1xcbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2OC1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJtZXRhY29weSBmaWxlICclcGQnIGhhcyBubyBkaWdlc3Qgc3BlY2lmaWVkXFxcXG5cXFwiLFxcbi0tXFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oPTg9c3RydWN0IG92bF9jb25maWcge1xcbi0tXFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTEzLVxcdGludCByZWRpcmVjdF9tb2RlO1xcbmZzL292ZXJsYXlmcy9vdmxfZW50cnkuaDoxNDpcXHRpbnQgdmVyaXR5X21vZGU7XFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTE1LVxcdGJvb2wgaW5kZXg7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgb3ZsX3BhcmFtZXRlcl92ZXJpdHlbXSA9IHtcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNDpzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNjpcXHRyZXR1cm4gb3ZsX3BhcmFtZXRlcl92ZXJpdHlbY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZV0ubmFtZTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM3LX1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM4LVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9NjEyPXN0YXRpYyBpbnQgb3ZsX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtNjg0LVxcdGNhc2UgT3B0X3Zlcml0eTpcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6Njg1OlxcdFxcdGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUgPSByZXN1bHQudWludF8zMjtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtNjg2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTg3Nj1pbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTY4LVxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5Njk6XFx0XFx0fSBlbHNlIGlmIChjb25maWctXFx1MDAzZXZlcml0eV9tb2RlKSB7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3MC1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJkaXNhYmxpbmcgbmZzX2V4cG9ydCBkdWUgdG8gdmVyaXR5PSVzXFxcXG5cXFwiLFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5NzU6XFx0XFx0XFx0XFx0b3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NzYtXFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VuZnNfZXhwb3J0ID0gZmFsc2U7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTk5LVxcdFxcdH1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMDpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZSkge1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDAxLVxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcXFxuXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMjpcXHRcXHRcXHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDAzLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMjgtXFx0XFx0fVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDI5OlxcdFxcdGlmIChjb25maWctXFx1MDAzZXZlcml0eV9tb2RlKSB7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMzAtXFx0XFx0XFx0cHJfZXJyKFxcXCJ2ZXJpdHkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgdHJ1c3RlZCB4YXR0cnNcXFxcblxcXCIpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEwNTQ9aW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNC1cXHRcXHRzZXFfcHV0cyhtLCBcXFwiLHVzZXJ4YXR0clxcXCIpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA1OlxcdGlmIChvZnMtXFx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSAhPSBvdmxfdmVyaXR5X21vZGVfZGVmKCkpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDYtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHZlcml0eT0lc1xcXCIsXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDc6XFx0XFx0XFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA4LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYz0xMzcxPWludCBvdmxfdmFsaWRhdGVfdmVyaXR5KHN0cnVjdCBvdmxfZnMgKm9mcyxcXG4tLVxcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM4MC1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jOjEzODE6XFx0aWYgKCFvZnMtXFx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSB8fFxcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM4Mi1cXHQgICAgLyogVmVyaXR5IG9ubHkgd29ya3Mgb24gcmVndWxhciBmaWxlcyAqL1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzkwLVxcdGlmICgheGF0dHJfc2l6ZSB8fCAhbWV0YWNvcHlfZGF0YS5kaWdlc3RfYWxnbykge1xcbmZzL292ZXJsYXlmcy91dGlsLmM6MTM5MTpcXHRcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzkyLVxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIm1ldGFjb3B5IGZpbGUgJyVwZCcgaGFzIG5vIGRpZ2VzdCBzcGVjaWZpZWRcXFxcblxcXCIsXFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTE0MjY9aW50IG92bF9nZXRfdmVyaXR5X2RpZ2VzdChzdHJ1Y3Qgb3ZsX2ZzICpvZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpzcmMsXFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jLTE0MzAtXFxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxNDMxOlxcdGlmICghb2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgfHwgIVNfSVNSRUcoZF9pbm9kZShzcmMtXFx1MDAzZWRlbnRyeSktXFx1MDAzZWlfbW9kZSkpXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDMyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ0LVxcdCAgICBXQVJOX09OX09OQ0UoZGlnZXN0X3NpemUgXFx1MDAzZSBGU19WRVJJVFlfTUFYX0RJR0VTVF9TSVpFKSkge1xcbmZzL292ZXJsYXlmcy91dGlsLmM6MTQ0NTpcXHRcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ2LVxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcImxvd2VyIGZpbGUgJyVwZCcgaGFzIG5vIGZzLXZlcml0eSBkaWdlc3RcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQ5LjQ0MjcyMTkxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjYzNTQ4MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoIGluIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYSBjb25mbGljdDogdGhlIGNvZGUgaXMgcmVqZWN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgdHJ5IHRvIHVzZSBib3RoIGB1c2VyeGF0dHJgIGFuZCBhIG5vbi1gb2ZmYCBgdmVyaXR5X21vZGVgLiBJdCdzIHJldHVybmluZyBgLUVJTlZBTGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdmVyaXR5IG5lZWRzIHRydXN0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoYHRydXN0ZWQub3ZlcmxheS4qYCksIGFuZCBgdXNlci4qYCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgdXNlcnhhdHRyYCkgZG9uJ3QgY3V0IGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlbGV2YW50IGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBGb3J0dW5hdGVseSwgb3ZlcmxheWZzIGlzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZpbGVzeXN0ZW0gc3VwcG9ydCwgc28gYSBzaW1wbGUgYG1vdW50IC10IG92ZXJsYXkgLi4uYCBzaG91bGQgdHJpZ2dlciBpdCwgd2hpY2ggc3VnZ2VzdHMgeWVzLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93OiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgU2VjdGlvbiAzLCB0aGUgYW5zd2VyIGlzIG1vc3QgbGlrZWx5IHllcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGFuZCBtb2RpZnlpbmcgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBsb2dpYyBpbiBvdmVybGF5ZnMsIHdoaWNoIGlzIGEgKmNvcmUqIGZpbGVzeXN0ZW0gYW5kIFZGUyBkcml2ZXIuIFdlIGFyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBzeXN0ZW0uXG5cbkxldCdzIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCB0aGUgcmVxdWlyZW1lbnRzLiBZZXMsIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgaXMgaW5kZWVkIHJlYWNoYWJsZSB3aGVuIG1vdW50aW5nIG92ZXJsYXlmcyB3aXRoIGJvdGggYHVzZXJ4YXR0cmAgYW5kIGB2ZXJpdHlgIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IHRoZSBgT1ZFUkxBWV9GU2AgY29uZmlnIGlzIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGRpcmVjdGx5LiBXZSBjYW4gZm9jdXMgc3ltYm9scyBvbiBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG92bF9maWxsX3N1cGVyX2NyZWRzYCBvciBgb3ZsX3BhcnNlX3BhcmFtYCwgYnV0IGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LlxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdmVybGF5ZnMgTWFrZWZpbGUganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBuZWVkZWQgdGhhdCBjb3VsZCBpbXBhY3QgcmVhY2hhYmlsaXR5LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZnV6emluZyBjYW1wYWlnbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODgzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo1My4xMDYyNzQ3NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzY0MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3ZlcmxheWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9NYWtlZmlsZS01LVxcbmZzL292ZXJsYXlmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PVkVSTEFZX0ZTKSArPSBvdmVybGF5Lm9cXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTMuMTY1MDQ0NDM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzIyODQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgT3ZlcmxheUZTIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZSBgZnMvb3ZlcmxheWZzL01ha2VmaWxlYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGZpbGVzeXN0ZW1zLCBJIG5lZWQgdG8gZ2V0IGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGlzIGJ1aWx0LCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZnJhbmtseSwgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgYSBwcm9ibGVtLiBUaGlzIGlzIHRoZSBjZW50cmFsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGEgcHJldHR5IGNyaXRpY2FsIHBpZWNlIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBzbyBubyBhc3N1bXB0aW9ucywganVzdCBhIGxpbmUtYnktbGluZSBjaGVjayB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgYmUgc3VyZSBpdCBzdGlsbCBtYWtlcyBzZW5zZS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgaW5jbHVzaW9uIG9mIG90aGVyIG1ha2VmaWxlcyBhbmQgdGhlIHJ1bGVzIHNwZWNpZmljIHRvIHRoaXMgZmlsZXN5c3RlbS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzLCBvciBkYW5nZXJvdXMgZ290Y2hhcyBsdXJraW5nIGluIHRoZSBkZXRhaWxzPyBJJ2xsIGFsc28gYmUgZm9jdXNpbmcgb24gaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTUuMzM3MzMyNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3ZlcmxheWZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgKz0gb3ZlcmxheS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTUuMzM3MzkyNDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxOTIyNjgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3ZlcmxheUZTIFBhcmFtZXRlciBWZXJpZmljYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhlIGBPVkVSTEFZX0ZTYCBjb25maWcgaXMgdGhlIGtleSBoZXJlIOKAkyBpdCdzIGFsbCB0aGF0J3MgbmVlZGVkIHRvIGJ1aWxkIGBwYXJhbXMuY2AuIExldCdzIGRpdmUgaW50byBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG92bF9mc19wYXJhbXNfdmVyaWZ5YC4gVGhhdCdzIHRoZSBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHNuZWFreSBzeW1ib2xzIG9yIGNvbmZpZ3MgaW52b2x2ZWQuIFllcCwganVzdCBgT1ZFUkxBWV9GU2AgKG5vIGBDT05GSUdfYCBwcmVmaXgsIGdvdCBpdCkuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBub3cuXG5cblRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgYmVpbmcgc2V0IGlzIGltcG9ydGFudC4gVGhlIHJlYXNvbiBiZWhpbmQgdGhpcyBpcyBzaWduaWZpY2FudDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHBhcmFtZXRlciB2ZXJpZmljYXRpb24sIHNwZWNpZmljYWxseSByZWplY3RpbmcgY29uZmxpY3Rpbmcgb3B0aW9ucyBsaWtlIGB1c2VyeGF0dHJgIGFuZCBgdmVyaXR5YCBkdXJpbmcgb3ZlcmxheWZzIG1vdW50IG9wdGlvbiBwcm9jZXNzaW5nICp3aXRoaW4qIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpYC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gb3ZlcmxheWZzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyBpcyB2YWx1YWJsZS5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIGFuYWx5c2lzLCBzbyBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDcxLCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNTI5NjYzMDAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTE1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZsX2ZzX3BhcmFtc192ZXJpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo1OC42OTA3ODk5MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTgxMDQwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNjkxNTI3MDcyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQxODAyOTc3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtb3VudCBvcHRpb24gdmVyaWZpY2F0aW9uIGNoZWNrIGluIE92ZXJsYXlGUyAoZnMvb3ZlcmxheWZzL3BhcmFtcy5jKSB0byByZWplY3QgY29uZmxpY3Rpbmcgb3B0aW9ucyB3aGVuIGJvdGggJ3VzZXJ4YXR0cicgYW5kICd2ZXJpdHknIGFyZSBlbmFibGVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwODo0NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuKysrIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXG4gXHRcdFx0cHJfZXJyKFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbitcdFx0XHRwcl9lcnIoXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCIsXG4rXHRcdFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXG4gXHRcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNjkxNTI4NTYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MzE4NzkzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPdmVybGF5RlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYC4gIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgaXMgY29uY2VybmluZyBsaW5lIDk5Nywgc28gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dC4gQWgsIHRoZXJlIGl0IGlzIOKAkyBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGEgY2hlY2sgZm9yIGNvbmZsaWN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV3IGB2ZXJpdHlfbW9kZWAgc2V0dGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGFuIGVycm9yIGNoZWNrOiBpZiBgdXNlcnhhdHRyYCBpcyBlbmFibGVkICphbmQqIGB2ZXJpdHlfbW9kZWAgaXMgc2V0ICh0byBhbnl0aGluZywgYWNjb3JkaW5nIHRvIHRoZSBjb2RlKSwgaXQnbGwgdGhyb3cgYW4gYC1FSU5WQUxgLiAgVGhlIGVycm9yIG1lc3NhZ2UgY2xlYXJseSBzdGF0ZXMgdGhlIGNvbmZsaWN0LiBJdCdzIHVzaW5nIGBvdmxfdmVyaXR5X21vZGUoKWAgdG8gZ2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZXJpdHkgbW9kZSwgd2hpY2ggaXMgbmljZS4gU2VlbXMgbGlrZSBhIGdvb2QgcHJhY3RpY2UgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaGVyZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgcHJldmVudGluZyB0aGUgY29tYmluYXRpb24gb2YgYHVzZXJ4YXR0cmAgYW5kIGFueSBgdmVyaXR5YCBzZXR0aW5nLiBJIGFzc3VtZSB0aGVyZSdzIGFuIGluaGVyZW50IGluY29tcGF0aWJpbGl0eSB0aGVyZSwgbGlrZWx5IHN0ZW1taW5nIGZyb20gaG93IG92ZXJsYXlmcyBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGhvdyB2ZXJpdHkgbW9kZSBpbnRlcmFjdHMgd2l0aCB0aGF0LiAgTG9va3MgbGlrZSBpdCBpcyBwcm9iYWJseSBhbiBpbnRlbmRlZCBkZXNpZ24gcmVzdHJpY3Rpb24sIHNpbmNlIHRoZSBjb25mbGljdCBpcyBub3QgXCJmaXhlZFwiIGJ5IGFueSBjb2RlIGNoYW5nZXMuXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNvbmZsaWN0LCBidXQgdGhpcyBwYXRjaCBzZWVtcyB3ZWxsLXBsYWNlZCBhbmQgY29ycmVjdGx5IGltcGxlbWVudGVkLCBiYXNlZCBvbiB0aGlzIHNuaXBwZXQuIEl04oCZcyBhIGdvb2QsIGNsZWFuIGNoZWNrIHRoYXQgd2lsbCBoZWxwIHByZXZlbnQgdXNlciBtaXNjb25maWd1cmF0aW9ucy4gTm93IEkgbmVlZCB0byByZXZpZXcgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIG90aGVyIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjb25mbGljdCBleGlzdHMgYW5kIHdoZXRoZXIgdGhpcyBhcHByb2FjaCB0byBoYW5kbGUgaXQgaXMgdGhlIGJlc3Qgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDQuMzIzNDEyMzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdFxcdFxcdCAqIGluIHRoaXMgY29uZmxpY3QuXFxuIDk4MTpcXHRcXHRcXHRcXHQgKi9cXG4gOTgyOlxcdFxcdFxcdFxcdHByX2luZm8oXFxcImRpc2FibGluZyBtZXRhY29weSBkdWUgdG8gbmZzX2V4cG9ydD1vblxcXFxuXFxcIik7XFxuIDk4MzpcXHRcXHRcXHRcXHRjb25maWctXFx1MDAzZW1ldGFjb3B5ID0gZmFsc2U7XFxuIDk4NDpcXHRcXHRcXHR9XFxuIDk4NTpcXHRcXHR9XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcbiA5ODg6XFx0XFx0LyogUmVzb2x2ZSB1c2VyeGF0dHIgLVxcdTAwM2UgIXJlZGlyZWN0IFxcdTAwMjZcXHUwMDI2ICFtZXRhY29weSBkZXBlbmRlbmN5ICovXFxuIDk4OTpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V1c2VyeGF0dHIpIHtcXG4gOTkwOlxcdFxcdFxcdGlmIChzZXQucmVkaXJlY3QgXFx1MDAyNlxcdTAwMjZcXG4gOTkxOlxcdFxcdFxcdCAgICBjb25maWctXFx1MDAzZXJlZGlyZWN0X21vZGUgIT0gT1ZMX1JFRElSRUNUX05PRk9MTE9XKSB7XFxuIDk5MjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImNvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixyZWRpcmVjdF9kaXI9JXNcXFxcblxcXCIsXFxuIDk5MzpcXHRcXHRcXHRcXHQgICAgICAgb3ZsX3JlZGlyZWN0X21vZGUoY29uZmlnKSk7XFxuIDk5NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTk1OlxcdFxcdFxcdH1cXG4gOTk2OlxcdFxcdFxcdGlmIChjb25maWctXFx1MDAzZW1ldGFjb3B5IFxcdTAwMjZcXHUwMDI2IHNldC5tZXRhY29weSkge1xcbiA5OTc6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXFxcblxcXCIpO1xcbiA5OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5OTpcXHRcXHRcXHR9XFxuMTAwMDpcXHRcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZSkge1xcbjEwMDE6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbjEwMDI6XFx0XFx0XFx0XFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcXG4xMDAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMDQ6XFx0XFx0XFx0fVxcbjEwMDU6XFx0XFx0XFx0LypcXG4xMDA2OlxcdFxcdFxcdCAqIFNpbGVudGx5IGRpc2FibGUgZGVmYXVsdCBzZXR0aW5nIG9mIHJlZGlyZWN0IGFuZCBtZXRhY29weS5cXG4xMDA3OlxcdFxcdFxcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxcbjEwMDg6XFx0XFx0XFx0ICogb3B0aW9ucyBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpZiB1c2VkIHRvZ2V0aGVyIHdpdGhcXG4xMDA5OlxcdFxcdFxcdCAqIHVzZXJ4YXR0ci5cXG4xMDEwOlxcdFxcdFxcdCAqL1xcbjEwMTE6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VyZWRpcmVjdF9tb2RlID0gT1ZMX1JFRElSRUNUX05PRk9MTE9XO1xcbjEwMTI6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtZXRhY29weSA9IGZhbHNlO1xcbjEwMTM6XFx0XFx0fVxcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHQvKlxcbjEwMTY6XFx0XFx0ICogRmFpbCBpZiB3ZSBkb24ndCBoYXZlIHRydXN0ZWQgeGF0dHIgY2FwYWJpbGl0eSBhbmQgYSBmZWF0dXJlIHdhc1xcbjEwMTc6XFx0XFx0ICogZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhhdCByZXF1aXJlcyB0aGVtLlxcbjEwMTg6XFx0XFx0ICovXFxuMTAxOTpcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNldXNlcnhhdHRyIFxcdTAwMjZcXHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA0LjMyMzU5NTUzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk1NjY4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqSW52ZXN0aWdhdGluZyBgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZylgKipcblxuTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24sIGBvdmxfdmVyaXR5X21vZGUoY29uZmlnKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBkb2luZywgYW5kIHRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBsb29rIGF0IGl0cyBpbnB1dCwgd2hpY2ggYXBwZWFycyB0byBiZSBgY29uZmlnYC4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBgY29uZmlnYCByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyB0byB0aGUgZnVuY3Rpb24uXG5cblRoZSBuZXh0IHRoaW5nIEknZCBsaWtlIHRvIGRvLCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBpcyBsb29rIGF0IGBjb25maWctXHUwMDNldmVyaXR5X21vZGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSB0aGlzIGZpZWxkIGlzLiBJcyBpdCBhbiBlbnVtPyBBbiBpbnRlZ2VyPyBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgdHlwZSBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGljdGF0ZXMgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGlzIHBpZWNlIG9mIHRoZSBgY29uZmlnYCBkYXRhLiBUaGF0J2xsIGxldCBtZSB1bmRlcnN0YW5kIHdoYXQgaXQgbWVhbnMgaW4gY29udGV4dCBvZiB0aGUgb3ZlcmxheSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDYuNDE5MjY2ODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NTc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZsX3Zlcml0eV9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL292ZXJsYXlmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgb3ZsX3BhcmFtZXRlcl92ZXJpdHlbXSA9IHtcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNDpzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM4LVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODc2PWludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NzQtXFx0XFx0XFx0cHJfaW5mbyhcXFwiZGlzYWJsaW5nIG5mc19leHBvcnQgZHVlIHRvIHZlcml0eT0lc1xcXFxuXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6OTc1OlxcdFxcdFxcdFxcdG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc2LVxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDEtXFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAyOlxcdFxcdFxcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTA1ND1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA0LVxcdFxcdHNlcV9wdXRzKG0sIFxcXCIsdXNlcnhhdHRyXFxcIik7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDU6XFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSlcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNi1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsdmVyaXR5PSVzXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTEwNzpcXHRcXHRcXHQgICBvdmxfdmVyaXR5X21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDgtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA2LjUzNjEyOTc1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4NTEyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBvdmxfdmVyaXR5X21vZGVgIGFuZCBgb3ZsX3BhcmFtZXRlcl92ZXJpdHlgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvdmVybGF5IGZpbGVzeXN0ZW0gdmVyaXR5IHNldHRpbmdzIHdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBjb2RlIHRoYXQgZGVmaW5lcyBgb3ZsX3Zlcml0eV9tb2RlYCBhbmQgYG92bF9wYXJhbWV0ZXJfdmVyaXR5YC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTI3IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9ucyB0aGVtc2VsdmVzIHdpbGwgb2ZmZXIgYSBjbGVhciBqdW1waW5nLW9mZiBwb2ludCBmb3IgdHJhY2luZyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGxhcmdlciBvdmVybGF5ZnMgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHRoZXNlIHBhcnRpY3VsYXIgc2V0dGluZ3MgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBmaWxlIGludGVncml0eSBtZWNoYW5pc21zIG9mIG92ZXJsYXlmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA4LjI0NDY0NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL292ZXJsYXlmcy9wYXJhbXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0fVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XFxuIDEyODpcXHRcXHR7IFxcXCJvZmZcXFwiLFxcdE9WTF9WRVJJVFlfT0ZGICAgICB9LFxcbiAxMjk6XFx0XFx0eyBcXFwib25cXFwiLFxcdFxcdE9WTF9WRVJJVFlfT04gICAgICB9LFxcbiAxMzA6XFx0XFx0eyBcXFwicmVxdWlyZVxcXCIsXFx0T1ZMX1ZFUklUWV9SRVFVSVJFIH0sXFxuIDEzMTpcXHRcXHR7fVxcbiAxMzI6XFx0fTtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIGNvbnN0IGNoYXIgKm92bF92ZXJpdHlfbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0cmV0dXJuIG92bF9wYXJhbWV0ZXJfdmVyaXR5W2NvbmZpZy1cXHUwMDNldmVyaXR5X21vZGVdLm5hbWU7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyBpbnQgb3ZsX3Zlcml0eV9tb2RlX2RlZih2b2lkKVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0cmV0dXJuIE9WTF9WRVJJVFlfT0ZGO1xcbiAxNDI6XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfZnN5bmNbXSA9IHtcXG4gMTQ1OlxcdFxcdHsgXFxcInZvbGF0aWxlXFxcIixcXHRPVkxfRlNZTkNfVk9MQVRJTEUgfSxcXG4gMTQ2OlxcdFxcdHsgXFxcImF1dG9cXFwiLFxcdE9WTF9GU1lOQ19BVVRPICAgICB9LFxcbiAxNDc6XFx0XFx0eyBcXFwic3RyaWN0XFxcIixcXHRPVkxfRlNZTkNfU1RSSUNUICAgfSxcXG4gMTQ4OlxcdFxcdHt9XFxuIDE0OTpcXHR9O1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX2ZzeW5jX21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcXG4gMTUyOlxcdHtcXG4gMTUzOlxcdFxcdHJldHVybiBvdmxfcGFyYW1ldGVyX2ZzeW5jW2NvbmZpZy1cXHUwMDNlZnN5bmNfbW9kZV0ubmFtZTtcXG4gMTU0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDguMjQ0Nzc0ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyNzAxMjA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPdmVybGF5RlMgUGF0Y2ggQW5hbHlzaXM6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MganVzdCBhZGRpbmcgYSBzYW5pdHkgY2hlY2sgdG8gdGhlIE92ZXJsYXlGUyBtb3VudCBvcHRpb24gcGFyc2VyLiBTcGVjaWZpY2FsbHksIGl0J3MgcHJldmVudGluZyB0aGUgc2ltdWx0YW5lb3VzIHVzZSBvZiBgdXNlcnhhdHRyYCBhbmQgYW55IGZvcm0gb2YgYHZlcml0eWAuIFRoZSBjb2RlIGlzIHNpbXBsZSBlbm91Z2g6IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgaXQgdGhyb3dzIGFuIGVycm9yIGFuZCByZWplY3RzIHRoZSBtb3VudC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciB1cyBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIGFuc3dlciBpcyBhIGZpcm0gbm8uIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9uIHRoZSBzdGFjayBvciBoZWFwLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBwYXRocyB0aGF0IGNvdWxkIGxlYWsga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIG5vdCByZWFkaW5nIG9yIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgY29uZmlnYCBzdHJ1Y3R1cmUsIHdoaWNoIGhvbGRzIHRoZSBtb3VudCBvcHRpb25zLCBpcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBPdmVybGF5RlMgYGZzX2NvbnRleHRgIHNldHVwIGFuZCBpcyBpbml0aWFsaXplZCB0byBkZWZhdWx0IHZhbHVlcy4gSXQncyBzaW1wbHkgdmFsaWRhdGluZyBwYXJhbWV0ZXJzIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgb3IgbW91bnQgb3B0aW9uIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzbid0IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBhdGNoIGlzIGV4dHJlbWVseSB0YXJnZXRlZCBhbmQgZm9jdXNlZCBvbiB2YWxpZGF0aW5nIGlucHV0LCBzbyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIGludG8gYSBkaWZmZXJlbnQgY2F0ZWdvcnkuXG5cblNvLCBsZXQncyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OiBOZWVkc0tNU0FOPyBGYWxzZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBqdXN0IHZhbGlkYXRlcyB0aGUgbW91bnQgb3B0aW9ucyB3aXRoaW4gdGhlIE92ZXJsYXlGUyBjb2RlLiBJdCByZWplY3RzIHNwZWNpZmljIHBhcmFtZXRlciBjb21iaW5hdGlvbnMsIHdpdGhvdXQgYWxsb2NhdGlvbiBvciB1c2VyLXNwYWNlIGV4cG9zdXJlLlxuXG5BbHJpZ2h0LCBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6MTIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MTIuODcxNzkxNTQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICd1c2VyeGF0dHInIGFuZCAndmVyaXR5JyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1vdW50IG9wdGlvbiB2ZXJpZmljYXRpb24gY2hlY2sgaW4gT3ZlcmxheUZTIChmcy9vdmVybGF5ZnMvcGFyYW1zLmMpIHRvIHJlamVjdCBjb25mbGljdGluZyBvcHRpb25zIHdoZW4gYm90aCAndXNlcnhhdHRyJyBhbmQgJ3Zlcml0eScgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlnftt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 07:44:40 +0000 UTC FinishedAt: 2026-09-04 08:46:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVERLAY_FS" ], "series_id": "229cbe2b-1d74-4e22-886e-aaa836afd348" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ovl_fs_params_verify" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtb3VudCBvcHRpb24gdmVyaWZpY2F0aW9uIGNoZWNrIGluIE92ZXJsYXlGUyAoZnMvb3ZlcmxheWZzL3BhcmFtcy5jKSB0byByZWplY3QgY29uZmxpY3Rpbmcgb3B0aW9ucyB3aGVuIGJvdGggJiMzOTt1c2VyeGF0dHImIzM5OyBhbmQgJiMzOTt2ZXJpdHkmIzM5OyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG92ZXJsYXlmcyBtb3VudCBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGluIG92bF9mc19wYXJhbXNfdmVyaWZ5KCkgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIGNvbWJpbmF0aW9ucyBvZiB1c2VyeGF0dHIgYW5kIHZlcml0eSBtb3VudCBvcHRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3aXRoaW4gdGhlIG92ZXJsYXkgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzNDIzNzE4M2U3YWJkYTk1NTA2NjkyYWI3Yzc1MGMwODFjZGM4ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA4OjQ1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuIFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogU2lsZW50bHkgZGlzYWJsZSBkZWZhdWx0IHNldHRpbmcgb2YgcmVkaXJlY3QgYW5kIG1ldGFjb3B5LlxuIFx0XHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZsX2ZzX3BhcmFtc192ZXJpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM0MjM3MTgzZTdhYmRhOTU1MDY2OTJhYjdjNzUwYzA4MWNkYzhlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmMKaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogCQkJcHJfZXJyKCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJaWYgKGNvbmZpZy0mZ3Q7dmVyaXR5X21vZGUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCQkvKgogCQkgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuCiAJCSAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPdmVybGF5ZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBtYW5hZ2luZyBvdmVybGF5IGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBlaXRoZXIgcmVhY2ggZm9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yLCBtb3JlIGxpa2VseSwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgOTk3LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgYWxsIGFib3V0IHF1aWNrbHkgZXN0YWJsaXNoaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL3BhcmFtcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0XHQgKiBpbiB0aGlzIGNvbmZsaWN0LlxuIDk4MTpcdFx0XHRcdCAqL1xuIDk4MjpcdFx0XHRcdHByX2luZm8oXCYjMzQ7ZGlzYWJsaW5nIG1ldGFjb3B5IGR1ZSB0byBuZnNfZXhwb3J0PW9uXFxuXCYjMzQ7KTtcbiA5ODM6XHRcdFx0XHRjb25maWctXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcbiA5ODQ6XHRcdFx0fVxuIDk4NTpcdFx0fVxuIDk4NjpcdFxuIDk4NzpcdFxuIDk4ODpcdFx0LyogUmVzb2x2ZSB1c2VyeGF0dHIgLVx1MDAzZSAhcmVkaXJlY3QgXHUwMDI2XHUwMDI2ICFtZXRhY29weSBkZXBlbmRlbmN5ICovXG4gOTg5Olx0XHRpZiAoY29uZmlnLVx1MDAzZXVzZXJ4YXR0cikge1xuIDk5MDpcdFx0XHRpZiAoc2V0LnJlZGlyZWN0IFx1MDAyNlx1MDAyNlxuIDk5MTpcdFx0XHQgICAgY29uZmlnLVx1MDAzZXJlZGlyZWN0X21vZGUgIT0gT1ZMX1JFRElSRUNUX05PRk9MTE9XKSB7XG4gOTkyOlx0XHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixyZWRpcmVjdF9kaXI9JXNcXG5cJiMzNDssXG4gOTkzOlx0XHRcdFx0ICAgICAgIG92bF9yZWRpcmVjdF9tb2RlKGNvbmZpZykpO1xuIDk5NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk5NTpcdFx0XHR9XG4gOTk2Olx0XHRcdGlmIChjb25maWctXHUwMDNlbWV0YWNvcHkgXHUwMDI2XHUwMDI2IHNldC5tZXRhY29weSkge1xuIDk5NzpcdFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXG5cJiMzNDspO1xuIDk5ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk5OTpcdFx0XHR9XG4xMDAwOlx0XHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbjEwMDE6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcblwmIzM0OyxcbjEwMDI6XHRcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuMTAwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAwNDpcdFx0XHR9XG4xMDA1Olx0XHRcdC8qXG4xMDA2Olx0XHRcdCAqIFNpbGVudGx5IGRpc2FibGUgZGVmYXVsdCBzZXR0aW5nIG9mIHJlZGlyZWN0IGFuZCBtZXRhY29weS5cbjEwMDc6XHRcdFx0ICogVGhpcyBzaGFsbCBiZSB0aGUgZGVmYXVsdCBpbiB0aGUgZnV0dXJlIGFzIHdlbGw6IHRoZXNlXG4xMDA4Olx0XHRcdCAqIG9wdGlvbnMgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaWYgdXNlZCB0b2dldGhlciB3aXRoXG4xMDA5Olx0XHRcdCAqIHVzZXJ4YXR0ci5cbjEwMTA6XHRcdFx0ICovXG4xMDExOlx0XHRcdGNvbmZpZy1cdTAwM2VyZWRpcmVjdF9tb2RlID0gT1ZMX1JFRElSRUNUX05PRk9MTE9XO1xuMTAxMjpcdFx0XHRjb25maWctXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcbjEwMTM6XHRcdH1cbjEwMTQ6XHRcbjEwMTU6XHRcdC8qXG4xMDE2Olx0XHQgKiBGYWlsIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRydXN0ZWQgeGF0dHIgY2FwYWJpbGl0eSBhbmQgYSBmZWF0dXJlIHdhc1xuMTAxNzpcdFx0ICogZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhhdCByZXF1aXJlcyB0aGVtLlxuMTAxODpcdFx0ICovXG4xMDE5Olx0XHRpZiAoIWNvbmZpZy1cdTAwM2V1c2VyeGF0dHIgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgb3ZlcmxheWZzIFBhcmFtZXRlcnMgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBmdW5jdGlvbiB3aXRoaW4gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW5mbHVlbmNlIGhvdyBgb3ZlcmxheWZzYCBiZWhhdmVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBgQ09ORklHYCBvcHRpb25zIHJlbGF0ZSB0byBvdmVybGF5ZnMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBnbyBkaWcgYXJvdW5kIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgYm9vbGVhbiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCB0byBlbmFibGUgYW5kIGRpc2FibGUgc3BlY2lmaWMgZmVhdHVyZXMgd2l0aGluIG92ZXJsYXlmcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gcGF0aHMgdGhhdCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0YWtlcy4gVGhhdCBraW5kIG9mIGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSB3aGF0IHNjZW5hcmlvcyBhcmUgcG9zc2libGUgd2l0aGluIHRoaXMgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPVkVSTEFZX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjE1OmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiByZWRpcmVjdCBkaXJlY3RvcnkgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMzAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDctXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo2NTpjb25maWcgT1ZFUkxBWV9GU19ORlNfRVhQT1JUXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctOTItXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTItXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTI5OmNvbmZpZyBPVkVSTEFZX0ZTX0RFQlVHXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBleHRyYSBkZWJ1Z2dpbmcgY2hlY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkV4YW1pbmluZyBPdmVybGF5RlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIG92ZXJsYXlmcyBhZ2FpbiwgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJsYXlmcyBjb2RlYmFzZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIHZlcml0eSBzdXBwb3J0LiBJJiMzOTttIGZhaXJseSBjZXJ0YWluIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgZmlsZSBiZWZvcmUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcnVjaWFsIG9yIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBkb3QgYWxsIHRoZSBpJiMzOTtzIGFuZCBjcm9zcyB0aGUgdCYjMzk7cy4gSXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgT1ZFUkxBWV9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBGU19TVEFDS1xuICAgNTpcdFx0c2VsZWN0IEVYUE9SVEZTXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIEFuIG92ZXJsYXkgZmlsZXN5c3RlbSBjb21iaW5lcyB0d28gZmlsZXN5c3RlbXMgLSBhbiAmIzM5O3VwcGVyJiMzOTsgZmlsZXN5c3RlbVxuICAgODpcdFx0ICBhbmQgYSAmIzM5O2xvd2VyJiMzOTsgZmlsZXN5c3RlbS4gIFdoZW4gYSBuYW1lIGV4aXN0cyBpbiBib3RoIGZpbGVzeXN0ZW1zLCB0aGVcbiAgIDk6XHRcdCAgb2JqZWN0IGluIHRoZSAmIzM5O3VwcGVyJiMzOTsgZmlsZXN5c3RlbSBpcyB2aXNpYmxlIHdoaWxlIHRoZSBvYmplY3QgaW4gdGhlXG4gIDEwOlx0XHQgICYjMzk7bG93ZXImIzM5OyBmaWxlc3lzdGVtIGlzIGVpdGhlciBoaWRkZW4gb3IsIGluIHRoZSBjYXNlIG9mIGRpcmVjdG9yaWVzLFxuICAxMTpcdFx0ICBtZXJnZWQgd2l0aCB0aGUgJiMzOTt1cHBlciYjMzk7IG9iamVjdC5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0RJUlxuICAxNjpcdFx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxuICAyMDpcdFx0ICByZWRpcmVjdHMgd2hlbiByZW5hbWluZyBkaXJlY3RvcmllcyBieSBkZWZhdWx0LiAgSW4gdGhpcyBjYXNlIGl0IGlzXG4gIDIxOlx0XHQgIHN0aWxsIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIHJlZGlyZWN0cyBnbG9iYWxseSB3aXRoIHRoZVxuICAyMjpcdFx0ICBcJiMzNDtyZWRpcmVjdF9kaXI9b2ZmXCYjMzQ7IG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtIGluc3RhbmNlIGJhc2lzXG4gIDIzOlx0XHQgIHdpdGggdGhlIFwmIzM0O3JlZGlyZWN0X2Rpcj1vZmZcJiMzNDsgbW91bnQgb3B0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBOb3RlLCB0aGF0IHJlZGlyZWN0cyBhcmUgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUuICBUaGF0IGlzLCBtb3VudGluZ1xuICAyNjpcdFx0ICBhbiBvdmVybGF5IHdoaWNoIGhhcyByZWRpcmVjdHMgb24gYSBrZXJuZWwgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXNcbiAgMjc6XHRcdCAgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXCYjMzQ7XG4gIDMzOlx0XHRkZWZhdWx0IHlcbiAgMzQ6XHRcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBEaXNhYmxlIHRoaXMgdG8gZ2V0IGEgcG9zc2libHkgbW9yZSBzZWN1cmUgY29uZmlndXJhdGlvbiwgYnV0IHRoYXRcbiAgMzc6XHRcdCAgbWlnaHQgbm90IGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBrZXJuZWxzLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzIG5vdCBhbiBpc3N1ZSwgdGhlbiBpdCBpcyBzYWZlIGFuZFxuICA0MDpcdFx0ICByZWNvbW1lbmRlZCB0byBzYXkgTiBoZXJlLlxuICA0MTpcdFxuICA0MjpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxuICA0MzpcdFxuICA0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXG4gIDQ3Olx0XHRib29sIFwmIzM0O092ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIE9WRVJMQVlfRlNcbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgdGhpcyBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgdGhlbiBvdmVybGF5IGZpbGVzeXN0ZW1zIHdpbGwgdXNlXG4gIDUxOlx0XHQgIHRoZSBpbmRleCBkaXJlY3RvcnkgdG8gbWFwIGxvd2VyIGlub2RlcyB0byB1cHBlciBpbm9kZXMgYnkgZGVmYXVsdC5cbiAgNTI6XHRcdCAgSW4gdGhpcyBjYXNlIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIGluZGV4IGdsb2JhbGx5IHdpdGggdGhlXG4gIDUzOlx0XHQgIFwmIzM0O2luZGV4PW9mZlwmIzM0OyBtb2R1bGUgb3B0aW9uIG9yIG9uIGEgZmlsZXN5c3RlbSBpbnN0YW5jZSBiYXNpcyB3aXRoIHRoZVxuICA1NDpcdFx0ICBcJiMzNDtpbmRleD1vZmZcJiMzNDsgbW91bnQgb3B0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUaGUgaW5vZGVzIGluZGV4IGZlYXR1cmUgcHJldmVudHMgYnJlYWtpbmcgb2YgbG93ZXIgaGFyZGxpbmtzIG9uIGNvcHlcbiAgNTc6XHRcdCAgdXAuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIE5vdGUsIHRoYXQgdGhlIGlub2RlcyBpbmRleCBmZWF0dXJlIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICA2MDpcdFx0ICBUaGF0IGlzLCBtb3VudGluZyBhbiBvdmVybGF5IHdoaWNoIGhhcyBhbiBpbm9kZXMgaW5kZXggb24gYSBrZXJuZWxcbiAgNjE6XHRcdCAgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICA2MjpcdFxuICA2MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NDpcdFxuICA2NTpcdGNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIE5GUyBleHBvcnQgZmVhdHVyZSBieSBkZWZhdWx0XCYjMzQ7XG4gIDY3Olx0XHRkZXBlbmRzIG9uIE9WRVJMQVlfRlNcbiAgNjg6XHRcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU19JTkRFWFxuICA2OTpcdFx0ZGVwZW5kcyBvbiAhT1ZFUkxBWV9GU19NRVRBQ09QWVxuICA3MDpcdFx0aGVscFxuICA3MTpcdFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcbiAgNzI6XHRcdCAgdGhlIGluZGV4IGRpcmVjdG9yeSB0byBkZWNvZGUgb3ZlcmxheSBORlMgZmlsZSBoYW5kbGVzIGJ5IGRlZmF1bHQuXG4gIDczOlx0XHQgIEluIHRoaXMgY2FzZSwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gdHVybiBvZmYgTkZTIGV4cG9ydCBzdXBwb3J0XG4gIDc0Olx0XHQgIGdsb2JhbGx5IHdpdGggdGhlIFwmIzM0O25mc19leHBvcnQ9b2ZmXCYjMzQ7IG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtXG4gIDc1Olx0XHQgIGluc3RhbmNlIGJhc2lzIHdpdGggdGhlIFwmIzM0O25mc19leHBvcnQ9b2ZmXCYjMzQ7IG1vdW50IG9wdGlvbi5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVGhlIE5GUyBleHBvcnQgZmVhdHVyZSBjcmVhdGVzIGFuIGluZGV4IG9uIGNvcHkgdXAgb2YgZXZlcnkgZmlsZSBhbmRcbiAgNzg6XHRcdCAgZGlyZWN0b3J5LiAgVGhpcyBmdWxsIGluZGV4IGlzIHVzZWQgdG8gZGV0ZWN0IG92ZXJsYXkgZmlsZXN5c3RlbXNcbiAgNzk6XHRcdCAgaW5jb25zaXN0ZW5jaWVzIG9uIGxvb2t1cCwgbGlrZSByZWRpcmVjdCBmcm9tIG11bHRpcGxlIHVwcGVyIGRpcnMgdG9cbiAgODA6XHRcdCAgdGhlIHNhbWUgbG93ZXIgZGlyLiAgVGhlIGZ1bGwgaW5kZXggbWF5IGluY3VyIHNvbWUgb3ZlcmhlYWQgb24gbW91bnRcbiAgODE6XHRcdCAgdGltZSwgZXNwZWNpYWxseSB3aGVuIHZlcmlmeWluZyB0aGF0IGRpcmVjdG9yeSBmaWxlIGhhbmRsZXMgYXJlIG5vdFxuICA4MjpcdFx0ICBzdGFsZS5cbiAgODM6XHRcbiAgODQ6XHRcdCAgTm90ZSwgdGhhdCB0aGUgTkZTIGV4cG9ydCBmZWF0dXJlIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICA4NTpcdFx0ICBUaGF0IGlzLCBtb3VudGluZyBhbiBvdmVybGF5IHdoaWNoIGhhcyBhIGZ1bGwgaW5kZXggb24gYSBrZXJuZWxcbiAgODY6XHRcdCAgdGhhdCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxuICA4NzpcdFxuICA4ODpcdFx0ICBNb3N0IHVzZXJzIHNob3VsZCBzYXkgTiBoZXJlIGFuZCBlbmFibGUgdGhpcyBmZWF0dXJlIG9uIGEgY2FzZS1ieS1cbiAgODk6XHRcdCAgY2FzZSBiYXNpcyB3aXRoIHRoZSBcJiMzNDtuZnNfZXhwb3J0PW9uXCYjMzQ7IG1vdW50IG9wdGlvbi5cbiAgOTA6XHRcbiAgOTE6XHRcdCAgU2F5IE4gdW5sZXNzIHlvdSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMuXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIE9WRVJMQVlfRlNfWElOT19BVVRPXG4gIDk0Olx0XHRib29sIFwmIzM0O092ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcJiMzNDtcbiAgOTU6XHRcdGRlZmF1bHQgblxuICA5NjpcdFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXG4gIDk3Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gIDk4Olx0XHRoZWxwXG4gIDk5Olx0XHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxuIDEwMDpcdFx0ICB1bnVzZWQgaGlnaCBiaXRzIGluIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpbm9kZSBudW1iZXJzIHRvIG1hcCBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgLiBUaW1lIHRvIGRpZyBpbnRvIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIHdhbnQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUga2luZHMgb2YgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcsIGFuZCB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGxpZS4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IE92ZXJsYXlGUyYjMzk7cyBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgdG8gZm9jdXMgYW55IGZ1cnRoZXIgYW5hbHlzaXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292bF9mc19wYXJhbXNfdmVyaWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9wYXJhbXMuYz04NDA9dm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3NS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo4NzY6aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3Ny1cdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmg9NDA9dm9pZCBvdmxfZnJlZV9mcyhzdHJ1Y3Qgb3ZsX2ZzICpvZnMpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5oOjQxOmludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbmZzL292ZXJsYXlmcy9wYXJhbXMuaC00Mi1cdFx0XHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9MTM3MT1zdGF0aWMgaW50IG92bF9maWxsX3N1cGVyX2NyZWRzKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzc5LVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MTM4MDpcdGVyciA9IG92bF9mc19wYXJhbXNfdmVyaWZ5KGN0eCwgXHUwMDI2b2ZzLVx1MDAzZWNvbmZpZyk7XG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzgxLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE92ZXJsYXlGUyBhbmQgYHZlcml0eV9tb2RlYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB2ZXJpdHlfbW9kZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHBhcmFtZXRlciYjMzk7cyBiZWhhdmlvciBpcyBrZXkgdG8gW2luc2VydCB5b3VyIGZpZWxkJiMzOTtzIHJlbGF0ZWQgdGFzay9wcm9ibGVtIGhlcmUgLSBlLmcuLCBvcHRpbWl6aW5nIGNvbnRhaW5lciBzZWN1cml0eSwgdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYXVkaXRpbmcgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBldGMuXS4gSSBuZWVkIHRvIGdyYXNwIHByZWNpc2VseSBob3cgYHZlcml0eV9tb2RlYCBpbmZsdWVuY2VzIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0mIzM5O3MgaW50ZWdyaXR5IGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgbW91bnQgb3BlcmF0aW9ucyBhbmQgZmlsZSBhY2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGUgcGFyYW1ldGVyIGlzIHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG1ldGFkYXRhL2RhdGEgc3RydWN0dXJlIGhhbmRsaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBvdmVybGF5ZnMgZmVhdHVyZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB0byB1bmNvdmVyIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpdHlfbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvY29weV91cC5jPTEwMjg9c3RhdGljIGJvb2wgb3ZsX25lZWRfbWV0YV9jb3B5X3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0Mi1cdC8qIEZhbGwgYmFjayB0byBmdWxsIGNvcHkgaWYgbm8gZnN2ZXJpdHkgb24gc291cmNlIGRhdGEgYW5kIHdlIHJlcXVpcmUgdmVyaXR5ICovXG5mcy9vdmVybGF5ZnMvY29weV91cC5jOjEwNDM6XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0NC1cdFx0c3RydWN0IHBhdGggbG93ZXJkYXRhO1xuLS1cbmZzL292ZXJsYXlmcy9uYW1laS5jPTk1ND1zdGF0aWMgaW50IG92bF9tYXliZV92YWxpZGF0ZV92ZXJpdHkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2MC1cbmZzL292ZXJsYXlmcy9uYW1laS5jOjk2MTpcdGlmICghb2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSB8fFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYyLVx0ICAgICFvdmxfaXNfbWV0YWNvcHlfZGVudHJ5KGRlbnRyeSkgfHxcbi0tXG5mcy9vdmVybGF5ZnMvbmFtZWkuYy05NjYtXHRpZiAoIW92bF90ZXN0X2ZsYWcoT1ZMX0hBU19ESUdFU1QsIGlub2RlKSkge1xuZnMvb3ZlcmxheWZzL25hbWVpLmM6OTY3Olx0XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2OC1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O21ldGFjb3B5IGZpbGUgJiMzOTslcGQmIzM5OyBoYXMgbm8gZGlnZXN0IHNwZWNpZmllZFxcblwmIzM0Oyxcbi0tXG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5Lmg9OD1zdHJ1Y3Qgb3ZsX2NvbmZpZyB7XG4tLVxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTEzLVx0aW50IHJlZGlyZWN0X21vZGU7XG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5Lmg6MTQ6XHRpbnQgdmVyaXR5X21vZGU7XG5mcy9vdmVybGF5ZnMvb3ZsX2VudHJ5LmgtMTUtXHRib29sIGluZGV4O1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz0xMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBvdmxfcGFyYW1ldGVyX3Zlcml0eVtdID0ge1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTM0OnN0YXRpYyBjb25zdCBjaGFyICpvdmxfdmVyaXR5X21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzUte1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNjpcdHJldHVybiBvdmxfcGFyYW1ldGVyX3Zlcml0eVtjb25maWctXHUwMDNldmVyaXR5X21vZGVdLm5hbWU7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM3LX1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzgtXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTM5OnN0YXRpYyBpbnQgb3ZsX3Zlcml0eV9tb2RlX2RlZih2b2lkKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTYxMj1zdGF0aWMgaW50IG92bF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy02ODQtXHRjYXNlIE9wdF92ZXJpdHk6XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6Njg1Olx0XHRjb25maWctXHUwMDNldmVyaXR5X21vZGUgPSByZXN1bHQudWludF8zMjtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy02ODYtXHRcdGJyZWFrO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz04NzY9aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NjgtXHRcdFx0Y29uZmlnLVx1MDAzZW5mc19leHBvcnQgPSBmYWxzZTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5Njk6XHRcdH0gZWxzZSBpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTcwLVx0XHRcdC8qXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3NC1cdFx0XHRwcl9pbmZvKFwmIzM0O2Rpc2FibGluZyBuZnNfZXhwb3J0IGR1ZSB0byB2ZXJpdHk9JXNcXG5cJiMzNDssXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6OTc1Olx0XHRcdFx0b3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3Ni1cdFx0XHRjb25maWctXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05OTktXHRcdH1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAwOlx0XHRpZiAoY29uZmlnLVx1MDAzZXZlcml0eV9tb2RlKSB7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAwMS1cdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcblwmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAyOlx0XHRcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAwMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTAyOC1cdFx0fVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEwMjk6XHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDMwLVx0XHRcdHByX2VycihcJiMzNDt2ZXJpdHkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgdHJ1c3RlZCB4YXR0cnNcXG5cJiMzNDspO1xuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYz0xMDU0PWludCBvdmxfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA0LVx0XHRzZXFfcHV0cyhtLCBcJiMzNDssdXNlcnhhdHRyXCYjMzQ7KTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA1Olx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgIT0gb3ZsX3Zlcml0eV9tb2RlX2RlZigpKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDYtXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LHZlcml0eT0lc1wmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA3Olx0XHRcdCAgIG92bF92ZXJpdHlfbW9kZShcdTAwMjZvZnMtXHUwMDNlY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwOC1cdHJldHVybiAwO1xuLS1cbmZzL292ZXJsYXlmcy91dGlsLmM9MTM3MT1pbnQgb3ZsX3ZhbGlkYXRlX3Zlcml0eShzdHJ1Y3Qgb3ZsX2ZzICpvZnMsXG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzgwLVxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxMzgxOlx0aWYgKCFvZnMtXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8XG5mcy9vdmVybGF5ZnMvdXRpbC5jLTEzODItXHQgICAgLyogVmVyaXR5IG9ubHkgd29ya3Mgb24gcmVndWxhciBmaWxlcyAqL1xuLS1cbmZzL292ZXJsYXlmcy91dGlsLmMtMTM5MC1cdGlmICgheGF0dHJfc2l6ZSB8fCAhbWV0YWNvcHlfZGF0YS5kaWdlc3RfYWxnbykge1xuZnMvb3ZlcmxheWZzL3V0aWwuYzoxMzkxOlx0XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSA9PSBPVkxfVkVSSVRZX1JFUVVJUkUpIHtcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM5Mi1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O21ldGFjb3B5IGZpbGUgJiMzOTslcGQmIzM5OyBoYXMgbm8gZGlnZXN0IHNwZWNpZmllZFxcblwmIzM0Oyxcbi0tXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTE0MjY9aW50IG92bF9nZXRfdmVyaXR5X2RpZ2VzdChzdHJ1Y3Qgb3ZsX2ZzICpvZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpzcmMsXG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDMwLVxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxNDMxOlx0aWYgKCFvZnMtXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8ICFTX0lTUkVHKGRfaW5vZGUoc3JjLVx1MDAzZWRlbnRyeSktXHUwMDNlaV9tb2RlKSlcbmZzL292ZXJsYXlmcy91dGlsLmMtMTQzMi1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ0LVx0ICAgIFdBUk5fT05fT05DRShkaWdlc3Rfc2l6ZSBcdTAwM2UgRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRSkpIHtcbmZzL292ZXJsYXlmcy91dGlsLmM6MTQ0NTpcdFx0aWYgKG9mcy1cdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XG5mcy9vdmVybGF5ZnMvdXRpbC5jLTE0NDYtXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtsb3dlciBmaWxlICYjMzk7JXBkJiMzOTsgaGFzIG5vIGZzLXZlcml0eSBkaWdlc3RcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGFuIE92ZXJsYXlGUyBQYXJhbWV0ZXIgVmVyaWZpY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKWAuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGEgY29uZmxpY3Q6IHRoZSBjb2RlIGlzIHJlamVjdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IHRyeSB0byB1c2UgYm90aCBgdXNlcnhhdHRyYCBhbmQgYSBub24tYG9mZmAgYHZlcml0eV9tb2RlYC4gSXQmIzM5O3MgcmV0dXJuaW5nIGAtRUlOVkFMYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB2ZXJpdHkgbmVlZHMgdHJ1c3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgdHJ1c3RlZC5vdmVybGF5LipgKSwgYW5kIGB1c2VyLipgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGB1c2VyeGF0dHJgKSBkb24mIzM5O3QgY3V0IGl0LgoKTmV4dCwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiByZWxldmFudCBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gRm9ydHVuYXRlbHksIG92ZXJsYXlmcyBpcyBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmaWxlc3lzdGVtIHN1cHBvcnQsIHNvIGEgc2ltcGxlIGBtb3VudCAtdCBvdmVybGF5IC4uLmAgc2hvdWxkIHRyaWdnZXIgaXQsIHdoaWNoIHN1Z2dlc3RzIHllcy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3c6IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBTZWN0aW9uIDMsIHRoZSBhbnN3ZXIgaXMgbW9zdCBsaWtlbHkgeWVzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYW5kIG1vZGlmeWluZyBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGxvZ2ljIGluIG92ZXJsYXlmcywgd2hpY2ggaXMgYSAqY29yZSogZmlsZXN5c3RlbSBhbmQgVkZTIGRyaXZlci4gV2UgYXJlIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIHN5c3RlbS4KCkxldCYjMzk7cyBjb25maXJtIHJlYWNoYWJpbGl0eSBhbmQgdGhlIHJlcXVpcmVtZW50cy4gWWVzLCBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGlzIGluZGVlZCByZWFjaGFibGUgd2hlbiBtb3VudGluZyBvdmVybGF5ZnMgd2l0aCBib3RoIGB1c2VyeGF0dHJgIGFuZCBgdmVyaXR5YCBlbmFibGVkLiBJIGNhbiBzZWUgdGhhdCB0aGUgYE9WRVJMQVlfRlNgIGNvbmZpZyBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgb2YgY291cnNlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgZGlyZWN0bHkuIFdlIGNhbiBmb2N1cyBzeW1ib2xzIG9uIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgb3IgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgb3ZsX2ZpbGxfc3VwZXJfY3JlZHNgIG9yIGBvdmxfcGFyc2VfcGFyYW1gLCBidXQgYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgb3ZlcmxheWZzIE1ha2VmaWxlIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRoYXQgY291bGQgaW1wYWN0IHJlYWNoYWJpbGl0eS4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZ1enppbmcgY2FtcGFpZ24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL01ha2VmaWxlLTUtXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgJiM0Mzs9IG92ZXJsYXkub1xuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIE92ZXJsYXlGUyBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgYXVkaXQgdGhlIGBmcy9vdmVybGF5ZnMvTWFrZWZpbGVgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggZmlsZXN5c3RlbXMsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoaXMgdGhpbmcgaXMgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBmcmFua2x5LCBhbnkgYXJlYXMgdGhhdCBtaWdodCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgdGhlIGNlbnRyYWwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYSBwcmV0dHkgY3JpdGljYWwgcGllY2Ugb2Yga2VybmVsIGZ1bmN0aW9uYWxpdHksIHNvIG5vIGFzc3VtcHRpb25zLCBqdXN0IGEgbGluZS1ieS1saW5lIGNoZWNrIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZSBzdXJlIGl0IHN0aWxsIG1ha2VzIHNlbnNlLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgbWFrZWZpbGVzIGFuZCB0aGUgcnVsZXMgc3BlY2lmaWMgdG8gdGhpcyBmaWxlc3lzdGVtLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MsIG9yIGRhbmdlcm91cyBnb3RjaGFzIGx1cmtpbmcgaW4gdGhlIGRldGFpbHM/IEkmIzM5O2xsIGFsc28gYmUgZm9jdXNpbmcgb24gaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL292ZXJsYXlmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgJiM0Mzs9IG92ZXJsYXkub1xuICAgNzpcdFxuICAgODpcdG92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxuICAgOTpcdFx0XHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzEKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT3ZlcmxheUZTIFBhcmFtZXRlciBWZXJpZmljYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoZSBgT1ZFUkxBWV9GU2AgY29uZmlnIGlzIHRoZSBrZXkgaGVyZSDigJMgaXQmIzM5O3MgYWxsIHRoYXQmIzM5O3MgbmVlZGVkIHRvIGJ1aWxkIGBwYXJhbXMuY2AuIExldCYjMzk7cyBkaXZlIGludG8gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gcXVpY2tseSBjb25maXJtaW5nIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHNuZWFreSBzeW1ib2xzIG9yIGNvbmZpZ3MgaW52b2x2ZWQuIFllcCwganVzdCBgT1ZFUkxBWV9GU2AgKG5vIGBDT05GSUdfYCBwcmVmaXgsIGdvdCBpdCkuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgbm93LgoKVGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgZmxhZyBiZWluZyBzZXQgaXMgaW1wb3J0YW50LiBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHNpZ25pZmljYW50OiBUaGlzIHBhdGNoIGludHJvZHVjZXMgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHJlamVjdGluZyBjb25mbGljdGluZyBvcHRpb25zIGxpa2UgYHVzZXJ4YXR0cmAgYW5kIGB2ZXJpdHlgIGR1cmluZyBvdmVybGF5ZnMgbW91bnQgb3B0aW9uIHByb2Nlc3NpbmcgKndpdGhpbiogYG92bF9mc19wYXJhbXNfdmVyaWZ5KClgLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIHdpdGhpbiBvdmVybGF5ZnMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBmdXp6aW5nIGlzIHZhbHVhYmxlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoZSBhbmFseXNpcywgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdmxfZnNfcGFyYW1zX3ZlcmlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICYjMzk7dXNlcnhhdHRyJiMzOTsgYW5kICYjMzk7dmVyaXR5JiMzOTsgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM0MjM3MTgzZTdhYmRhOTU1MDY2OTJhYjdjNzUwYzA4MWNkYzhlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmMgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmMKaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuYwpAQCAtOTk3LDYgJiM0Mzs5OTcsMTEgQEAgaW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LAogCQkJcHJfZXJyKCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJaWYgKGNvbmZpZy0mZ3Q7dmVyaXR5X21vZGUpIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCQkvKgogCQkgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuCiAJCSAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE92ZXJsYXlGUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBpcyBjb25jZXJuaW5nIGxpbmUgOTk3LCBzbyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LiBBaCwgdGhlcmUgaXQgaXMg4oCTIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgZm9yIGNvbmZsaWN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV3IGB2ZXJpdHlfbW9kZWAgc2V0dGluZy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgYW4gZXJyb3IgY2hlY2s6IGlmIGB1c2VyeGF0dHJgIGlzIGVuYWJsZWQgKmFuZCogYHZlcml0eV9tb2RlYCBpcyBzZXQgKHRvIGFueXRoaW5nLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUpLCBpdCYjMzk7bGwgdGhyb3cgYW4gYC1FSU5WQUxgLiAgVGhlIGVycm9yIG1lc3NhZ2UgY2xlYXJseSBzdGF0ZXMgdGhlIGNvbmZsaWN0LiBJdCYjMzk7cyB1c2luZyBgb3ZsX3Zlcml0eV9tb2RlKClgIHRvIGdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVyaXR5IG1vZGUsIHdoaWNoIGlzIG5pY2UuIFNlZW1zIGxpa2UgYSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGhlcmUuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIGB1c2VyeGF0dHJgIGFuZCBhbnkgYHZlcml0eWAgc2V0dGluZy4gSSBhc3N1bWUgdGhlcmUmIzM5O3MgYW4gaW5oZXJlbnQgaW5jb21wYXRpYmlsaXR5IHRoZXJlLCBsaWtlbHkgc3RlbW1pbmcgZnJvbSBob3cgb3ZlcmxheWZzIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgaG93IHZlcml0eSBtb2RlIGludGVyYWN0cyB3aXRoIHRoYXQuICBMb29rcyBsaWtlIGl0IGlzIHByb2JhYmx5IGFuIGludGVuZGVkIGRlc2lnbiByZXN0cmljdGlvbiwgc2luY2UgdGhlIGNvbmZsaWN0IGlzIG5vdCAmIzM0O2ZpeGVkJiMzNDsgYnkgYW55IGNvZGUgY2hhbmdlcy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb25mbGljdCwgYnV0IHRoaXMgcGF0Y2ggc2VlbXMgd2VsbC1wbGFjZWQgYW5kIGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgYmFzZWQgb24gdGhpcyBzbmlwcGV0LiBJdOKAmXMgYSBnb29kLCBjbGVhbiBjaGVjayB0aGF0IHdpbGwgaGVscCBwcmV2ZW50IHVzZXIgbWlzY29uZmlndXJhdGlvbnMuIE5vdyBJIG5lZWQgdG8gcmV2aWV3IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY29uZmxpY3QgZXhpc3RzIGFuZCB3aGV0aGVyIHRoaXMgYXBwcm9hY2ggdG8gaGFuZGxlIGl0IGlzIHRoZSBiZXN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvcGFyYW1zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0XHRcdCAqIGluIHRoaXMgY29uZmxpY3QuXG4gOTgxOlx0XHRcdFx0ICovXG4gOTgyOlx0XHRcdFx0cHJfaW5mbyhcJiMzNDtkaXNhYmxpbmcgbWV0YWNvcHkgZHVlIHRvIG5mc19leHBvcnQ9b25cXG5cJiMzNDspO1xuIDk4MzpcdFx0XHRcdGNvbmZpZy1cdTAwM2VtZXRhY29weSA9IGZhbHNlO1xuIDk4NDpcdFx0XHR9XG4gOTg1Olx0XHR9XG4gOTg2Olx0XG4gOTg3Olx0XG4gOTg4Olx0XHQvKiBSZXNvbHZlIHVzZXJ4YXR0ciAtXHUwMDNlICFyZWRpcmVjdCBcdTAwMjZcdTAwMjYgIW1ldGFjb3B5IGRlcGVuZGVuY3kgKi9cbiA5ODk6XHRcdGlmIChjb25maWctXHUwMDNldXNlcnhhdHRyKSB7XG4gOTkwOlx0XHRcdGlmIChzZXQucmVkaXJlY3QgXHUwMDI2XHUwMDI2XG4gOTkxOlx0XHRcdCAgICBjb25maWctXHUwMDNlcmVkaXJlY3RfbW9kZSAhPSBPVkxfUkVESVJFQ1RfTk9GT0xMT1cpIHtcbiA5OTI6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHJlZGlyZWN0X2Rpcj0lc1xcblwmIzM0OyxcbiA5OTM6XHRcdFx0XHQgICAgICAgb3ZsX3JlZGlyZWN0X21vZGUoY29uZmlnKSk7XG4gOTk0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTk1Olx0XHRcdH1cbiA5OTY6XHRcdFx0aWYgKGNvbmZpZy1cdTAwM2VtZXRhY29weSBcdTAwMjZcdTAwMjYgc2V0Lm1ldGFjb3B5KSB7XG4gOTk3Olx0XHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixtZXRhY29weT1vblxcblwmIzM0Oyk7XG4gOTk4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTk5Olx0XHRcdH1cbjEwMDA6XHRcdFx0aWYgKGNvbmZpZy1cdTAwM2V2ZXJpdHlfbW9kZSkge1xuMTAwMTpcdFx0XHRcdHByX2VycihcJiMzNDtjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCYjMzQ7LFxuMTAwMjpcdFx0XHRcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG4xMDAzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDA0Olx0XHRcdH1cbjEwMDU6XHRcdFx0LypcbjEwMDY6XHRcdFx0ICogU2lsZW50bHkgZGlzYWJsZSBkZWZhdWx0IHNldHRpbmcgb2YgcmVkaXJlY3QgYW5kIG1ldGFjb3B5LlxuMTAwNzpcdFx0XHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcbjEwMDg6XHRcdFx0ICogb3B0aW9ucyBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpZiB1c2VkIHRvZ2V0aGVyIHdpdGhcbjEwMDk6XHRcdFx0ICogdXNlcnhhdHRyLlxuMTAxMDpcdFx0XHQgKi9cbjEwMTE6XHRcdFx0Y29uZmlnLVx1MDAzZXJlZGlyZWN0X21vZGUgPSBPVkxfUkVESVJFQ1RfTk9GT0xMT1c7XG4xMDEyOlx0XHRcdGNvbmZpZy1cdTAwM2VtZXRhY29weSA9IGZhbHNlO1xuMTAxMzpcdFx0fVxuMTAxNDpcdFxuMTAxNTpcdFx0LypcbjEwMTY6XHRcdCAqIEZhaWwgaWYgd2UgZG9uJiMzOTt0IGhhdmUgdHJ1c3RlZCB4YXR0ciBjYXBhYmlsaXR5IGFuZCBhIGZlYXR1cmUgd2FzXG4xMDE3Olx0XHQgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCB0aGF0IHJlcXVpcmVzIHRoZW0uXG4xMDE4Olx0XHQgKi9cbjEwMTk6XHRcdGlmICghY29uZmlnLVx1MDAzZXVzZXJ4YXR0ciBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkludmVzdGlnYXRpbmcgYG92bF92ZXJpdHlfbW9kZShjb25maWcpYCoqCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiwgYG92bF92ZXJpdHlfbW9kZShjb25maWcpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBkb2luZywgYW5kIHRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBsb29rIGF0IGl0cyBpbnB1dCwgd2hpY2ggYXBwZWFycyB0byBiZSBgY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgYGNvbmZpZ2AgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgdG8gdGhlIGZ1bmN0aW9uLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBsaWtlIHRvIGRvLCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBpcyBsb29rIGF0IGBjb25maWctJmd0O3Zlcml0eV9tb2RlYC4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHR5cGUgdGhpcyBmaWVsZCBpcy4gSXMgaXQgYW4gZW51bT8gQW4gaW50ZWdlcj8gVW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBkYXRhIHR5cGUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGRpY3RhdGVzIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhpcyBwaWVjZSBvZiB0aGUgYGNvbmZpZ2AgZGF0YS4gVGhhdCYjMzk7bGwgbGV0IG1lIHVuZGVyc3RhbmQgd2hhdCBpdCBtZWFucyBpbiBjb250ZXh0IG9mIHRoZSBvdmVybGF5IGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdmxfdmVyaXR5X21vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzMy1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzQ6c3RhdGljIGNvbnN0IGNoYXIgKm92bF92ZXJpdHlfbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzOC1cbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTQwLXtcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODc2PWludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc0LVx0XHRcdHByX2luZm8oXCYjMzQ7ZGlzYWJsaW5nIG5mc19leHBvcnQgZHVlIHRvIHZlcml0eT0lc1xcblwmIzM0OyxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5NzU6XHRcdFx0XHRvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc2LVx0XHRcdGNvbmZpZy1cdTAwM2VuZnNfZXhwb3J0ID0gZmFsc2U7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDEtXHRcdFx0cHJfZXJyKFwmIzM0O2NvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cix2ZXJpdHk9JXNcXG5cJiMzNDssXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMjpcdFx0XHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEwNTQ9aW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDQtXHRcdHNlcV9wdXRzKG0sIFwmIzM0Oyx1c2VyeGF0dHJcJiMzNDspO1xuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDU6XHRpZiAob2ZzLVx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSAhPSBvdmxfdmVyaXR5X21vZGVfZGVmKCkpXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssdmVyaXR5PSVzXCYjMzQ7LFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDc6XHRcdFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFx1MDAyNm9mcy1cdTAwM2Vjb25maWcpKTtcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBvdmxfdmVyaXR5X21vZGVgIGFuZCBgb3ZsX3BhcmFtZXRlcl92ZXJpdHlgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3ZlcmxheSBmaWxlc3lzdGVtIHZlcml0eSBzZXR0aW5ncyB3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgY29kZSB0aGF0IGRlZmluZXMgYG92bF92ZXJpdHlfbW9kZWAgYW5kIGBvdmxfcGFyYW1ldGVyX3Zlcml0eWAuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMjcg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9ucyB0aGVtc2VsdmVzIHdpbGwgb2ZmZXIgYSBjbGVhciBqdW1waW5nLW9mZiBwb2ludCBmb3IgdHJhY2luZyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGxhcmdlciBvdmVybGF5ZnMgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHRoZXNlIHBhcnRpY3VsYXIgc2V0dGluZ3MgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBmaWxlIGludGVncml0eSBtZWNoYW5pc21zIG9mIG92ZXJsYXlmcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vdmVybGF5ZnMvcGFyYW1zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdH1cbiAxMjY6XHRcbiAxMjc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XG4gMTI4Olx0XHR7IFwmIzM0O29mZlwmIzM0OyxcdE9WTF9WRVJJVFlfT0ZGICAgICB9LFxuIDEyOTpcdFx0eyBcJiMzNDtvblwmIzM0OyxcdFx0T1ZMX1ZFUklUWV9PTiAgICAgIH0sXG4gMTMwOlx0XHR7IFwmIzM0O3JlcXVpcmVcJiMzNDssXHRPVkxfVkVSSVRZX1JFUVVJUkUgfSxcbiAxMzE6XHRcdHt9XG4gMTMyOlx0fTtcbiAxMzM6XHRcbiAxMzQ6XHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXG4gMTM1Olx0e1xuIDEzNjpcdFx0cmV0dXJuIG92bF9wYXJhbWV0ZXJfdmVyaXR5W2NvbmZpZy1cdTAwM2V2ZXJpdHlfbW9kZV0ubmFtZTtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXG4gMTQwOlx0e1xuIDE0MTpcdFx0cmV0dXJuIE9WTF9WRVJJVFlfT0ZGO1xuIDE0MjpcdH1cbiAxNDM6XHRcbiAxNDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfZnN5bmNbXSA9IHtcbiAxNDU6XHRcdHsgXCYjMzQ7dm9sYXRpbGVcJiMzNDssXHRPVkxfRlNZTkNfVk9MQVRJTEUgfSxcbiAxNDY6XHRcdHsgXCYjMzQ7YXV0b1wmIzM0OyxcdE9WTF9GU1lOQ19BVVRPICAgICB9LFxuIDE0NzpcdFx0eyBcJiMzNDtzdHJpY3RcJiMzNDssXHRPVkxfRlNZTkNfU1RSSUNUICAgfSxcbiAxNDg6XHRcdHt9XG4gMTQ5Olx0fTtcbiAxNTA6XHRcbiAxNTE6XHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX2ZzeW5jX21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcbiAxNTI6XHR7XG4gMTUzOlx0XHRyZXR1cm4gb3ZsX3BhcmFtZXRlcl9mc3luY1tjb25maWctXHUwMDNlZnN5bmNfbW9kZV0ubmFtZTtcbiAxNTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjUKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk92ZXJsYXlGUyBQYXRjaCBBbmFseXNpczogTm8gS01TQU4gTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBqdXN0IGFkZGluZyBhIHNhbml0eSBjaGVjayB0byB0aGUgT3ZlcmxheUZTIG1vdW50IG9wdGlvbiBwYXJzZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgc2ltdWx0YW5lb3VzIHVzZSBvZiBgdXNlcnhhdHRyYCBhbmQgYW55IGZvcm0gb2YgYHZlcml0eWAuIFRoZSBjb2RlIGlzIHNpbXBsZSBlbm91Z2g6IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgaXQgdGhyb3dzIGFuIGVycm9yIGFuZCByZWplY3RzIHRoZSBtb3VudC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgdXMgaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBBZnRlciBhIHF1aWNrIGxvb2ssIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIG5vLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcCwgbm8gbW9kaWZpY2F0aW9ucyB0byBhbnkgcGF0aHMgdGhhdCBjb3VsZCBsZWFrIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IHJlYWRpbmcgb3IgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBjb25maWdgIHN0cnVjdHVyZSwgd2hpY2ggaG9sZHMgdGhlIG1vdW50IG9wdGlvbnMsIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIE92ZXJsYXlGUyBgZnNfY29udGV4dGAgc2V0dXAgYW5kIGlzIGluaXRpYWxpemVkIHRvIGRlZmF1bHQgdmFsdWVzLiBJdCYjMzk7cyBzaW1wbHkgdmFsaWRhdGluZyBwYXJhbWV0ZXJzIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgb3IgbW91bnQgb3B0aW9uIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcy4KClRoZXJlZm9yZSwgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggaXMgZXh0cmVtZWx5IHRhcmdldGVkIGFuZCBmb2N1c2VkIG9uIHZhbGlkYXRpbmcgaW5wdXQsIHNvIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGZhbGwgaW50byBhIGRpZmZlcmVudCBjYXRlZ29yeS4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIGNoZWNrbGlzdDogTmVlZHNLTVNBTj8gRmFsc2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgcGF0Y2gganVzdCB2YWxpZGF0ZXMgdGhlIG1vdW50IG9wdGlvbnMgd2l0aGluIHRoZSBPdmVybGF5RlMgY29kZS4gSXQgcmVqZWN0cyBzcGVjaWZpYyBwYXJhbWV0ZXIgY29tYmluYXRpb25zLCB3aXRob3V0IGFsbG9jYXRpb24gb3IgdXNlci1zcGFjZSBleHBvc3VyZS4KCkFscmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICYjMzk7dXNlcnhhdHRyJiMzOTsgYW5kICYjMzk7dmVyaXR5JiMzOTsgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1vdW50IG9wdGlvbiB2ZXJpZmljYXRpb24gY2hlY2sgaW4gT3ZlcmxheUZTIChmcy9vdmVybGF5ZnMvcGFyYW1zLmMpIHRvIHJlamVjdCBjb25mbGljdGluZyBvcHRpb25zIHdoZW4gYm90aCAmIzM5O3VzZXJ4YXR0ciYjMzk7IGFuZCAmIzM5O3Zlcml0eSYjMzk7IGFyZSBlbmFibGVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6MzAuODU0NTI0OTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMTczMjg1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICd1c2VyeGF0dHInIGFuZCAndmVyaXR5JyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozMC44NTQ1Mjk0OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc2NzcyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDg6NDU6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL3BhcmFtcy5jIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXFxuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcXG4rKysgYi9mcy9vdmVybGF5ZnMvcGFyYW1zLmNcXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXFxuIFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXFxuIFxcdFxcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozMi41MDMyNDQzNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTg3NTQwNzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdmxfZnNfcGFyYW1zX3ZlcmlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG92ZXJsYXlmcyBtb3VudCBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGluIG92bF9mc19wYXJhbXNfdmVyaWZ5KCkgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIGNvbWJpbmF0aW9ucyBvZiB1c2VyeGF0dHIgYW5kIHZlcml0eSBtb3VudCBvcHRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB3aXRoaW4gdGhlIG92ZXJsYXkgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwODo0NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuKysrIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXG4gXHRcdFx0cHJfZXJyKFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbitcdFx0XHRwcl9lcnIoXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCIsXG4rXHRcdFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXG4gXHRcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6MzIuNTAzMjQ2OTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUxMjc4Njk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE92ZXJsYXlmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBtYW5hZ2luZyBvdmVybGF5IGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGRlZXBlci4gSSdsbCBlaXRoZXIgcmVhY2ggZm9yIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9yLCBtb3JlIGxpa2VseSwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgOTk3LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuIFRoaXMgaXMgYWxsIGFib3V0IHF1aWNrbHkgZXN0YWJsaXNoaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozOC4wMTYwMzcwMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3ZlcmxheWZzL3BhcmFtcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRcXHRcXHRcXHQgKiBpbiB0aGlzIGNvbmZsaWN0LlxcbiA5ODE6XFx0XFx0XFx0XFx0ICovXFxuIDk4MjpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJkaXNhYmxpbmcgbWV0YWNvcHkgZHVlIHRvIG5mc19leHBvcnQ9b25cXFxcblxcXCIpO1xcbiA5ODM6XFx0XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtZXRhY29weSA9IGZhbHNlO1xcbiA5ODQ6XFx0XFx0XFx0fVxcbiA5ODU6XFx0XFx0fVxcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXG4gOTg4OlxcdFxcdC8qIFJlc29sdmUgdXNlcnhhdHRyIC1cXHUwMDNlICFyZWRpcmVjdCBcXHUwMDI2XFx1MDAyNiAhbWV0YWNvcHkgZGVwZW5kZW5jeSAqL1xcbiA5ODk6XFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldXNlcnhhdHRyKSB7XFxuIDk5MDpcXHRcXHRcXHRpZiAoc2V0LnJlZGlyZWN0IFxcdTAwMjZcXHUwMDI2XFxuIDk5MTpcXHRcXHRcXHQgICAgY29uZmlnLVxcdTAwM2VyZWRpcmVjdF9tb2RlICE9IE9WTF9SRURJUkVDVF9OT0ZPTExPVykge1xcbiA5OTI6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIscmVkaXJlY3RfZGlyPSVzXFxcXG5cXFwiLFxcbiA5OTM6XFx0XFx0XFx0XFx0ICAgICAgIG92bF9yZWRpcmVjdF9tb2RlKGNvbmZpZykpO1xcbiA5OTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2VtZXRhY29weSBcXHUwMDI2XFx1MDAyNiBzZXQubWV0YWNvcHkpIHtcXG4gOTk3OlxcdFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxcXG5cXFwiKTtcXG4gOTk4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5OTk6XFx0XFx0XFx0fVxcbjEwMDA6XFx0XFx0XFx0aWYgKGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUpIHtcXG4xMDAxOlxcdFxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcXFxuXFxcIixcXG4xMDAyOlxcdFxcdFxcdFxcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XFxuMTAwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA0OlxcdFxcdFxcdH1cXG4xMDA1OlxcdFxcdFxcdC8qXFxuMTAwNjpcXHRcXHRcXHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXFxuMTAwNzpcXHRcXHRcXHQgKiBUaGlzIHNoYWxsIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgYXMgd2VsbDogdGhlc2VcXG4xMDA4OlxcdFxcdFxcdCAqIG9wdGlvbnMgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaWYgdXNlZCB0b2dldGhlciB3aXRoXFxuMTAwOTpcXHRcXHRcXHQgKiB1c2VyeGF0dHIuXFxuMTAxMDpcXHRcXHRcXHQgKi9cXG4xMDExOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlcmVkaXJlY3RfbW9kZSA9IE9WTF9SRURJUkVDVF9OT0ZPTExPVztcXG4xMDEyOlxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWV0YWNvcHkgPSBmYWxzZTtcXG4xMDEzOlxcdFxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0LypcXG4xMDE2OlxcdFxcdCAqIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSB0cnVzdGVkIHhhdHRyIGNhcGFiaWxpdHkgYW5kIGEgZmVhdHVyZSB3YXNcXG4xMDE3OlxcdFxcdCAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRoYXQgcmVxdWlyZXMgdGhlbS5cXG4xMDE4OlxcdFxcdCAqL1xcbjEwMTk6XFx0XFx0aWYgKCFjb25maWctXFx1MDAzZXVzZXJ4YXR0ciBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTozOC4wMTYyNDkwNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTYxNDE0ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBvdmVybGF5ZnMgUGFyYW1ldGVycyBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBpbmZsdWVuY2UgaG93IGBvdmVybGF5ZnNgIGJlaGF2ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgcmVsYXRlIHRvIG92ZXJsYXlmcyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGdvIGRpZyBhcm91bmQgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJvb2xlYW4gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHNwZWNpZmljIGZlYXR1cmVzIHdpdGhpbiBvdmVybGF5ZnMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gcGF0aHMgdGhhdCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0YWtlcy4gVGhhdCBraW5kIG9mIGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSB3aGF0IHNjZW5hcmlvcyBhcmUgcG9zc2libGUgd2l0aGluIHRoaXMgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo0Mi41Nzc2NjY2MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4MTQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9WRVJMQVlfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3ZlcmxheWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvb3ZlcmxheWZzL0tjb25maWc6Mjpjb25maWcgT1ZFUkxBWV9GU1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk92ZXJsYXkgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTQtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTU6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIHJlZGlyZWN0IGRpcmVjdG9yeSBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzozMTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMzItXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBmb2xsb3cgcmVkaXJlY3RzIGV2ZW4gaWYgcmVkaXJlY3RzIGFyZSB0dXJuZWQgb2ZmXFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNDUtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6NDY6Y29uZmlnIE9WRVJMQVlfRlNfSU5ERVhcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gaW5vZGVzIGluZGV4IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY0LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjY1OmNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gTkZTIGV4cG9ydCBmZWF0dXJlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05Mi1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo5Mzpjb25maWcgT1ZFUkxBWV9GU19YSU5PX0FVVE9cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05NC1cXHRib29sIFxcXCJPdmVybGF5ZnM6IGF1dG8gZW5hYmxlIGlub2RlIG51bWJlciBtYXBwaW5nXFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEwLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjExMTpjb25maWcgT1ZFUkxBWV9GU19NRVRBQ09QWVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gbWV0YWRhdGEgb25seSBjb3B5IHVwIGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEyOC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMjk6Y29uZmlnIE9WRVJMQVlfRlNfREVCVUdcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiB0dXJuIG9uIGV4dHJhIGRlYnVnZ2luZyBjaGVja3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQyLjY0MzQ4NTk1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzA2NzU2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkV4YW1pbmluZyBPdmVybGF5RlMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBvdmVybGF5ZnMgYWdhaW4sIGFuZCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEknbSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYGZzL292ZXJsYXlmcy9LY29uZmlnYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJsYXlmcyBjb2RlYmFzZSwgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgbGlrZSB2ZXJpdHkgc3VwcG9ydC4gSSdtIGZhaXJseSBjZXJ0YWluIEkndmUgcmV2aWV3ZWQgdGhpcyBmaWxlIGJlZm9yZSwgYnV0IGl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBlbnN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcnVjaWFsIG9yIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBkb3QgYWxsIHRoZSBpJ3MgYW5kIGNyb3NzIHRoZSB0J3MuIEl0J3MgYSBrZXkgZmlsZSBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDQuNjE0MTc0MzYyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL292ZXJsYXlmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE9WRVJMQVlfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBGU19TVEFDS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEVYUE9SVEZTXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIEFuIG92ZXJsYXkgZmlsZXN5c3RlbSBjb21iaW5lcyB0d28gZmlsZXN5c3RlbXMgLSBhbiAndXBwZXInIGZpbGVzeXN0ZW1cXG4gICA4OlxcdFxcdCAgYW5kIGEgJ2xvd2VyJyBmaWxlc3lzdGVtLiAgV2hlbiBhIG5hbWUgZXhpc3RzIGluIGJvdGggZmlsZXN5c3RlbXMsIHRoZVxcbiAgIDk6XFx0XFx0ICBvYmplY3QgaW4gdGhlICd1cHBlcicgZmlsZXN5c3RlbSBpcyB2aXNpYmxlIHdoaWxlIHRoZSBvYmplY3QgaW4gdGhlXFxuICAxMDpcXHRcXHQgICdsb3dlcicgZmlsZXN5c3RlbSBpcyBlaXRoZXIgaGlkZGVuIG9yLCBpbiB0aGUgY2FzZSBvZiBkaXJlY3RvcmllcyxcXG4gIDExOlxcdFxcdCAgbWVyZ2VkIHdpdGggdGhlICd1cHBlcicgb2JqZWN0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL292ZXJsYXlmcy5yc3RcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXFxuICAxNjpcXHRcXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcXG4gIDIwOlxcdFxcdCAgcmVkaXJlY3RzIHdoZW4gcmVuYW1pbmcgZGlyZWN0b3JpZXMgYnkgZGVmYXVsdC4gIEluIHRoaXMgY2FzZSBpdCBpc1xcbiAgMjE6XFx0XFx0ICBzdGlsbCBwb3NzaWJsZSB0byB0dXJuIG9mZiByZWRpcmVjdHMgZ2xvYmFsbHkgd2l0aCB0aGVcXG4gIDIyOlxcdFxcdCAgXFxcInJlZGlyZWN0X2Rpcj1vZmZcXFwiIG1vZHVsZSBvcHRpb24gb3Igb24gYSBmaWxlc3lzdGVtIGluc3RhbmNlIGJhc2lzXFxuICAyMzpcXHRcXHQgIHdpdGggdGhlIFxcXCJyZWRpcmVjdF9kaXI9b2ZmXFxcIiBtb3VudCBvcHRpb24uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgTm90ZSwgdGhhdCByZWRpcmVjdHMgYXJlIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlLiAgVGhhdCBpcywgbW91bnRpbmdcXG4gIDI2OlxcdFxcdCAgYW4gb3ZlcmxheSB3aGljaCBoYXMgcmVkaXJlY3RzIG9uIGEga2VybmVsIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXNcXG4gIDI3OlxcdFxcdCAgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcXG4gIDMyOlxcdFxcdGJvb2wgXFxcIk92ZXJsYXlmczogZm9sbG93IHJlZGlyZWN0cyBldmVuIGlmIHJlZGlyZWN0cyBhcmUgdHVybmVkIG9mZlxcXCJcXG4gIDMzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIERpc2FibGUgdGhpcyB0byBnZXQgYSBwb3NzaWJseSBtb3JlIHNlY3VyZSBjb25maWd1cmF0aW9uLCBidXQgdGhhdFxcbiAgMzc6XFx0XFx0ICBtaWdodCBub3QgYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIGtlcm5lbHMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUsIHRoZW4gaXQgaXMgc2FmZSBhbmRcXG4gIDQwOlxcdFxcdCAgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb3ZlcmxheWZzLnJzdFxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXFxuICA0NzpcXHRcXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gaW5vZGVzIGluZGV4IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCB0aGVuIG92ZXJsYXkgZmlsZXN5c3RlbXMgd2lsbCB1c2VcXG4gIDUxOlxcdFxcdCAgdGhlIGluZGV4IGRpcmVjdG9yeSB0byBtYXAgbG93ZXIgaW5vZGVzIHRvIHVwcGVyIGlub2RlcyBieSBkZWZhdWx0LlxcbiAgNTI6XFx0XFx0ICBJbiB0aGlzIGNhc2UgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gdHVybiBvZmYgaW5kZXggZ2xvYmFsbHkgd2l0aCB0aGVcXG4gIDUzOlxcdFxcdCAgXFxcImluZGV4PW9mZlxcXCIgbW9kdWxlIG9wdGlvbiBvciBvbiBhIGZpbGVzeXN0ZW0gaW5zdGFuY2UgYmFzaXMgd2l0aCB0aGVcXG4gIDU0OlxcdFxcdCAgXFxcImluZGV4PW9mZlxcXCIgbW91bnQgb3B0aW9uLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHQgIFRoZSBpbm9kZXMgaW5kZXggZmVhdHVyZSBwcmV2ZW50cyBicmVha2luZyBvZiBsb3dlciBoYXJkbGlua3Mgb24gY29weVxcbiAgNTc6XFx0XFx0ICB1cC5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBOb3RlLCB0aGF0IHRoZSBpbm9kZXMgaW5kZXggZmVhdHVyZSBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZS5cXG4gIDYwOlxcdFxcdCAgVGhhdCBpcywgbW91bnRpbmcgYW4gb3ZlcmxheSB3aGljaCBoYXMgYW4gaW5vZGVzIGluZGV4IG9uIGEga2VybmVsXFxuICA2MTpcXHRcXHQgIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcXG4gIDY2OlxcdFxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBORlMgZXhwb3J0IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gT1ZFUkxBWV9GU1xcbiAgNjg6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTX0lOREVYXFxuICA2OTpcXHRcXHRkZXBlbmRzIG9uICFPVkVSTEFZX0ZTX01FVEFDT1BZXFxuICA3MDpcXHRcXHRoZWxwXFxuICA3MTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxcbiAgNzI6XFx0XFx0ICB0aGUgaW5kZXggZGlyZWN0b3J5IHRvIGRlY29kZSBvdmVybGF5IE5GUyBmaWxlIGhhbmRsZXMgYnkgZGVmYXVsdC5cXG4gIDczOlxcdFxcdCAgSW4gdGhpcyBjYXNlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byB0dXJuIG9mZiBORlMgZXhwb3J0IHN1cHBvcnRcXG4gIDc0OlxcdFxcdCAgZ2xvYmFsbHkgd2l0aCB0aGUgXFxcIm5mc19leHBvcnQ9b2ZmXFxcIiBtb2R1bGUgb3B0aW9uIG9yIG9uIGEgZmlsZXN5c3RlbVxcbiAgNzU6XFx0XFx0ICBpbnN0YW5jZSBiYXNpcyB3aXRoIHRoZSBcXFwibmZzX2V4cG9ydD1vZmZcXFwiIG1vdW50IG9wdGlvbi5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0ICBUaGUgTkZTIGV4cG9ydCBmZWF0dXJlIGNyZWF0ZXMgYW4gaW5kZXggb24gY29weSB1cCBvZiBldmVyeSBmaWxlIGFuZFxcbiAgNzg6XFx0XFx0ICBkaXJlY3RvcnkuICBUaGlzIGZ1bGwgaW5kZXggaXMgdXNlZCB0byBkZXRlY3Qgb3ZlcmxheSBmaWxlc3lzdGVtc1xcbiAgNzk6XFx0XFx0ICBpbmNvbnNpc3RlbmNpZXMgb24gbG9va3VwLCBsaWtlIHJlZGlyZWN0IGZyb20gbXVsdGlwbGUgdXBwZXIgZGlycyB0b1xcbiAgODA6XFx0XFx0ICB0aGUgc2FtZSBsb3dlciBkaXIuICBUaGUgZnVsbCBpbmRleCBtYXkgaW5jdXIgc29tZSBvdmVyaGVhZCBvbiBtb3VudFxcbiAgODE6XFx0XFx0ICB0aW1lLCBlc3BlY2lhbGx5IHdoZW4gdmVyaWZ5aW5nIHRoYXQgZGlyZWN0b3J5IGZpbGUgaGFuZGxlcyBhcmUgbm90XFxuICA4MjpcXHRcXHQgIHN0YWxlLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIE5vdGUsIHRoYXQgdGhlIE5GUyBleHBvcnQgZmVhdHVyZSBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZS5cXG4gIDg1OlxcdFxcdCAgVGhhdCBpcywgbW91bnRpbmcgYW4gb3ZlcmxheSB3aGljaCBoYXMgYSBmdWxsIGluZGV4IG9uIGEga2VybmVsXFxuICA4NjpcXHRcXHQgIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIE1vc3QgdXNlcnMgc2hvdWxkIHNheSBOIGhlcmUgYW5kIGVuYWJsZSB0aGlzIGZlYXR1cmUgb24gYSBjYXNlLWJ5LVxcbiAgODk6XFx0XFx0ICBjYXNlIGJhc2lzIHdpdGggdGhlIFxcXCJuZnNfZXhwb3J0PW9uXFxcIiBtb3VudCBvcHRpb24uXFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdCAgU2F5IE4gdW5sZXNzIHlvdSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zZXF1ZW5jZXMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdGNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xcbiAgOTQ6XFx0XFx0Ym9vbCBcXFwiT3ZlcmxheWZzOiBhdXRvIGVuYWJsZSBpbm9kZSBudW1iZXIgbWFwcGluZ1xcXCJcXG4gIDk1OlxcdFxcdGRlZmF1bHQgblxcbiAgOTY6XFx0XFx0ZGVwZW5kcyBvbiBPVkVSTEFZX0ZTXFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuICA5ODpcXHRcXHRoZWxwXFxuICA5OTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4gb3ZlcmxheSBmaWxlc3lzdGVtcyB3aWxsIHVzZVxcbiAxMDA6XFx0XFx0ICB1bnVzZWQgaGlnaCBiaXRzIGluIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpbm9kZSBudW1iZXJzIHRvIG1hcCBhbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDQuNjE0MzU2NTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzAxNjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAuIFRpbWUgdG8gZGlnIGludG8gYGZzL292ZXJsYXlmcy9wYXJhbXMuY2AuIEkgd2FudCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGtpbmRzIG9mIGNoZWNrcyBpdCdzIHBlcmZvcm1pbmcsIGFuZCB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGxpZS4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IE92ZXJsYXlGUydzIHBhcmFtZXRlciB2YWxpZGF0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSB0byBmb2N1cyBhbnkgZnVydGhlciBhbmFseXNpcy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo0Ni40NDczNzQ5MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjk3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL292ZXJsYXlmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODQwPXZvaWQgb3ZsX2ZyZWVfZnMoc3RydWN0IG92bF9mcyAqb2ZzKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTg3NS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6ODc2OmludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtODc3LVxcdFxcdFxcdCBzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5oPTQwPXZvaWQgb3ZsX2ZyZWVfZnMoc3RydWN0IG92bF9mcyAqb2ZzKTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmg6NDE6aW50IG92bF9mc19wYXJhbXNfdmVyaWZ5KGNvbnN0IHN0cnVjdCBvdmxfZnNfY29udGV4dCAqY3R4LFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuaC00Mi1cXHRcXHRcXHQgc3RydWN0IG92bF9jb25maWcgKmNvbmZpZyk7XFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0xMzcxPXN0YXRpYyBpbnQgb3ZsX2ZpbGxfc3VwZXJfY3JlZHMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMTM3OS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzoxMzgwOlxcdGVyciA9IG92bF9mc19wYXJhbXNfdmVyaWZ5KGN0eCwgXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKTtcXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0xMzgxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQ2LjUzMTA3NzYxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQyNjQ1Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBPdmVybGF5RlMgYW5kIGB2ZXJpdHlfbW9kZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGB2ZXJpdHlfbW9kZWAgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIHBhcmFtZXRlcidzIGJlaGF2aW9yIGlzIGtleSB0byBbaW5zZXJ0IHlvdXIgZmllbGQncyByZWxhdGVkIHRhc2svcHJvYmxlbSBoZXJlIC0gZS5nLiwgb3B0aW1pemluZyBjb250YWluZXIgc2VjdXJpdHksIHRyb3VibGVzaG9vdGluZyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGF1ZGl0aW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZXRjLl0uIEkgbmVlZCB0byBncmFzcCBwcmVjaXNlbHkgaG93IGB2ZXJpdHlfbW9kZWAgaW5mbHVlbmNlcyB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtJ3MgaW50ZWdyaXR5IGFuZCBob3cgaXQncyBoYW5kbGVkIGR1cmluZyBtb3VudCBvcGVyYXRpb25zIGFuZCBmaWxlIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhlIHBhcmFtZXRlciBpcyBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBtZXRhZGF0YS9kYXRhIHN0cnVjdHVyZSBoYW5kbGluZy4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgb3ZlcmxheWZzIGZlYXR1cmVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgY29kZSB0byB1bmNvdmVyIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NDkuMzczNzI1NTkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4OTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpdHlfbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vdmVybGF5ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3ZlcmxheWZzL2NvcHlfdXAuYz0xMDI4PXN0YXRpYyBib29sIG92bF9uZWVkX21ldGFfY29weV91cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmMtMTA0Mi1cXHQvKiBGYWxsIGJhY2sgdG8gZnVsbCBjb3B5IGlmIG5vIGZzdmVyaXR5IG9uIHNvdXJjZSBkYXRhIGFuZCB3ZSByZXF1aXJlIHZlcml0eSAqL1xcbmZzL292ZXJsYXlmcy9jb3B5X3VwLmM6MTA0MzpcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL2NvcHlfdXAuYy0xMDQ0LVxcdFxcdHN0cnVjdCBwYXRoIGxvd2VyZGF0YTtcXG4tLVxcbmZzL292ZXJsYXlmcy9uYW1laS5jPTk1ND1zdGF0aWMgaW50IG92bF9tYXliZV92YWxpZGF0ZV92ZXJpdHkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYwLVxcbmZzL292ZXJsYXlmcy9uYW1laS5jOjk2MTpcXHRpZiAoIW9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlIHx8XFxuZnMvb3ZlcmxheWZzL25hbWVpLmMtOTYyLVxcdCAgICAhb3ZsX2lzX21ldGFjb3B5X2RlbnRyeShkZW50cnkpIHx8XFxuLS1cXG5mcy9vdmVybGF5ZnMvbmFtZWkuYy05NjYtXFx0aWYgKCFvdmxfdGVzdF9mbGFnKE9WTF9IQVNfRElHRVNULCBpbm9kZSkpIHtcXG5mcy9vdmVybGF5ZnMvbmFtZWkuYzo5Njc6XFx0XFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlID09IE9WTF9WRVJJVFlfUkVRVUlSRSkge1xcbmZzL292ZXJsYXlmcy9uYW1laS5jLTk2OC1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJtZXRhY29weSBmaWxlICclcGQnIGhhcyBubyBkaWdlc3Qgc3BlY2lmaWVkXFxcXG5cXFwiLFxcbi0tXFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oPTg9c3RydWN0IG92bF9jb25maWcge1xcbi0tXFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTEzLVxcdGludCByZWRpcmVjdF9tb2RlO1xcbmZzL292ZXJsYXlmcy9vdmxfZW50cnkuaDoxNDpcXHRpbnQgdmVyaXR5X21vZGU7XFxuZnMvb3ZlcmxheWZzL292bF9lbnRyeS5oLTE1LVxcdGJvb2wgaW5kZXg7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgb3ZsX3BhcmFtZXRlcl92ZXJpdHlbXSA9IHtcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNDpzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNjpcXHRyZXR1cm4gb3ZsX3BhcmFtZXRlcl92ZXJpdHlbY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZV0ubmFtZTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM3LX1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM4LVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9NjEyPXN0YXRpYyBpbnQgb3ZsX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtNjg0LVxcdGNhc2UgT3B0X3Zlcml0eTpcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6Njg1OlxcdFxcdGNvbmZpZy1cXHUwMDNldmVyaXR5X21vZGUgPSByZXN1bHQudWludF8zMjtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtNjg2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTg3Nj1pbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTY4LVxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5Njk6XFx0XFx0fSBlbHNlIGlmIChjb25maWctXFx1MDAzZXZlcml0eV9tb2RlKSB7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3MC1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTk3NC1cXHRcXHRcXHRwcl9pbmZvKFxcXCJkaXNhYmxpbmcgbmZzX2V4cG9ydCBkdWUgdG8gdmVyaXR5PSVzXFxcXG5cXFwiLFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzo5NzU6XFx0XFx0XFx0XFx0b3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NzYtXFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VuZnNfZXhwb3J0ID0gZmFsc2U7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTk5LVxcdFxcdH1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMDpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZSkge1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDAxLVxcdFxcdFxcdHByX2VycihcXFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLHZlcml0eT0lc1xcXFxuXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTAwMjpcXHRcXHRcXHQgICAgICAgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMDAzLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMjgtXFx0XFx0fVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDI5OlxcdFxcdGlmIChjb25maWctXFx1MDAzZXZlcml0eV9tb2RlKSB7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMzAtXFx0XFx0XFx0cHJfZXJyKFxcXCJ2ZXJpdHkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgdHJ1c3RlZCB4YXR0cnNcXFxcblxcXCIpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jPTEwNTQ9aW50IG92bF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNC1cXHRcXHRzZXFfcHV0cyhtLCBcXFwiLHVzZXJ4YXR0clxcXCIpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMTA1OlxcdGlmIChvZnMtXFx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSAhPSBvdmxfdmVyaXR5X21vZGVfZGVmKCkpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDYtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLHZlcml0eT0lc1xcXCIsXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDc6XFx0XFx0XFx0ICAgb3ZsX3Zlcml0eV9tb2RlKFxcdTAwMjZvZnMtXFx1MDAzZWNvbmZpZykpO1xcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA4LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYz0xMzcxPWludCBvdmxfdmFsaWRhdGVfdmVyaXR5KHN0cnVjdCBvdmxfZnMgKm9mcyxcXG4tLVxcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM4MC1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jOjEzODE6XFx0aWYgKCFvZnMtXFx1MDAzZWNvbmZpZy52ZXJpdHlfbW9kZSB8fFxcbmZzL292ZXJsYXlmcy91dGlsLmMtMTM4Mi1cXHQgICAgLyogVmVyaXR5IG9ubHkgd29ya3Mgb24gcmVndWxhciBmaWxlcyAqL1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzkwLVxcdGlmICgheGF0dHJfc2l6ZSB8fCAhbWV0YWNvcHlfZGF0YS5kaWdlc3RfYWxnbykge1xcbmZzL292ZXJsYXlmcy91dGlsLmM6MTM5MTpcXHRcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xMzkyLVxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIm1ldGFjb3B5IGZpbGUgJyVwZCcgaGFzIG5vIGRpZ2VzdCBzcGVjaWZpZWRcXFxcblxcXCIsXFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jPTE0MjY9aW50IG92bF9nZXRfdmVyaXR5X2RpZ2VzdChzdHJ1Y3Qgb3ZsX2ZzICpvZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpzcmMsXFxuLS1cXG5mcy9vdmVybGF5ZnMvdXRpbC5jLTE0MzAtXFxuZnMvb3ZlcmxheWZzL3V0aWwuYzoxNDMxOlxcdGlmICghb2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgfHwgIVNfSVNSRUcoZF9pbm9kZShzcmMtXFx1MDAzZWRlbnRyeSktXFx1MDAzZWlfbW9kZSkpXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDMyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ0LVxcdCAgICBXQVJOX09OX09OQ0UoZGlnZXN0X3NpemUgXFx1MDAzZSBGU19WRVJJVFlfTUFYX0RJR0VTVF9TSVpFKSkge1xcbmZzL292ZXJsYXlmcy91dGlsLmM6MTQ0NTpcXHRcXHRpZiAob2ZzLVxcdTAwM2Vjb25maWcudmVyaXR5X21vZGUgPT0gT1ZMX1ZFUklUWV9SRVFVSVJFKSB7XFxuZnMvb3ZlcmxheWZzL3V0aWwuYy0xNDQ2LVxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcImxvd2VyIGZpbGUgJyVwZCcgaGFzIG5vIGZzLXZlcml0eSBkaWdlc3RcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ1OjQ5LjQ0MjcyMTkxMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjYzNTQ4MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBPdmVybGF5RlMgUGFyYW1ldGVyIFZlcmlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoIGluIGBmcy9vdmVybGF5ZnMvcGFyYW1zLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYSBjb25mbGljdDogdGhlIGNvZGUgaXMgcmVqZWN0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgdHJ5IHRvIHVzZSBib3RoIGB1c2VyeGF0dHJgIGFuZCBhIG5vbi1gb2ZmYCBgdmVyaXR5X21vZGVgLiBJdCdzIHJldHVybmluZyBgLUVJTlZBTGAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdmVyaXR5IG5lZWRzIHRydXN0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyAoYHRydXN0ZWQub3ZlcmxheS4qYCksIGFuZCBgdXNlci4qYCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgdXNlcnhhdHRyYCkgZG9uJ3QgY3V0IGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNvZGUgcGF0aCBpcyBldmVuIHJlbGV2YW50IGluIGEgdHlwaWNhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBGb3J0dW5hdGVseSwgb3ZlcmxheWZzIGlzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZpbGVzeXN0ZW0gc3VwcG9ydCwgc28gYSBzaW1wbGUgYG1vdW50IC10IG92ZXJsYXkgLi4uYCBzaG91bGQgdHJpZ2dlciBpdCwgd2hpY2ggc3VnZ2VzdHMgeWVzLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93OiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgU2VjdGlvbiAzLCB0aGUgYW5zd2VyIGlzIG1vc3QgbGlrZWx5IHllcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGFuZCBtb2RpZnlpbmcgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBsb2dpYyBpbiBvdmVybGF5ZnMsIHdoaWNoIGlzIGEgKmNvcmUqIGZpbGVzeXN0ZW0gYW5kIFZGUyBkcml2ZXIuIFdlIGFyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBzeXN0ZW0uXG5cbkxldCdzIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCB0aGUgcmVxdWlyZW1lbnRzLiBZZXMsIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgaXMgaW5kZWVkIHJlYWNoYWJsZSB3aGVuIG1vdW50aW5nIG92ZXJsYXlmcyB3aXRoIGJvdGggYHVzZXJ4YXR0cmAgYW5kIGB2ZXJpdHlgIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IHRoZSBgT1ZFUkxBWV9GU2AgY29uZmlnIGlzIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIGRpcmVjdGx5LiBXZSBjYW4gZm9jdXMgc3ltYm9scyBvbiBgb3ZsX2ZzX3BhcmFtc192ZXJpZnlgIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYG92bF9maWxsX3N1cGVyX2NyZWRzYCBvciBgb3ZsX3BhcnNlX3BhcmFtYCwgYnV0IGBvdmxfZnNfcGFyYW1zX3ZlcmlmeWAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LlxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdmVybGF5ZnMgTWFrZWZpbGUganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBuZWVkZWQgdGhhdCBjb3VsZCBpbXBhY3QgcmVhY2hhYmlsaXR5LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZnV6emluZyBjYW1wYWlnbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODgzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo1My4xMDYyNzQ3NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzY0MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3ZlcmxheWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL292ZXJsYXlmcy9NYWtlZmlsZS01LVxcbmZzL292ZXJsYXlmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PVkVSTEFZX0ZTKSArPSBvdmVybGF5Lm9cXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTMuMTY1MDQ0NDM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzIyODQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgT3ZlcmxheUZTIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byB0aG9yb3VnaGx5IGF1ZGl0IHRoZSBgZnMvb3ZlcmxheWZzL01ha2VmaWxlYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGZpbGVzeXN0ZW1zLCBJIG5lZWQgdG8gZ2V0IGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGlzIGJ1aWx0LCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZnJhbmtseSwgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgYSBwcm9ibGVtLiBUaGlzIGlzIHRoZSBjZW50cmFsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGEgcHJldHR5IGNyaXRpY2FsIHBpZWNlIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBzbyBubyBhc3N1bXB0aW9ucywganVzdCBhIGxpbmUtYnktbGluZSBjaGVjayB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgYmUgc3VyZSBpdCBzdGlsbCBtYWtlcyBzZW5zZS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgaW5jbHVzaW9uIG9mIG90aGVyIG1ha2VmaWxlcyBhbmQgdGhlIHJ1bGVzIHNwZWNpZmljIHRvIHRoaXMgZmlsZXN5c3RlbS4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzLCBvciBkYW5nZXJvdXMgZ290Y2hhcyBsdXJraW5nIGluIHRoZSBkZXRhaWxzPyBJJ2xsIGFsc28gYmUgZm9jdXNpbmcgb24gaG93IHRoZSBtb2R1bGVzIGFyZSBidWlsdCBhbmQgbGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTUuMzM3MzMyNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3ZlcmxheWZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfT1ZFUkxBWV9GUykgKz0gb3ZlcmxheS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTUuMzM3MzkyNDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxOTIyNjgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3ZlcmxheUZTIFBhcmFtZXRlciBWZXJpZmljYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhlIGBPVkVSTEFZX0ZTYCBjb25maWcgaXMgdGhlIGtleSBoZXJlIOKAkyBpdCdzIGFsbCB0aGF0J3MgbmVlZGVkIHRvIGJ1aWxkIGBwYXJhbXMuY2AuIExldCdzIGRpdmUgaW50byBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG92bF9mc19wYXJhbXNfdmVyaWZ5YC4gVGhhdCdzIHRoZSBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHNuZWFreSBzeW1ib2xzIG9yIGNvbmZpZ3MgaW52b2x2ZWQuIFllcCwganVzdCBgT1ZFUkxBWV9GU2AgKG5vIGBDT05GSUdfYCBwcmVmaXgsIGdvdCBpdCkuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYG92bF9mc19wYXJhbXNfdmVyaWZ5YCBub3cuXG5cblRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgYmVpbmcgc2V0IGlzIGltcG9ydGFudC4gVGhlIHJlYXNvbiBiZWhpbmQgdGhpcyBpcyBzaWduaWZpY2FudDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHBhcmFtZXRlciB2ZXJpZmljYXRpb24sIHNwZWNpZmljYWxseSByZWplY3RpbmcgY29uZmxpY3Rpbmcgb3B0aW9ucyBsaWtlIGB1c2VyeGF0dHJgIGFuZCBgdmVyaXR5YCBkdXJpbmcgb3ZlcmxheWZzIG1vdW50IG9wdGlvbiBwcm9jZXNzaW5nICp3aXRoaW4qIGBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpYC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gb3ZlcmxheWZzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgZnV6emluZyBpcyB2YWx1YWJsZS5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIGFuYWx5c2lzLCBzbyBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDcxLCJPdXRwdXRUb2tlbnMiOjg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNTI5NjYzMDAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTE1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZsX2ZzX3BhcmFtc192ZXJpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvdmVybGF5ZnMgbW91bnQgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBpbiBvdmxfZnNfcGFyYW1zX3ZlcmlmeSgpIHRvIHJlamVjdCBjb25mbGljdGluZyBjb21iaW5hdGlvbnMgb2YgdXNlcnhhdHRyIGFuZCB2ZXJpdHkgbW91bnQgb3B0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUga2VybmVsIGNvZGUgd2l0aGluIHRoZSBvdmVybGF5IGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92bF9mc19wYXJhbXNfdmVyaWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb3ZlcmxheWZzIG1vdW50IHBhcmFtZXRlciB2ZXJpZmljYXRpb24gaW4gb3ZsX2ZzX3BhcmFtc192ZXJpZnkoKSB0byByZWplY3QgY29uZmxpY3RpbmcgY29tYmluYXRpb25zIG9mIHVzZXJ4YXR0ciBhbmQgdmVyaXR5IG1vdW50IG9wdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHdpdGhpbiB0aGUgb3ZlcmxheSBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwODo0NTo1OC42OTA3ODk5MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTgxMDQwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNjkxNTI3MDcyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQxODAyOTc3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtb3VudCBvcHRpb24gdmVyaWZpY2F0aW9uIGNoZWNrIGluIE92ZXJsYXlGUyAoZnMvb3ZlcmxheWZzL3BhcmFtcy5jKSB0byByZWplY3QgY29uZmxpY3Rpbmcgb3B0aW9ucyB3aGVuIGJvdGggJ3VzZXJ4YXR0cicgYW5kICd2ZXJpdHknIGFyZSBlbmFibGVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MzQyMzcxODNlN2FiZGE5NTUwNjY5MmFiN2M3NTBjMDgxY2RjOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwODo0NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuYyBiL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuaW5kZXggYzkzZmNhYTQ1ZDRhMy4uMjlkZmMxNmZlY2M5YyAxMDA2NDRcbi0tLSBhL2ZzL292ZXJsYXlmcy9wYXJhbXMuY1xuKysrIGIvZnMvb3ZlcmxheWZzL3BhcmFtcy5jXG5AQCAtOTk3LDYgKzk5NywxMSBAQCBpbnQgb3ZsX2ZzX3BhcmFtc192ZXJpZnkoY29uc3Qgc3RydWN0IG92bF9mc19jb250ZXh0ICpjdHgsXG4gXHRcdFx0cHJfZXJyKFwiY29uZmxpY3Rpbmcgb3B0aW9uczogdXNlcnhhdHRyLG1ldGFjb3B5PW9uXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdGlmIChjb25maWctXHUwMDNldmVyaXR5X21vZGUpIHtcbitcdFx0XHRwcl9lcnIoXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxuXCIsXG4rXHRcdFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBTaWxlbnRseSBkaXNhYmxlIGRlZmF1bHQgc2V0dGluZyBvZiByZWRpcmVjdCBhbmQgbWV0YWNvcHkuXG4gXHRcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDU6NTguNjkxNTI4NTYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MzE4NzkzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPdmVybGF5RlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZnMvb3ZlcmxheWZzL3BhcmFtcy5jYC4gIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgaXMgY29uY2VybmluZyBsaW5lIDk5Nywgc28gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dC4gQWgsIHRoZXJlIGl0IGlzIOKAkyBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGEgY2hlY2sgZm9yIGNvbmZsaWN0aW5nIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbmV3IGB2ZXJpdHlfbW9kZWAgc2V0dGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGFuIGVycm9yIGNoZWNrOiBpZiBgdXNlcnhhdHRyYCBpcyBlbmFibGVkICphbmQqIGB2ZXJpdHlfbW9kZWAgaXMgc2V0ICh0byBhbnl0aGluZywgYWNjb3JkaW5nIHRvIHRoZSBjb2RlKSwgaXQnbGwgdGhyb3cgYW4gYC1FSU5WQUxgLiAgVGhlIGVycm9yIG1lc3NhZ2UgY2xlYXJseSBzdGF0ZXMgdGhlIGNvbmZsaWN0LiBJdCdzIHVzaW5nIGBvdmxfdmVyaXR5X21vZGUoKWAgdG8gZ2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZXJpdHkgbW9kZSwgd2hpY2ggaXMgbmljZS4gU2VlbXMgbGlrZSBhIGdvb2QgcHJhY3RpY2UgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaGVyZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgcHJldmVudGluZyB0aGUgY29tYmluYXRpb24gb2YgYHVzZXJ4YXR0cmAgYW5kIGFueSBgdmVyaXR5YCBzZXR0aW5nLiBJIGFzc3VtZSB0aGVyZSdzIGFuIGluaGVyZW50IGluY29tcGF0aWJpbGl0eSB0aGVyZSwgbGlrZWx5IHN0ZW1taW5nIGZyb20gaG93IG92ZXJsYXlmcyBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGhvdyB2ZXJpdHkgbW9kZSBpbnRlcmFjdHMgd2l0aCB0aGF0LiAgTG9va3MgbGlrZSBpdCBpcyBwcm9iYWJseSBhbiBpbnRlbmRlZCBkZXNpZ24gcmVzdHJpY3Rpb24sIHNpbmNlIHRoZSBjb25mbGljdCBpcyBub3QgXCJmaXhlZFwiIGJ5IGFueSBjb2RlIGNoYW5nZXMuXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNvbmZsaWN0LCBidXQgdGhpcyBwYXRjaCBzZWVtcyB3ZWxsLXBsYWNlZCBhbmQgY29ycmVjdGx5IGltcGxlbWVudGVkLCBiYXNlZCBvbiB0aGlzIHNuaXBwZXQuIEl04oCZcyBhIGdvb2QsIGNsZWFuIGNoZWNrIHRoYXQgd2lsbCBoZWxwIHByZXZlbnQgdXNlciBtaXNjb25maWd1cmF0aW9ucy4gTm93IEkgbmVlZCB0byByZXZpZXcgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIG90aGVyIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjb25mbGljdCBleGlzdHMgYW5kIHdoZXRoZXIgdGhpcyBhcHByb2FjaCB0byBoYW5kbGUgaXQgaXMgdGhlIGJlc3Qgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDQuMzIzNDEyMzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdFxcdFxcdCAqIGluIHRoaXMgY29uZmxpY3QuXFxuIDk4MTpcXHRcXHRcXHRcXHQgKi9cXG4gOTgyOlxcdFxcdFxcdFxcdHByX2luZm8oXFxcImRpc2FibGluZyBtZXRhY29weSBkdWUgdG8gbmZzX2V4cG9ydD1vblxcXFxuXFxcIik7XFxuIDk4MzpcXHRcXHRcXHRcXHRjb25maWctXFx1MDAzZW1ldGFjb3B5ID0gZmFsc2U7XFxuIDk4NDpcXHRcXHRcXHR9XFxuIDk4NTpcXHRcXHR9XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcbiA5ODg6XFx0XFx0LyogUmVzb2x2ZSB1c2VyeGF0dHIgLVxcdTAwM2UgIXJlZGlyZWN0IFxcdTAwMjZcXHUwMDI2ICFtZXRhY29weSBkZXBlbmRlbmN5ICovXFxuIDk4OTpcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V1c2VyeGF0dHIpIHtcXG4gOTkwOlxcdFxcdFxcdGlmIChzZXQucmVkaXJlY3QgXFx1MDAyNlxcdTAwMjZcXG4gOTkxOlxcdFxcdFxcdCAgICBjb25maWctXFx1MDAzZXJlZGlyZWN0X21vZGUgIT0gT1ZMX1JFRElSRUNUX05PRk9MTE9XKSB7XFxuIDk5MjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcImNvbmZsaWN0aW5nIG9wdGlvbnM6IHVzZXJ4YXR0cixyZWRpcmVjdF9kaXI9JXNcXFxcblxcXCIsXFxuIDk5MzpcXHRcXHRcXHRcXHQgICAgICAgb3ZsX3JlZGlyZWN0X21vZGUoY29uZmlnKSk7XFxuIDk5NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTk1OlxcdFxcdFxcdH1cXG4gOTk2OlxcdFxcdFxcdGlmIChjb25maWctXFx1MDAzZW1ldGFjb3B5IFxcdTAwMjZcXHUwMDI2IHNldC5tZXRhY29weSkge1xcbiA5OTc6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsbWV0YWNvcHk9b25cXFxcblxcXCIpO1xcbiA5OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk5OTpcXHRcXHRcXHR9XFxuMTAwMDpcXHRcXHRcXHRpZiAoY29uZmlnLVxcdTAwM2V2ZXJpdHlfbW9kZSkge1xcbjEwMDE6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbjEwMDI6XFx0XFx0XFx0XFx0ICAgICAgIG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcXG4xMDAzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMDQ6XFx0XFx0XFx0fVxcbjEwMDU6XFx0XFx0XFx0LypcXG4xMDA2OlxcdFxcdFxcdCAqIFNpbGVudGx5IGRpc2FibGUgZGVmYXVsdCBzZXR0aW5nIG9mIHJlZGlyZWN0IGFuZCBtZXRhY29weS5cXG4xMDA3OlxcdFxcdFxcdCAqIFRoaXMgc2hhbGwgYmUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBhcyB3ZWxsOiB0aGVzZVxcbjEwMDg6XFx0XFx0XFx0ICogb3B0aW9ucyBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpZiB1c2VkIHRvZ2V0aGVyIHdpdGhcXG4xMDA5OlxcdFxcdFxcdCAqIHVzZXJ4YXR0ci5cXG4xMDEwOlxcdFxcdFxcdCAqL1xcbjEwMTE6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VyZWRpcmVjdF9tb2RlID0gT1ZMX1JFRElSRUNUX05PRk9MTE9XO1xcbjEwMTI6XFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtZXRhY29weSA9IGZhbHNlO1xcbjEwMTM6XFx0XFx0fVxcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHQvKlxcbjEwMTY6XFx0XFx0ICogRmFpbCBpZiB3ZSBkb24ndCBoYXZlIHRydXN0ZWQgeGF0dHIgY2FwYWJpbGl0eSBhbmQgYSBmZWF0dXJlIHdhc1xcbjEwMTc6XFx0XFx0ICogZXhwbGljaXRseSByZXF1ZXN0ZWQgdGhhdCByZXF1aXJlcyB0aGVtLlxcbjEwMTg6XFx0XFx0ICovXFxuMTAxOTpcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNldXNlcnhhdHRyIFxcdTAwMjZcXHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA0LjMyMzU5NTUzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk1NjY4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqSW52ZXN0aWdhdGluZyBgb3ZsX3Zlcml0eV9tb2RlKGNvbmZpZylgKipcblxuTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24sIGBvdmxfdmVyaXR5X21vZGUoY29uZmlnKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBkb2luZywgYW5kIHRoZSBiZXN0IHdheSB0byBzdGFydCBpcyB0byBsb29rIGF0IGl0cyBpbnB1dCwgd2hpY2ggYXBwZWFycyB0byBiZSBgY29uZmlnYC4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCBgY29uZmlnYCByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyB0byB0aGUgZnVuY3Rpb24uXG5cblRoZSBuZXh0IHRoaW5nIEknZCBsaWtlIHRvIGRvLCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBpcyBsb29rIGF0IGBjb25maWctXHUwMDNldmVyaXR5X21vZGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSB0aGlzIGZpZWxkIGlzLiBJcyBpdCBhbiBlbnVtPyBBbiBpbnRlZ2VyPyBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgdHlwZSBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZGljdGF0ZXMgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGlzIHBpZWNlIG9mIHRoZSBgY29uZmlnYCBkYXRhLiBUaGF0J2xsIGxldCBtZSB1bmRlcnN0YW5kIHdoYXQgaXQgbWVhbnMgaW4gY29udGV4dCBvZiB0aGUgb3ZlcmxheSBmaWxlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDYuNDE5MjY2ODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NTc1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZsX3Zlcml0eV9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL292ZXJsYXlmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgb3ZsX3BhcmFtZXRlcl92ZXJpdHlbXSA9IHtcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMzMtXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjEzNDpzdGF0aWMgY29uc3QgY2hhciAqb3ZsX3Zlcml0eV9tb2RlKHN0cnVjdCBvdmxfY29uZmlnICpjb25maWcpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEzNS17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTM4LVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMzk6c3RhdGljIGludCBvdmxfdmVyaXR5X21vZGVfZGVmKHZvaWQpXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTE0MC17XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9ODc2PWludCBvdmxfZnNfcGFyYW1zX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgb3ZsX2ZzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy05NzQtXFx0XFx0XFx0cHJfaW5mbyhcXFwiZGlzYWJsaW5nIG5mc19leHBvcnQgZHVlIHRvIHZlcml0eT0lc1xcXFxuXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6OTc1OlxcdFxcdFxcdFxcdG92bF92ZXJpdHlfbW9kZShjb25maWcpKTtcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtOTc2LVxcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbmZzX2V4cG9ydCA9IGZhbHNlO1xcbi0tXFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDEtXFx0XFx0XFx0cHJfZXJyKFxcXCJjb25mbGljdGluZyBvcHRpb25zOiB1c2VyeGF0dHIsdmVyaXR5PSVzXFxcXG5cXFwiLFxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYzoxMDAyOlxcdFxcdFxcdCAgICAgICBvdmxfdmVyaXR5X21vZGUoY29uZmlnKSk7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTEwMDMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM9MTA1ND1pbnQgb3ZsX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL292ZXJsYXlmcy9wYXJhbXMuYy0xMTA0LVxcdFxcdHNlcV9wdXRzKG0sIFxcXCIsdXNlcnhhdHRyXFxcIik7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jOjExMDU6XFx0aWYgKG9mcy1cXHUwMDNlY29uZmlnLnZlcml0eV9tb2RlICE9IG92bF92ZXJpdHlfbW9kZV9kZWYoKSlcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmMtMTEwNi1cXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsdmVyaXR5PSVzXFxcIixcXG5mcy9vdmVybGF5ZnMvcGFyYW1zLmM6MTEwNzpcXHRcXHRcXHQgICBvdmxfdmVyaXR5X21vZGUoXFx1MDAyNm9mcy1cXHUwMDNlY29uZmlnKSk7XFxuZnMvb3ZlcmxheWZzL3BhcmFtcy5jLTExMDgtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA2LjUzNjEyOTc1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4NTEyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBvdmxfdmVyaXR5X21vZGVgIGFuZCBgb3ZsX3BhcmFtZXRlcl92ZXJpdHlgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvdmVybGF5IGZpbGVzeXN0ZW0gdmVyaXR5IHNldHRpbmdzIHdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBjb2RlIHRoYXQgZGVmaW5lcyBgb3ZsX3Zlcml0eV9tb2RlYCBhbmQgYG92bF9wYXJhbWV0ZXJfdmVyaXR5YC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTI3IOKAkyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9ucyB0aGVtc2VsdmVzIHdpbGwgb2ZmZXIgYSBjbGVhciBqdW1waW5nLW9mZiBwb2ludCBmb3IgdHJhY2luZyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGxhcmdlciBvdmVybGF5ZnMgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGdyaXAgb24gaG93IHRoZXNlIHBhcnRpY3VsYXIgc2V0dGluZ3MgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBmaWxlIGludGVncml0eSBtZWNoYW5pc21zIG9mIG92ZXJsYXlmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA4OjQ2OjA4LjI0NDY0NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL292ZXJsYXlmcy9wYXJhbXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjU6XFx0fVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfdmVyaXR5W10gPSB7XFxuIDEyODpcXHRcXHR7IFxcXCJvZmZcXFwiLFxcdE9WTF9WRVJJVFlfT0ZGICAgICB9LFxcbiAxMjk6XFx0XFx0eyBcXFwib25cXFwiLFxcdFxcdE9WTF9WRVJJVFlfT04gICAgICB9LFxcbiAxMzA6XFx0XFx0eyBcXFwicmVxdWlyZVxcXCIsXFx0T1ZMX1ZFUklUWV9SRVFVSVJFIH0sXFxuIDEzMTpcXHRcXHR7fVxcbiAxMzI6XFx0fTtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0c3RhdGljIGNvbnN0IGNoYXIgKm92bF92ZXJpdHlfbW9kZShzdHJ1Y3Qgb3ZsX2NvbmZpZyAqY29uZmlnKVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0cmV0dXJuIG92bF9wYXJhbWV0ZXJfdmVyaXR5W2NvbmZpZy1cXHUwMDNldmVyaXR5X21vZGVdLm5hbWU7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyBpbnQgb3ZsX3Zlcml0eV9tb2RlX2RlZih2b2lkKVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0cmV0dXJuIE9WTF9WRVJJVFlfT0ZGO1xcbiAxNDI6XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIG92bF9wYXJhbWV0ZXJfZnN5bmNbXSA9IHtcXG4gMTQ1OlxcdFxcdHsgXFxcInZvbGF0aWxlXFxcIixcXHRPVkxfRlNZTkNfVk9MQVRJTEUgfSxcXG4gMTQ2OlxcdFxcdHsgXFxcImF1dG9cXFwiLFxcdE9WTF9GU1lOQ19BVVRPICAgICB9LFxcbiAxNDc6XFx0XFx0eyBcXFwic3RyaWN0XFxcIixcXHRPVkxfRlNZTkNfU1RSSUNUICAgfSxcXG4gMTQ4OlxcdFxcdHt9XFxuIDE0OTpcXHR9O1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgY29uc3QgY2hhciAqb3ZsX2ZzeW5jX21vZGUoc3RydWN0IG92bF9jb25maWcgKmNvbmZpZylcXG4gMTUyOlxcdHtcXG4gMTUzOlxcdFxcdHJldHVybiBvdmxfcGFyYW1ldGVyX2ZzeW5jW2NvbmZpZy1cXHUwMDNlZnN5bmNfbW9kZV0ubmFtZTtcXG4gMTU0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MDguMjQ0Nzc0ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyNzAxMjA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPdmVybGF5RlMgUGF0Y2ggQW5hbHlzaXM6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MganVzdCBhZGRpbmcgYSBzYW5pdHkgY2hlY2sgdG8gdGhlIE92ZXJsYXlGUyBtb3VudCBvcHRpb24gcGFyc2VyLiBTcGVjaWZpY2FsbHksIGl0J3MgcHJldmVudGluZyB0aGUgc2ltdWx0YW5lb3VzIHVzZSBvZiBgdXNlcnhhdHRyYCBhbmQgYW55IGZvcm0gb2YgYHZlcml0eWAuIFRoZSBjb2RlIGlzIHNpbXBsZSBlbm91Z2g6IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgaXQgdGhyb3dzIGFuIGVycm9yIGFuZCByZWplY3RzIHRoZSBtb3VudC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciB1cyBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IEFmdGVyIGEgcXVpY2sgbG9vaywgdGhlIGFuc3dlciBpcyBhIGZpcm0gbm8uIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9uIHRoZSBzdGFjayBvciBoZWFwLCBubyBtb2RpZmljYXRpb25zIHRvIGFueSBwYXRocyB0aGF0IGNvdWxkIGxlYWsga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgY3J1Y2lhbGx5LCBpdCdzIG5vdCByZWFkaW5nIG9yIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgY29uZmlnYCBzdHJ1Y3R1cmUsIHdoaWNoIGhvbGRzIHRoZSBtb3VudCBvcHRpb25zLCBpcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBPdmVybGF5RlMgYGZzX2NvbnRleHRgIHNldHVwIGFuZCBpcyBpbml0aWFsaXplZCB0byBkZWZhdWx0IHZhbHVlcy4gSXQncyBzaW1wbHkgdmFsaWRhdGluZyBwYXJhbWV0ZXJzIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgb3IgbW91bnQgb3B0aW9uIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzbid0IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBhdGNoIGlzIGV4dHJlbWVseSB0YXJnZXRlZCBhbmQgZm9jdXNlZCBvbiB2YWxpZGF0aW5nIGlucHV0LCBzbyBhbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIGludG8gYSBkaWZmZXJlbnQgY2F0ZWdvcnkuXG5cblNvLCBsZXQncyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OiBOZWVkc0tNU0FOPyBGYWxzZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogVGhpcyBwYXRjaCBqdXN0IHZhbGlkYXRlcyB0aGUgbW91bnQgb3B0aW9ucyB3aXRoaW4gdGhlIE92ZXJsYXlGUyBjb2RlLiBJdCByZWplY3RzIHNwZWNpZmljIHBhcmFtZXRlciBjb21iaW5hdGlvbnMsIHdpdGhvdXQgYWxsb2NhdGlvbiBvciB1c2VyLXNwYWNlIGV4cG9zdXJlLlxuXG5BbHJpZ2h0LCBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjUsIk91dHB1dFRva2VucyI6MTIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDg6NDY6MTIuODcxNzkxNTQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbW91bnQgb3B0aW9uIHZlcmlmaWNhdGlvbiBjaGVjayBpbiBPdmVybGF5RlMgKGZzL292ZXJsYXlmcy9wYXJhbXMuYykgdG8gcmVqZWN0IGNvbmZsaWN0aW5nIG9wdGlvbnMgd2hlbiBib3RoICd1c2VyeGF0dHInIGFuZCAndmVyaXR5JyBhcmUgZW5hYmxlZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1vdW50IG9wdGlvbiB2ZXJpZmljYXRpb24gY2hlY2sgaW4gT3ZlcmxheUZTIChmcy9vdmVybGF5ZnMvcGFyYW1zLmMpIHRvIHJlamVjdCBjb25mbGljdGluZyBvcHRpb25zIHdoZW4gYm90aCAndXNlcnhhdHRyJyBhbmQgJ3Zlcml0eScgYXJlIGVuYWJsZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlnftt[1] Phase: Succeeded StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 08:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 08:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2] Phase: Succeeded StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 08:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 08:46:24 +0000 UTC FinishedAt: 2026-09-04 08:46:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlnftt/series-workflowlnftt-convert-artifact-405841887/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 08:46:34 +0000 UTC FinishedAt: 2026-09-04 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 08:46:34 +0000 UTC FinishedAt: 2026-09-04 09:02:44 +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:*20e5e83a-b184-45c9-a82b-da754a82d994,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-workflowlnftt/series-workflowlnftt-convert-artifact-405841887/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": "1dab7aee-5a82-4dcc-9378-61d2cd099404", "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-workflowlnftt/series-workflowlnftt-build-action-2772667621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 08:46:34 +0000 UTC FinishedAt: 2026-09-04 09:02:34 +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:*20e5e83a-b184-45c9-a82b-da754a82d994,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-workflowlnftt/series-workflowlnftt-convert-artifact-405841887/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": "1dab7aee-5a82-4dcc-9378-61d2cd099404", "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-workflowlnftt/series-workflowlnftt-build-action-2772667621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 09:02:44 +0000 UTC FinishedAt: 2026-09-04 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 09:02:44 +0000 UTC FinishedAt: 2026-09-04 09:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 09:02:44 +0000 UTC FinishedAt: 2026-09-04 09:02:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 09:02:44 +0000 UTC FinishedAt: 2026-09-04 09:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlnftt/series-workflowlnftt-convert-artifact-2990459758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 09:02:55 +0000 UTC FinishedAt: 2026-09-04 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 09:02:55 +0000 UTC FinishedAt: 2026-09-04 09:04:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1dab7aee-5a82-4dcc-9378-61d2cd099404,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-workflowlnftt/series-workflowlnftt-build-action-2772667621/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-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 09:05:07 +0000 UTC FinishedAt: 2026-09-04 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 09:05:07 +0000 UTC FinishedAt: 2026-09-04 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 09:05:07 +0000 UTC FinishedAt: 2026-09-04 09:21:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 09:05:07 +0000 UTC FinishedAt: 2026-09-04 09:21:40 +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:*20e5e83a-b184-45c9-a82b-da754a82d994,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-workflowlnftt/series-workflowlnftt-convert-artifact-2990459758/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": "d2cf4ccf-ef50-4a00-ac6c-526a258829ba", "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-workflowlnftt/series-workflowlnftt-build-action-2825428098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 09:05:07 +0000 UTC FinishedAt: 2026-09-04 09:21:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*20e5e83a-b184-45c9-a82b-da754a82d994,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-workflowlnftt/series-workflowlnftt-convert-artifact-2990459758/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": "d2cf4ccf-ef50-4a00-ac6c-526a258829ba", "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-workflowlnftt/series-workflowlnftt-build-action-2825428098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 09:21:40 +0000 UTC FinishedAt: 2026-09-04 09:21:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 09:21:40 +0000 UTC FinishedAt: 2026-09-04 09:21:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 09:21:40 +0000 UTC FinishedAt: 2026-09-04 09:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 09:21:40 +0000 UTC FinishedAt: 2026-09-04 09:23:20 +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:*d2cf4ccf-ef50-4a00-ac6c-526a258829ba,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-workflowlnftt/series-workflowlnftt-build-action-2825428098/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-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +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":["ovl_fs_params_verify"],"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:*1dab7aee-5a82-4dcc-9378-61d2cd099404,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2cf4ccf-ef50-4a00-ac6c-526a258829ba,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-workflowlnftt/series-workflowlnftt-build-action-2772667621/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-workflowlnftt/series-workflowlnftt-build-action-2825428098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 09:23:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 09:23:35 +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":["ovl_fs_params_verify"],"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-workflowlnftt/series-workflowlnftt-convert-artifact-1132337427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 09:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 09:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 09:23:30 +0000 UTC FinishedAt: 2026-09-04 09:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 09:23:40 +0000 UTC FinishedAt: 2026-09-04 12:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlnftt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ovl_fs_params_verify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVERLAY_FS"],"series_id":"229cbe2b-1d74-4e22-886e-aaa836afd348","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 09:23:40 +0000 UTC FinishedAt: 2026-09-04 12:29:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1dab7aee-5a82-4dcc-9378-61d2cd099404,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2cf4ccf-ef50-4a00-ac6c-526a258829ba,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-workflowlnftt/series-workflowlnftt-build-action-2772667621/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-workflowlnftt/series-workflowlnftt-build-action-2825428098/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-workflowlnftt/series-workflowlnftt-convert-artifact-1132337427/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,}