Name: series-workflowk59wk Phase: Succeeded StartedAt: 2026-08-31 12:01:31 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[0] Phase: Succeeded StartedAt: 2026-08-31 12:01:31 +0000 UTC FinishedAt: 2026-08-31 12:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 12:01:31 +0000 UTC FinishedAt: 2026-08-31 12:48:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f62a9b82700c718cdf619fb36aaab31015ff87eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f62a9b82700c718cdf619fb36aaab31015ff87eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_EVENTS" ], "series_id": "a53e4eb9-57cd-4f3d-a081-873d90cb628a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "btf_type_snprintf_show", "btf_type_seq_show_flags", "bpf_snprintf_btf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93JiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX3NlcV9zaG93X2ZsYWdzJiMzNDssCiAgICAmIzM0O2JwZl9zbnByaW50Zl9idGYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggOTFiOGNlNzdmNjk5YS4uM2NmMzVlZTQ5YzEwMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC0yOTExLDE0ICYjNDM7MjkxMSwzMCBAQCBzdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRlbHNlXG4gXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuIFxuLVx0YnRmX3R5cGVfb3BzKHQpLVx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXCYjMzQ7Y29uc3Qgdm9pZFwmIzM0OyksIHdoaWNoXG4mIzQzO1x0ICogaGFzIG5vIHNob3cgb3AgKGtpbmRfb3BzW0JURl9LSU5EX1VOS05dIGlzIE5VTEwpLiBQcmludCBhIHBsYWNlaG9sZGVyXG4mIzQzO1x0ICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFidGZfdHlwZV9vcHModCkpXG4mIzQzO1x0XHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuIFx0XHRcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXG4gXHRcdFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcbiB7XG4tXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFx1MDAyNnR5cGVfaWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4mIzQzO1x0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxuJiM0MztcdCAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnRmLVx1MDAzZXJlc29sdmVkX2lkcylcbiYjNDM7XHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0eXBlX2lkKTtcbiBcbiBcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi40MzEyMzQyNDE4M2M3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtNTMwLDYgJiM0Mzs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbiYjNDM7XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuJiM0MztcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMzExMCw2ICYjNDM7MzExNCwxMCBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbiYjNDM7XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuJiM0MztcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgJiM0MzsxLDgyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgaGFzaCBtYXAgd2l0aCBhIGtleS1sZXNzIEJURiAoYnRmX2tleV90eXBlX2lkID09IDApIHVzZWQgdG8gTlVMTC1kZXJlZiBpblxuJiM0MzsgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLlxuJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuJiM0MzsgKiBwaW4tYW5kLXJlYWQgYmVsb3cgZGVsaWJlcmF0ZWx5IHdhbGtzIHRoYXQgYnBmZnMgZHVtcCBwYXRoLCBzbyBpdCBkb3VibGVzXG4mIzQzOyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyXG4mIzQzOyAqIHBhbmljX29uX29vcHMpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMpO1xuJiM0MztcdGNvbnN0IGNoYXIgKnBhdGggPSBcJiMzNDsvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwmIzM0OztcbiYjNDM7XHRfX3UzMiBrZXkgPSAxLCB2YWwgPSAweDQxNDI0MzQ0O1xuJiM0MztcdGNoYXIgYnVmWzI1Nl07XG4mIzQzO1x0aW50IG1hcF9mZDtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFncztcbiYjNDM7XHRvcHRzLmJ0Zl9mZCA9IGJ0Zl9mZDtcbiYjNDM7XHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuJiM0MztcdCAqIHNvIHRoZSAtRUlOVkFMIGJlbG93IGlzIGFib3V0IHRoZSBrZXktbGVzcyBCVEYgYW5kIG5vdCBzb21lIHVucmVsYXRlZFxuJiM0MztcdCAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IHZhbF9pZDtcbiYjNDM7XHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCYjMzQ7a2V5ZWRfbWFwXCYjMzQ7LCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsIFwmIzM0O2tleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2xvc2UobWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBrZXktbGVzcyBCVEYgbXVzdCBiZSByZWplY3RlZC4gKi9cbiYjNDM7XHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4mIzQzO1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwmIzM0O2tleWxlc3NfbWFwXCYjMzQ7LCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hcF9mZCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4mIzQzO1x0XHQodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuJiM0MztcdFx0aWYgKGJwZl9vYmpfcGluKG1hcF9mZCwgcGF0aCkgPT0gMCkge1xuJiM0MztcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChmKSB7XG4mIzQzO1x0XHRcdFx0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKVxuJiM0MztcdFx0XHRcdFx0O1xuJiM0MztcdFx0XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR1bmxpbmsocGF0aCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjbG9zZShtYXBfZmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9mZCwgLUVJTlZBTCwgXCYjMzQ7a2V5LWxlc3MgY3JlYXRlIGlzIHJlamVjdGVkXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGJ0Zl9mZCwgdmFsX2lkO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcJiMzNDtidGZfX25ld19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZhbF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgXCYjMzQ7YnRmX19hZGRfaW50XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhidGZfX2xvYWRfaW50b19rZXJuZWwoYnRmKSwgXCYjMzQ7YnRmX19sb2FkX2ludG9fa2VybmVsXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGJ0Zl9mZCA9IGJ0Zl9fZmQoYnRmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aGFzaFwmIzM0OykpXG4mIzQzO1x0XHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9IQVNILCAwLCBidGZfZmQsIHZhbF9pZCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmhhc2hcJiMzNDspKVxuJiM0MztcdFx0Y2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfUkhBU0gsIEJQRl9GX05PX1BSRUFMTE9DLCBidGZfZmQsIHZhbF9pZCk7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuY1xuQEAgLTAsMCAmIzQzOzEsODEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfc2hvd192b2lkLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuJiM0MzsgKiBUd28gc3VjaCB0eXBlX2lkcyB1c2VkIHRvIE5VTEwtZGVyZWYgaW4gdGhlIEJURiBzaG93IHBhdGg6XG4mIzQzOyAqICAgLSBhIFwmIzM0O2NvbnN0IHZvaWRcJiMzNDsgKGEgbW9kaWZpZXIgcmVzb2x2aW5nIHRvIHZvaWQpIGluIGJ0Zl9tb2RpZmllcl9zaG93KClcbiYjNDM7ICogICAtIGEgQlRGX0tJTkRfVkFSIGluIGJ0Zl92YXJfc2hvdygpIChiYXNlIEJURiBoYXMgbm8gcmVzb2x2ZWRfaWRzKVxuJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIHJ1bihzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbCwgX191MzIgdHlwZV9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4mIzQzO1x0Y2hhciBjdHhbOF0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XG4mIzQzO1x0dG9wdHMuY3R4X2luID0gY3R4O1xuJiM0MztcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5kdW1wX3R5cGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcJiMzNDt0ZXN0X3J1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbiYjNDM7XHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbiYjNDM7XHRpbnQgaSwgbiwgY3YgPSAwLCB2YXIgPSAwO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19wYXJzZShcJiMzNDsvc3lzL2tlcm5lbC9idGYvdm1saW51eFwmIzM0OywgTlVMTCk7XG4mIzQzO1x0aWYgKCFidGYpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9idGY7XG4mIzQzO1xuJiM0MztcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgbiBcdTAwMjZcdTAwMjYgIShjdiBcdTAwMjZcdTAwMjYgdmFyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBpKTtcbiYjNDM7XHRcdGlmICghY3YgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX0NPTlNUIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXR5cGUgPT0gMClcbiYjNDM7XHRcdFx0Y3YgPSBpO1xuJiM0MztcdFx0LyogUGljayBhIFZBUiBzbWFsbCBlbm91Z2ggdG8gcmVuZGVyIGZyb20gdGhlIHByb2dyYW0mIzM5O3MgYnVmZmVyLiAqL1xuJiM0MztcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuJiM0MztcdFx0XHRsb25nIHN6ID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCB0LVx1MDAzZXR5cGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuJiM0MztcdFx0XHRcdHZhciA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDtjb25zdCB2b2lkXCYjMzQ7IHJlbmRlcnMgdGhlIFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFx1MDAzZVwmIzM0OyBwbGFjZWhvbGRlci4gKi9cbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjb25zdF92b2lkXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGN2KSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShydW4oc2tlbCwgY3YpLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFx1MDAzZVwmIzM0OykgLSAxLCBcJiMzNDtyZXRcJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfU1RSRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlb3V0LCBcJiMzNDtcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtwbGFjZWhvbGRlclwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIEJURl9LSU5EX1ZBUiBtdXN0IHJlc29sdmUgYW5kIHJlbmRlciB3aXRob3V0IGVycm9yLiAqL1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3ZhclwmIzM0OykpIHtcbiYjNDM7XHRcdGlmICh2YXIpXG4mIzQzO1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCYjMzQ7cmV0XCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnRmX3Nob3dfdm9pZF9fZGVzdHJveShza2VsKTtcbiYjNDM7b3V0X2J0ZjpcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRhZjgwZmJiYjgwOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuY1xuQEAgLTAsMCAmIzQzOzEsMjQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnRmX3B0ci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztfX3UzMiB0eXBlX2lkO1xuJiM0MzsvKiBBIGJ1ZmZlciB3ZSBvd24gdG8gcmVuZGVyIHRoZSBzZWxlY3RlZCB0eXBlIGZyb20sIGtlcHQgaW4gYm91bmRzLiAqL1xuJiM0MztjaGFyIG9ialsyNTZdO1xuJiM0MztjaGFyIG91dFs2NF07XG4mIzQzO2xvbmcgcmV0O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9wdHIgcHRyID0ge1xuJiM0MztcdFx0LnB0ciA9IG9iaixcbiYjNDM7XHRcdC50eXBlX2lkID0gdHlwZV9pZCxcbiYjNDM7XHRcdC5mbGFncyA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCBcdTAwMjZwdHIsIHNpemVvZihwdHIpLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3R5cGVfc25wcmludGZfc2hvdyYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9zZXFfc2hvd19mbGFncyYjMzQ7LAogICAgJiMzNDticGZfc25wcmludGZfYnRmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDkxYjhjZTc3ZjY5OWEuLjNjZjM1ZWU0OWMxMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtMjkxMSwxNCAmIzQzOzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCWVsc2UKIAkJdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7CiAKLQlidGZfdHlwZV9vcHModCktJmd0O3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiAmIzM0O2NvbnN0IHZvaWQmIzM0OyksIHdoaWNoCiYjNDM7CSAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlcgomIzQzOwkgKiBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgTlVMTC4KJiM0MzsJICovCiYjNDM7CWlmICghYnRmX3R5cGVfb3BzKHQpKQomIzQzOwkJYnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiYjNDM7CWVsc2UKJiM0MzsJCWJ0Zl90eXBlX29wcyh0KS0mZ3Q7c2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTsKIH0KIAogc3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCQkJIHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCwKIAkJCSBzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpCiB7Ci0JdCA9IGJ0Zl90eXBlX2lkX3Jlc29sdmUoYnRmLCAmYW1wO3R5cGVfaWQpOwomIzQzOwkvKgomIzQzOwkgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMCiYjNDM7CSAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS4KJiM0MzsJICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzKQomIzQzOwkJdCA9IGJ0Zl90eXBlX2lkX3Jlc29sdmUoYnRmLCAmYW1wO3R5cGVfaWQpOwomIzQzOwllbHNlCiYjNDM7CQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCAmYW1wO3R5cGVfaWQpOwogCiAJYnRmX3R5cGVfb3BzKHQpLSZndDtzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi40MzEyMzQyNDE4M2M3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtNTMwLDYgJiM0Mzs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogewogCXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAomIzQzOwkvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqLwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTMxMTAsNiAmIzQzOzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIHsKIAlzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7CiAKJiM0MzsJLyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi8KJiM0MzsJaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7cmh0YWItJmd0O21hLCByaHRhYl9tZW1fZHRvcik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jCkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGhhc2ggbWFwIHdpdGggYSBrZXktbGVzcyBCVEYgKGJ0Zl9rZXlfdHlwZV9pZCA9PSAwKSB1c2VkIHRvIE5VTEwtZGVyZWYgaW4KJiM0MzsgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLgomIzQzOyAqIEEgZml4ZWQga2VybmVsIHJlamVjdHMgc3VjaCBhIG1hcCBhdCBjcmVhdGlvbjsgb24gYW4gdW5maXhlZCBrZXJuZWwgdGhlCiYjNDM7ICogcGluLWFuZC1yZWFkIGJlbG93IGRlbGliZXJhdGVseSB3YWxrcyB0aGF0IGJwZmZzIGR1bXAgcGF0aCwgc28gaXQgZG91YmxlcwomIzQzOyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyCiYjNDM7ICogcGFuaWNfb25fb29wcykuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMpOwomIzQzOwljb25zdCBjaGFyICpwYXRoID0gJiMzNDsvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcCYjMzQ7OwomIzQzOwlfX3UzMiBrZXkgPSAxLCB2YWwgPSAweDQxNDI0MzQ0OwomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFnczsKJiM0MzsJb3B0cy5idGZfZmQgPSBidGZfZmQ7CiYjNDM7CW9wdHMuYnRmX3ZhbHVlX3R5cGVfaWQgPSB2YWxfaWQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLAomIzQzOwkgKiBzbyB0aGUgLUVJTlZBTCBiZWxvdyBpcyBhYm91dCB0aGUga2V5LWxlc3MgQlRGIGFuZCBub3Qgc29tZSB1bnJlbGF0ZWQKJiM0MzsJICogcmVqZWN0aW9uIChlLmcuIGFuIHVua25vd24gbWFwIHR5cGUpLgomIzQzOwkgKi8KJiM0MzsJb3B0cy5idGZfa2V5X3R5cGVfaWQgPSB2YWxfaWQ7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKG1hcF90eXBlLCAmIzM0O2tleWVkX21hcCYjMzQ7LCA0LCA0LCA4LCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsICYjMzQ7a2V5ZWQgY3JlYXRlIGlzIGFjY2VwdGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzOwomIzQzOwkvKiBBIGtleS1sZXNzIEJURiBtdXN0IGJlIHJlamVjdGVkLiAqLwomIzQzOwlvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKG1hcF90eXBlLCAmIzM0O2tleWxlc3NfbWFwJiMzNDssIDQsIDQsIDgsICZhbXA7b3B0cyk7CiYjNDM7CiYjNDM7CWlmIChtYXBfZmQgJmd0Oz0gMCkgewomIzQzOwkJLyogVW5maXhlZCBrZXJuZWw6IHJlcHJvZHVjZSB0aGUgb29wcyB2aWEgdGhlIGJwZmZzIGR1bXAgcGF0aC4gKi8KJiM0MzsJCSh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwomIzQzOwkJaWYgKGJwZl9vYmpfcGluKG1hcF9mZCwgcGF0aCkgPT0gMCkgewomIzQzOwkJCWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CQkJaWYgKGYpIHsKJiM0MzsJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQomIzQzOwkJCQkJOwomIzQzOwkJCQlmY2xvc2UoZik7CiYjNDM7CQkJfQomIzQzOwkJCXVubGluayhwYXRoKTsKJiM0MzsJCX0KJiM0MzsJCWNsb3NlKG1hcF9mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKG1hcF9mZCwgLUVJTlZBTCwgJiMzNDtrZXktbGVzcyBjcmVhdGUgaXMgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9idGZfbWFwX2tleWxlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CWludCBidGZfZmQsIHZhbF9pZDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwomIzQzOwlidGYgPSBidGZfX25ld19lbXB0eSgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCAmIzM0O2J0Zl9fbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgJiMzNDtidGZfX2FkZF9pbnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnRmX19sb2FkX2ludG9fa2VybmVsKGJ0ZiksICYjMzQ7YnRmX19sb2FkX2ludG9fa2VybmVsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWJ0Zl9mZCA9IGJ0Zl9fZmQoYnRmKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtoYXNoJiMzNDspKQomIzQzOwkJY2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfSEFTSCwgMCwgYnRmX2ZkLCB2YWxfaWQpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3JoYXNoJiMzNDspKQomIzQzOwkJY2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfUkhBU0gsIEJQRl9GX05PX1BSRUFMTE9DLCBidGZfZmQsIHZhbF9pZCk7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDczMjMyZGMyYTA0NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuYwpAQCAtMCwwICYjNDM7MSw4MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX3Nob3dfdm9pZC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLgomIzQzOyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDoKJiM0MzsgKiAgIC0gYSAmIzM0O2NvbnN0IHZvaWQmIzM0OyAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKQomIzQzOyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcykKJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwljaGFyIGN0eFs4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R5cGVfaWQgPSB0eXBlX2lkOwomIzQzOwl0b3B0cy5jdHhfaW4gPSBjdHg7CiYjNDM7CXRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmR1bXBfdHlwZSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHNrZWwtJmd0O2Jzcy0mZ3Q7cmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX3Nob3dfdm9pZCh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDsKJiM0MzsJaW50IGksIG4sIGN2ID0gMCwgdmFyID0gMDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwomIzQzOwlidGYgPSBidGZfX3BhcnNlKCYjMzQ7L3N5cy9rZXJuZWwvYnRmL3ZtbGludXgmIzM0OywgTlVMTCk7CiYjNDM7CWlmICghYnRmKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9zaG93X3ZvaWRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXRfYnRmOwomIzQzOwomIzQzOwluID0gYnRmX190eXBlX2NudChidGYpOwomIzQzOwlmb3IgKGkgPSAxOyBpICZsdDsgbiAmYW1wOyZhbXA7ICEoY3YgJmFtcDsmYW1wOyB2YXIpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpOwomIzQzOwkJaWYgKCFjdiAmYW1wOyZhbXA7IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX0NPTlNUICZhbXA7JmFtcDsgdC0mZ3Q7dHlwZSA9PSAwKQomIzQzOwkJCWN2ID0gaTsKJiM0MzsJCS8qIFBpY2sgYSBWQVIgc21hbGwgZW5vdWdoIHRvIHJlbmRlciBmcm9tIHRoZSBwcm9ncmFtJiMzOTtzIGJ1ZmZlci4gKi8KJiM0MzsJCWlmICghdmFyICZhbXA7JmFtcDsgYnRmX2tpbmQodCkgPT0gQlRGX0tJTkRfVkFSKSB7CiYjNDM7CQkJbG9uZyBzeiA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgdC0mZ3Q7dHlwZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHN6ICZndDsgMCAmYW1wOyZhbXA7IHN6ICZsdDs9IChsb25nKXNpemVvZihza2VsLSZndDtic3MtJmd0O29iaikpCiYjNDM7CQkJCXZhciA9IGk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogJiMzNDtjb25zdCB2b2lkJiMzNDsgcmVuZGVycyB0aGUgJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7IHBsYWNlaG9sZGVyLiAqLwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NvbnN0X3ZvaWQmIzM0OykpIHsKJiM0MzsJCWlmIChjdikgewomIzQzOwkJCUFTU0VSVF9FUShydW4oc2tlbCwgY3YpLAomIzQzOwkJCQkgIHNpemVvZigmIzM0OyZsdDt1bnN1cHBvcnRlZCBraW5kOjAmZ3Q7JiMzNDspIC0gMSwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX1NUUkVRKHNrZWwtJmd0O2Jzcy0mZ3Q7b3V0LCAmIzM0OyZsdDt1bnN1cHBvcnRlZCBraW5kOjAmZ3Q7JiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDtwbGFjZWhvbGRlciYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dmFyJiMzNDspKSB7CiYjNDM7CQlpZiAodmFyKQomIzQzOwkJCUFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ0Zl9zaG93X3ZvaWRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7b3V0X2J0ZjoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRhZjgwZmJiYjgwOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX3B0ci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7X191MzIgdHlwZV9pZDsKJiM0MzsvKiBBIGJ1ZmZlciB3ZSBvd24gdG8gcmVuZGVyIHRoZSBzZWxlY3RlZCB0eXBlIGZyb20sIGtlcHQgaW4gYm91bmRzLiAqLwomIzQzO2NoYXIgb2JqWzI1Nl07CiYjNDM7Y2hhciBvdXRbNjRdOwomIzQzO2xvbmcgcmV0OwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgZHVtcF90eXBlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfcHRyIHB0ciA9IHsKJiM0MzsJCS5wdHIgPSBvYmosCiYjNDM7CQkudHlwZV9pZCA9IHR5cGVfaWQsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSBicGZfc25wcmludGZfYnRmKG91dCwgc2l6ZW9mKG91dCksICZhbXA7cHRyLCBzaXplb2YocHRyKSwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgJmFtcDsgRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgYSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGEgYml0IG9mIGEgbnVhbmNlZCBhcmVhLCBidXQgdGhlIGNvcmUgb2YgaXQgaXMgd2hldGhlciB0aGVzZSBjb2RlIG1vZGlmaWNhdGlvbnMgY291bGQgaW50cm9kdWNlIG5ldyBwYXRocyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIuCgpGaXJzdCwgbGV0IG1lIGFuYWx5emUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcy4gSSBzZWUgYWRqdXN0bWVudHMgdG8gYGJ0Zl9tb2RpZmllcl9zaG93YCB3aXRoaW4gYGtlcm5lbC9icGYvYnRmLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIGFkZGluZyBudWxsIGNoZWNrcyBgaWYgKCFidGZfdHlwZV9vcHModCkpYCB3aGVuIHNraXBwaW5nIG1vZGlmaWVycyByZXNvbHZlcyB0byB2b2lkIHR5cGUuIFRoaXMgbG9naWMgY2hhbmdlIG1pZ2h0IGJlIGludGVyZXN0aW5nLiBUaGUgYWRkZWQgY2FsbCB0byBgYnRmX2RmX3Nob3coKWAgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFNpbWlsYXJseSwgdGhlIGNoZWNrIGluIGBidGZfdmFyX3Nob3dgIHdpdGggYGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzYCB2ZXJzdXMgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KClRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIHNwZWNpZmljYWxseSBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgLCBub3cgZXhwbGljaXRseSByZWplY3Qgdm9pZCBrZXkgdHlwZXMgd2l0aCBgaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGxpa2VseSBhIGhhcmRlbmluZyBtZWFzdXJlLCBidXQgYW55dGltZSB0aGVyZSBhcmUgbmV3IGVycm9yIGNoZWNrcywgdGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhlIGVycm9yIGhhbmRsaW5nIGl0c2VsZiBjb3VsZCBiZSBmbGF3ZWQuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBlcnJvciByZXR1cm5zIHRvLgoKRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBuZXcgc2VsZnRlc3RzLCBgYnRmX21hcF9rZXlsZXNzLmNgLCBgYnRmX3Nob3dfdm9pZC5jYCwgYW5kIGBidGZfc2hvd192b2lkLmNgIGluZGljYXRlcyB0aGUgZGV2ZWxvcGVycyBhcmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgYXJlIGFjdGl2ZWx5IHRlc3RpbmcgdGhlbSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEhvd2V2ZXIsIHRoZXkgbWlnaHQgbm90IGJlIHRlc3RpbmcgdGhlIGZ1bGwgc3RhdGUgc3BhY2UuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgdGVzdHMsIGFuZCB0aGVuIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGFmZmVjdGVkIGNvZGUgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlIGVub3VnaC4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB0cnVseSBuZWNlc3NhcnksIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgdGFyZ2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J0Zl90eXBlX3Nob3d8YnRmX21vZGlmaWVyX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9MzUwPWNvbnN0IGNoYXIgKmJ0Zl90eXBlX3N0cihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNzgtICogdGhlaXIgb3duIGRhdGEgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHN0cnVjdCBidGZfc2hvdyBhbmQgY29uc3VsdCBpdFxua2VybmVsL2JwZi9idGYuYzozNzk6ICogaW4gdGhlIHNob3cgY2FsbGJhY2suICBTZWUgYnRmX3R5cGVfc2hvdygpIGJlbG93Llxua2VybmVsL2JwZi9idGYuYy0zODAtICpcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTEwNzc9c3RhdGljIGNvbnN0IGNoYXIgKmJ0Zl9zaG93X25hbWUoc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMTExMy1cdCAqIFN0YXJ0IHdpdGggdHlwZV9pZCwgYXMgd2UgaGF2ZSByZXNvbHZlZCB0aGUgc3RydWN0IGJ0Zl90eXBlICpcbmtlcm5lbC9icGYvYnRmLmM6MTExNDpcdCAqIHZpYSBidGZfbW9kaWZpZXJfc2hvdygpIHBhc3QgdGhlIHBhcmVudCB0eXBlZGVmIHRvIHRoZSBjaGlsZFxua2VybmVsL2JwZi9idGYuYy0xMTE1LVx0ICogc3RydWN0LCBpbnQgZXRjIGl0IGlzIGRlZmluZWQgYXMuICBJbiBzdWNoIGNhc2VzLCB0aGUgdHlwZV9pZFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mjg0Nz1zdGF0aWMgaW50IGJ0Zl9wdHJfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkwMy1cbmtlcm5lbC9icGYvYnRmLmM6MjkwNDpzdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MDUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mjk2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgbW9kaWZpZXJfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjk3MS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9yZWZfdHlwZV9sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjI5NzI6XHQuc2hvdyA9IGJ0Zl9tb2RpZmllcl9zaG93LFxua2VybmVsL2JwZi9idGYuYy0yOTczLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi9idGYuYy04MjU3LVxua2VybmVsL2JwZi9idGYuYzo4MjU4OnN0YXRpYyB2b2lkIGJ0Zl90eXBlX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxua2VybmVsL2JwZi9idGYuYy04MjU5LVx0XHRcdCAgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODI3Nj1pbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTgyODQtXG5rZXJuZWwvYnBmL2J0Zi5jOjgyODU6XHRidGZfdHlwZV9zaG93KGJ0ZiwgdHlwZV9pZCwgb2JqLCBcdTAwMjZzc2VxKTtcbmtlcm5lbC9icGYvYnRmLmMtODI4Ni1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTgzMjY9aW50IGJ0Zl90eXBlX3NucHJpbnRmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODMzNi1cbmtlcm5lbC9icGYvYnRmLmM6ODMzNzpcdGJ0Zl90eXBlX3Nob3coYnRmLCB0eXBlX2lkLCBvYmosIChzdHJ1Y3QgYnRmX3Nob3cgKilcdTAwMjZzc25wcmludGYpO1xua2VybmVsL2JwZi9idGYuYy04MzM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgYW5kIEJURiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCUEYgYW5kIEJURiBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIHRoaW5rIGhhc2h0YWJsZXMsIGV0Yy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2Ygd2hhdCBJIG5lZWQgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmXFwub3xoYXNodGFiXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19TWVNGUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gc3lzZnNfYnRmLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTg0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIFN5c2NhbGwgYW5kIEJURiBDb25maWd1cmF0aW9uIElzc3VlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiB2aWEgc3lzY2FsbHMuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgY2hlY2tpbmcgYERFQlVHX0lORk9fQlRGYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBCVEYuIEkmIzM5O20gdGhpbmtpbmcgcGVyaGFwcyByZWxhdGVkIGNvbmZpZ3MgY2FuIHNoZWQgbGlnaHQgb24gYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIGl0IGNvbWVzIHRvIEJURiBhbmQgc3lzY2FsbHMgcmVsYXRlZCB0byBCUEYuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgY29uZmlndXJhdGlvbiBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEx8Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnfGtlcm5lbC9icGYvS2NvbmZpZ3xsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBCUEZfU1lTQ0FMTGAgTWFjcm8qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYEJQRl9TWVNDQUxMYCBtYWNybyBkZWZpbmVkPyYjMzQ7IEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMgd2hvbGUgQlBGIHB1enpsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlIHRhc2sgYXQgaGFuZCAod2hpY2ggaXMgYXNzdW1lZCBmcm9tIHRoZSBjb250ZXh0LCBhcyB0aGUgcHJvbXB0IGxhY2tzIGl0KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4cGFuc2lvbiwgaXRzIGFyZ3VtZW50cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgcXVpY2tseSB1c2luZyBhIGdyZXAgb3IgYW4gSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBmaWxlLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gY2FsbHMgaW50ZXJmYWNlIHdpdGggZUJQRi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYERFQlVHX0lORk9fQlRGYCBpbiBLY29uZmlnKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBERUJVR19JTkZPX0JURmAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgYmVoYXZpbmcuIEkgc2hvdWxkIHRoaW5rIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc3VjaCBhcyBgREVCVUdfSU5GT2AsIGBERUJVR19JTkZPX0RXQVJGYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIEJURiBpbmZyYXN0cnVjdHVyZSBlbmFibGVtZW50LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIGluIGhvdyB0aGlzIGlzIHNldCBvciB1c2VkLiBJIHdpbGwgcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBhbmQgcGVyaGFwcyBzZWFyY2ggdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjb25maWcgb3B0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgYWJvdXQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGtlcm5lbCBzaXplLCBhbmQgcnVudGltZSBwZXJmb3JtYW5jZS4gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugb2YgcmVsZXZhbnQgZGVmY29uZmlncyB3b3VsZCBhbHNvIGJlIHdpc2UuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpcyB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gemVybyBpbiBvbiBsaW5lIDM5OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNldHRpbmcsIG9yIGEgcmVsYXRlZCBncm91cGluZywgdGVuZHMgdG8gYmUuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhlIHNvbHV0aW9uIEkmIzM5O20gc2Vla2luZyBpcyBnb2luZyB0byBiZSBuZWFyYnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRcdCAgdG8ga25vdyBhYm91dCB0aGUgLmR3byBmaWxlcyBhbmQgaW5jbHVkZSB0aGVtLlxuIDM5NjpcdFx0ICBJbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjY2FjaGUuXG4gMzk3Olx0XG4gMzk4Olx0Y29uZmlnIERFQlVHX0lORk9fQlRGXG4gMzk5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4gNDAwOlx0XHRkZXBlbmRzIG9uICFERUJVR19JTkZPX1NQTElUIFx1MDAyNlx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXG4gNDAxOlx0XHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXG4gNDAyOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gNDAzOlx0XHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFx1MDAzZT0gMTIyXG4gNDA0Olx0XHQjIHBhaG9sZSB1c2VzIGVsZnV0aWxzLCB3aGljaCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIEhleGFnb24gcmVsb2NhdGlvbnNcbiA0MDU6XHRcdGRlcGVuZHMgb24gIUhFWEFHT05cbiA0MDY6XHRcdGhlbHBcbiA0MDc6XHRcdCAgR2VuZXJhdGUgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm9ybWF0aW9uIGZyb20gRFdBUkYgZGVidWcgaW5mby5cbiA0MDg6XHRcdCAgVHVybmluZyB0aGlzIG9uIHJlcXVpcmVzIHBhaG9sZSB2MS4yMiBvciBsYXRlciwgd2hpY2ggd2lsbCBjb252ZXJ0XG4gNDA5Olx0XHQgIERXQVJGIHR5cGUgaW5mbyBpbnRvIGVxdWl2YWxlbnQgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm8uXG4gNDEwOlx0XG4gNDExOlx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xuIDQxMjpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjNcbiA0MTM6XHRcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcbiA0MTQ6XHRcdGhlbHBcbiA0MTU6XHRcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxuIDQxNjpcdFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xuIDQxNzpcdFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxuIDQxODpcdFxuIDQxOTpcdGNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuIDQyMDpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjRcbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcbiA0MjM6XHRcdCAgY29tcGlsYXRpb24gdW5pdHMgZnJvbSB0aGUgc3VwcGxpZWQgbGFuZ3VhZ2UuIFVzZWQgaW4gS2J1aWxkIHRvXG4gNDI0Olx0XHQgIG9taXQgUnVzdCBDVXMgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAxLjI0IG9mIHBhaG9sZSxcbiA0MjU6XHRcdCAgb3RoZXJ3aXNlIGl0IHdvdWxkIGVtaXQgbWFsZm9ybWVkIGtlcm5lbCBhbmQgbW9kdWxlIGJpbmFyaWVzIHdoZW5cbiA0MjY6XHRcdCAgdXNpbmcgREVCVUdfSU5GT19CVEZfTU9EVUxFUy5cbiA0Mjc6XHRcbiA0Mjg6XHRjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xuIDQyOTpcdFx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJURiBEaXNwbGF5IGFuZCBNYXAgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlRGIHNob3cgZnVuY3Rpb25zIGFuZCB0aGUgbWFwIGNyZWF0aW9uIGNoZWNrIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGRpdmUgaW4uIExldCYjMzk7cyBzZWUsIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBzcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnBmX3NucHJpbnRmX2J0ZmAgKHdoaWNoIEkgYXNzdW1lIGlzIGEgaGVscGVyKSwgYW5kIGFsc28gZnVuY3Rpb25zIGxpa2UgYG1hcF9jaGVja19idGZgIGFuZCBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhcmUga2V5IHBsYXllcnMgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aG9zZS4gUmlnaHQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYW5kIGBicGZfc25wcmludGZfYnRmYCBhcmUgYWN0dWFsbHkgYmVpbmcgaW52b2tlZCwgYXMgd2VsbCBhcyB0aG9zZSBtYXAgY2hlY2sgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc25wcmludGZfYnRmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxua2VybmVsL2JwZi9idGYuYy0yOTMyLVx0ICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2Vhaztcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0Zjpcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XHRcdHJldHVybiBcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gYGJwZl9zbnByaW50Zl9idGZgIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBicGZfc25wcmludGZfYnRmYCB3b3Jrcy4gVGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIHRoZSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBCVEYgZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5c2lzLCBhbmQgcG9zc2libHkgZXZlbiBkeW5hbWljIGluc3RydW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRyYXZlcnNpbmcgdGhlIEJURiB0eXBlIGluZm9ybWF0aW9uLCBkZWNvZGluZyB0aGUgdmFyaW91cyB0eXBlIGRlc2NyaXB0b3JzLCBhbmQgZ2VuZXJhdGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBzdWl0YWJsZSBmb3IgbG9nZ2luZyBvciB1c2VyIGRpc3BsYXkuIFRoZSBmb3JtYXR0aW5nIGxpa2VseSBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIEJURiBlbnRyeSBpdCYjMzk7cyBlbmNvdW50ZXJpbmcsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFuYWdlcyByZWN1cnNpdmUgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBjb21wbGV4IGRhdGEgdHlwZXMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsZXZlciB1c2Ugb2YgZm9ybWF0IHNwZWNpZmllcnMgdG8gZ2VuZXJhdGUgdGhlIG91dHB1dCwgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgc2VlIHNvbWUgZ29vZCBleGFtcGxlcyBvZiBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscy4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc25wcmludGZfYnRmX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0zMTcyPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gX193ZWFrO1xua2VybmVsL2JwZi9jb3JlLmM6MzE3Mzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYy0zMTc0LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjE4LVx0Y2FzZSBCUEZfRlVOQ19zbnByaW50Zl9idGY6XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjE5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NucHJpbnRmX2J0Zl9wcm90bztcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMjAtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gIGlzIHJlYWxseSBkb2luZy4gR2l2ZW4gaXRzIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBsaWtlbHkgaXQmIzM5O3MgcmVsYXRlZCB0byBwcmludGluZyBvciBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQlRGIChCUEYgVHlwZSBGb3JtYXQpIGRhdGEsIGFuZCBwcm9iYWJseSByZWxhdGVkIHRvIHByb3RvdHlwZXMgb3IgZnVuY3Rpb24gc2lnbmF0dXJlcy4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gS2VybmVsIGNvZGUgYmVpbmcga2VybmVsIGNvZGUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmaXJzdCBpcyB3aXRoaW4gYGtlcm5lbC9icGYvYnRmLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NucHJpbnRmX2J0ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxua2VybmVsL2JwZi9idGYuYy0yOTMyLVx0ICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2Vhaztcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0Zjpcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XHRcdHJldHVybiBcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwMDY9c3RhdGljIGludCBicGZfYnRmX3ByaW50Zl9wcmVwYXJlKHN0cnVjdCBidGZfcHRyICpwdHIsIHUzMiBidGZfcHRyX3NpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwMzUtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTAzNjpCUEZfQ0FMTF81KGJwZl9zbnByaW50Zl9idGYsIGNoYXIgKiwgc3RyLCB1MzIsIHN0cl9zaXplLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTAzNy1cdCAgIHUzMiwgYnRmX3B0cl9zaXplLCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDUwLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNTE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MjpcdC5mdW5jXHRcdD0gYnBmX3NucHJpbnRmX2J0Zixcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDUzLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlRGLVJlbGF0ZWQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIHR3byBrZXkgYXJlYXM6IGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4KCkluIGBidGYuY2AsIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgZGlzcGxheSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgYXJlIHRoZSB0YXJnZXRzLiBUaGVzZSBhcmUgKnN0YXRpYyogY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgbm93IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgKnVzZWQqLiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBzaG93IHVwIGluIHBsYWNlcyB0aGF0IGZvcm1hdCBhbmQgb3V0cHV0IEJURiBpbmZvcm1hdGlvbjogYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBhbmQsIGNydWNpYWxseSwgZnVuY3Rpb25zIGNhbGxlZCB2aWEgQlBGIHByb2dyYW1zIGxpa2UgYGJwZl9zbnByaW50Zl9idGZgIGFuZCBgYnBmX3NlcV9wcmludGZfYnRmYC4gQWRkaXRpb25hbGx5LCB0aGUgbWFwIGR1bXAgZnVuY3Rpb25zIGluIGJwZmZzLCBzdWNoIGFzIGBtYXBfc2VxX3Nob3dgLCBgYnBmX21hcF9zZXFfc2hvd2AsIGFuZCBgYnBmX29ial9waW5gLCBhcmUgYWxzbyBpbnZvbHZlZC4gU28sIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyByZWZpbmUgdGhlIHdheSBCVEYgZGF0YSBpcyBmb3JtYXR0ZWQgYW5kIHByZXNlbnRlZCB0byB0aGUgdXNlciwgcGFydGljdWxhcmx5IHRocm91Z2ggc2VxdWVuY2UgZmlsZXMgYW5kIHBvdGVudGlhbGx5IHZpYSBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcy4KCk5leHQsIGluIGBoYXNodGFiLmNgLCB0aGUgY2hhbmdlcyBhZmZlY3QgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCwgd2hpY2gsIGFnYWluLCBhcmUgc3RhdGljLiBUaGVzZSBhcmUgY2xlYXJseSByZWxhdGVkIHRvICpoYXNoIHRhYmxlKiBtYXBzIGFuZCBCVEYuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgbWFwcyB3aGVyZSBCVEYgaXMgcmVsZXZhbnQuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29kZSwgYG1hcF9jcmVhdGVgLCBgYnBmX21hcF9uZXdfZmRgLCBhbmQgYGJwZl9tYXBfYWxsb2NfaWRgIGluIGBzeXNjYWxsLmNgIGFsbCBzZWVtIHRvIGJlIGVudHJ5IHBvaW50cyBjYWxsZWQgZnJvbSB0aGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIHdoZW4gYEJQRl9NQVBfQ1JFQVRFYCBpcyBpbnZva2VkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggY2hlY2tpbmcgb3IgdmFsaWRhdGluZyBCVEYgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBoYXNoIHRhYmxlLWJhc2VkIEJQRiBtYXBzLiBOb3cgSSB3YW50IHRvIHF1aWNrbHkgaW52ZXN0aWdhdGUgd2hlcmUgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgaXMgYmVpbmcgY2FsbGVkIHRvIHNlZSB0aGUgd2hvbGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRhYl9tYXBfY2hlY2tfYnRmfHJodGFiX21hcF9jaGVja19idGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTUwND1zdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6NTI4OnN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTUyOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzY6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzctXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTk6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MDAtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTY0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1Nzk6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1ODAtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk5LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjAwOlx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjAxLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA5Nj1zdGF0aWMgaW50IHJodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMTE6c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTItXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVx0Lm1hcF9yZWxlYXNlX3VyZWYgPSByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyODpcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjktXHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgLm1hcF9jaGVja19idGZgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgb2YgYC5tYXBfY2hlY2tfYnRmYCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgZG93biB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJdCYjMzk7cyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSB2ZXJpZmljYXRpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY2FsbCBncmFwaCBoZXJlLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBtYXBfY2hlY2tfYnRmYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgdmFsaWRhdGlvbiBpbmZyYXN0cnVjdHVyZSwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHVzZXMsIG9yIHVudXN1YWwgY29kZSBmbG93cyB0aGF0IHJlcXVpcmUgYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgYWxsIGNhbGwgc2l0ZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIG9yIGNvbnRleHQtZGVwZW5kZW50IGNhbGxzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoYXQgZnVuY3Rpb27igJlzIGRlc2lnbiBhZmZlY3RzIHBlcmZvcm1hbmNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBkZXNpZ24gaW1wcm92ZW1lbnRzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NoZWNrX2J0ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTQwNj1zdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY0MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjUzLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU1LVx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz01NTc9c3RhdGljIHZvaWQgcGVyY3B1X2FycmF5X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTc5LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU4MDpzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzMtXHQubWFwX3NlcV9zaG93X2VsZW0gPSBhcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc1LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg4NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OC1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4OTk6XHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAwLVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTEzODI9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmZfZXZlbnRfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTM5Mi1cdC5tYXBfcmVsZWFzZSA9IHBlcmZfZXZlbnRfZmRfYXJyYXlfcmVsZWFzZSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxMzkzOlx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTEzOTQtXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0MTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDI3LVx0Lm1hcF9mZF9wdXRfcHRyID0gY2dyb3VwX2ZkX2FycmF5X3B1dF9wdHIsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyODpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDI5LVx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTYtXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE3Olx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTgtXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYz0xNzU9c3RhdGljIGxvbmcgYmxvb21fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE4MS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM6MTgyOnN0YXRpYyBpbnQgYmxvb21fbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTIwMz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYmxvb21fZmlsdGVyX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0yMTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gYmxvb21fbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoyMTU6XHQubWFwX2NoZWNrX2J0ZiA9IGJsb29tX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTIxNi1cdC5tYXBfbWVtX3VzYWdlID0gYmxvb21fbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xNjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncnBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfY2dycF9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTY5Olx0Lm1hcF9jaGVja19idGYgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTcwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xOTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGlub2RlX3N0b3JhZ2VfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMjA2LVx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9mZF9pbm9kZV9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjIwNzpcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYy0yMDgtXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTEzNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaW5zbl9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xNDMtXHQubWFwX2RlbGV0ZV9lbGVtID0gaW5zbl9hcnJheV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxNDQ6XHQubWFwX2NoZWNrX2J0ZiA9IGluc25fYXJyYXlfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTE0NS1cdC5tYXBfbWVtX3VzYWdlID0gaW5zbl9hcnJheV9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTcwMj1pbnQgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0yMjM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRhc2tfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMS1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfcGlkX3Rhc2tfc3RvcmFnZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jOjIzMjpcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMy1cdC5tYXBfbWVtX3VzYWdlID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTcwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy03MTYtXHQubWFwX2dldF9uZXh0X2tleVx0PSBjcHVfbWFwX2dldF9uZXh0X2tleSxcbmtlcm5lbC9icGYvY3B1bWFwLmM6NzE3Olx0Lm1hcF9jaGVja19idGZcdFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9jcHVtYXAuYy03MTgtXHQubWFwX21lbV91c2FnZVx0XHQ9IGNwdV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTA4Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgZGV2X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xMDk1LVx0Lm1hcF9kZWxldGVfZWxlbSA9IGRldl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwOTY6XHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwOTctXHQubWFwX21lbV91c2FnZSA9IGRldl9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTEwMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgZGV2X21hcF9oYXNoX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExMTAtXHQubWFwX2RlbGV0ZV9lbGVtID0gZGV2X21hcF9oYXNoX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9kZXZtYXAuYzoxMTExOlx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMTEyLVx0Lm1hcF9tZW1fdXNhZ2UgPSBkZXZfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01MDQ9c3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTUyNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjUyODpzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjktXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc1LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc2Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc3LVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM4Mz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzk5Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDAwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc5Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTgwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Nj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU5OS1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYwMDpcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYwMS1cdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3MzI9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfb2ZfbWFwc19tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDItXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MzpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDQtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDk2PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTEwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzExMTpzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTIxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjctXHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4Olx0Lm1hcF9jaGVja19idGYgPSByaHRhYl9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyOS1cdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9NDYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ2Ny1cdC5tYXBfZGVsZXRlX2VsZW0gPSBjZ3JvdXBfc3RvcmFnZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2ODpcdC5tYXBfY2hlY2tfYnRmID0gY2dyb3VwX3N0b3JhZ2VfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDY5LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gY2dyb3VwX3N0b3JhZ2Vfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9Nzc1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB0cmllX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4NS1cdC5tYXBfZGVsZXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoLFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4NjpcdC5tYXBfY2hlY2tfYnRmID0gdHJpZV9jaGVja19idGYsXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzg3LVx0Lm1hcF9tZW1fdXNhZ2UgPSB0cmllX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MTE0MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc3RhY2tfdHJhY2VfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTE0OS1cdC5tYXBfZGVsZXRlX2VsZW0gPSBzdGFja19tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTE1MDpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMTUxLVx0Lm1hcF9tZW1fdXNhZ2UgPSBzdGFja19tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX21hcF9vZmZsb2FkX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTctXHQubWFwX2ZyZWUgPSBicGZfbWFwX29mZmxvYWRfbWFwX2ZyZWUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTg6XHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTktXHQubWFwX21lbV91c2FnZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNDc9aW50IG1hcF9jaGVja19ub19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI1NTpzdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU2LVx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfa2V5X2lkLCB1MzIgYnRmX3ZhbHVlX2lkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNjgtXHRcdGtleV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmLCAwKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyNjk6XHRcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfY2hlY2tfYnRmKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI3MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzY3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTM2ODpcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9jaGVja19idGYpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzNjk6XHRcdHJldCA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2NoZWNrX2J0ZihtYXAsIGJ0Ziwga2V5X3R5cGUsIHZhbHVlX3R5cGUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM3MC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU4MS1cdFx0aWYgKGF0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1ODI6XHRcdFx0ZXJyID0gbWFwX2NoZWNrX2J0ZihtYXAsIHRva2VuLCBidGYsIGF0dHItXHUwMDNlYnRmX2tleV90eXBlX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU4My1cdFx0XHRcdFx0ICAgIGF0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhpcyBwYXRjaCB0YXJnZXRzIHR3byBrZXkgYXJlYXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtOiBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBoYW5kbGluZyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3Igdm9pZCBrZXkgdHlwZXMgaW4gaGFzaCB0YWJsZXMuCgpGaXJzdCwgdGhlIGBidGYuY2AgY2hhbmdlcyBhcmUgZml4aW5nIHBvdGVudGlhbCBjcmFzaGVzIGR1cmluZyBCVEYgdHlwZSByZXNvbHV0aW9uIGFuZCBkdW1waW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVkZ2UgY2FzZXMg4oCTIHNwZWNpZmljYWxseSwgd2hlbiBhIG1vZGlmaWVyIHJlc29sdmVzIHRvIGEgdm9pZCB0eXBlIG9yIHdoZW4gaGFuZGxpbmcgYEJURl9LSU5EX1ZBUmAgdHlwZXMgaW4gYSBiYXNlIEJURiBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyBgcmVzb2x2ZWRfaWRzYC4gVGhlIGBoYXNodGFiLmNgIGNoYW5nZSByZWplY3RzIHZvaWQga2V5IHR5cGVzIGZvciBCUEYgbWFwcywgcHJldmVudGluZyBsYXRlciBpc3N1ZXMgZHVyaW5nIGJwZmZzIGR1bXBzLgoKTm93LCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBGb2xsb3dpbmcgdGhlIGd1aWRlbGluZXMsIHRoaXMgZGVmaW5pdGVseSAqaXNuJiMzOTt0KiBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjb2RlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyB0aGF0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcy9icGZmcy4gVGhlIEJQRiBzdWJzeXN0ZW0gaXMgYSBrbm93biB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbiwgYW5kIHRoZXNlIHBhdGNoZXMgYXJlIGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIHZvaWQgdHlwZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdGhlc2UgdHlwZXMgb2YgYnVncywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgd2UgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciByZXByb2R1Y2liaWxpdHkuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgbmVjZXNzYXJ5LiBCdXQgQlBGIGFuZCBCVEYgYXJlIGRlZXBseSBpbnRlcnR3aW5lZCwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBmb3IgYW55IGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIG9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgY3JpdGljYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhbmQgcmVwcm9kdWNpbmcgdGhlIHJlcG9ydGVkIGlzc3Vlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIGEgcHJvcGVybHkgY29uZmlndXJlZCBmdXp6aW5nIGVudmlyb25tZW50IHRoYXQgZnVsbHkgZXhwb3NlcyB0aGUgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNzItXG5rZXJuZWwvYnBmL0tjb25maWc6NzM6Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzI4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBCUEYgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJQRiBjb21wb25lbnRzIGFyZSBidWlsdC4gRmlyc3QsIEkmIzM5O2xsIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgY29tcGlsZWQuIEkmIzM5O2xsIG9wZW4gdXAgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNoZWNrLgoKQWxyaWdodCwgbG9va2luZyBhdCBMaW5lIDExLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8uLi5gIFNvLCBgaGFzaHRhYi5vYCBpcyBvbmx5IGluY2x1ZGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBBbmQganVzdCBiZWxvdyB0aGF0LCBvbiBsaW5lIDE4LCBpdCBzZWVtcyB0aGUgc2FtZSBydWxlIGlzIGFwcGxpZWQgdG8gYGJ0Zi5vYCAtLSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8uLi5gLiBHb29kLCB0aGF0IG1ha2VzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJlYWxseSBjbGVhci4KCk5vdywgZm9yIHRoYXQgYGJwZl9zbnByaW50Zl9idGZgIGZ1bmN0aW9u4oCmIHdoZXJlJiMzOTtzIHRoYXQgZGVmaW5lZD8gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgaXQgbWlnaHQgbGl2ZSBpbiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3IgcGVyaGFwcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeS4gTGV0JiMzOTtzIGdldCB0byB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIEV2ZW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9FVkVOVFNgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkLXRpbWUgaW5jbHVzaW9uIGFuZCBzZXR0aW5ncyBvZiBmZWF0dXJlcyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgZXZlbnRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBFdmVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBCUEZfRVZFTlRTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBzcGVjaWZpY2FsbHkgcmVtZW1iZXIgc2VlaW5nIGl0IHdpdGhpbiB0aGUgdHJhY2UgZGlyZWN0b3J5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhcm91bmQgbGluZSA4NTMgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIGlzIHJlY2VudCBlbm91Z2gsIGFuZCBJIGNhbiBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjg3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgRm9jdXM6IEJQRiBCVEYgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gcmVmaW5lIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSByaWdodCBmdW5jdGlvbnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBleHBvc2UgaW50ZXJlc3RpbmcgYnVncyBhbmQgdGhhdCBhcmUgKmFjdHVhbGx5KiBhY2Nlc3NpYmxlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgRm9jdXNTeW1ib2xzYC4gUmVtZW1iZXIgdGhlIGtleSBndWlkZWxpbmVzOiBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGNydWNpYWwgZm9yIGZ1enppbmcuIEF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBOb24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYXJlIHRoZSBnb2xkIHN0YW5kYXJkLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRob3NlIGdldCBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIsIGFuZCBkb24mIzM5O3QgcHJvdmlkZSBhIHVuaXF1ZSBzeW1ib2wgdG8gdGFyZ2V0IGFueXdheS4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlRGIHNob3cgYW5kIG1hcCBjcmVhdGlvbiBwYXRocy4gSSBrbm93IHRoZXJlJiMzOTtzIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbmluZyBpbiBga2VybmVsL2JwZi9idGYuY2AuIExldCBtZSB0YWtlIGEgbG9vazoKCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHRoZXNlIGFyZSBhcHByb3ByaWF0ZS4KSSBuZWVkIHRvIGNoZWNrLCBhbmQgSSB3aWxsLCB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucywgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnRmX3R5cGVfaWRfcmVzb2x2ZWAsIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AsIGFuZCBgYnRmX2RmX3Nob3dgIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC4gSSB0aGluayBgYnRmX2RmX3Nob3dgICptaWdodCogYmUgc3RhdGljLCBzbyBJIHdpbGwgY2hlY2sgdGhhdCBvbmUgc3BlY2lmaWNhbGx5LgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgYWRkIHRvIHRoZSBsaXN0IHRoaW5ncyBsaWtlIGBicGZfc25wcmludGZfYnRmYCwgYG1hcF9jaGVja19idGZgLCBgaHRhYl9tYXBfY2hlY2tfYnRmYCDigJMgdGhvc2UgYXJlIGFsbCBrZXkgYXJlYXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kLCB0YXJnZXRlZCBzZXQgb2YgZnVuY3Rpb25zIGZvciB0aGlzIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93fGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzfGJ0Zl9kZl9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjI2OS1cbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbmtlcm5lbC9icGYvYnRmLmMtMjI3MS1cdFx0XHR1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0yOTE5LVx0aWYgKCFidGZfdHlwZV9vcHModCkpXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MjA6XHRcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xua2VybmVsL2JwZi9idGYuYy0yOTIxLVx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MzAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZndkX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXHQubG9nX2RldGFpbHMgPSBidGZfZndkX3R5cGVfbG9nLFxua2VybmVsL2JwZi9idGYuYzozMDIyOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtMzAyMy19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy00ODAwLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxua2VybmVsL2JwZi9idGYuYzo0ODAxOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDg0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy00ODQ5LVx0LmxvZ19kZXRhaWxzID0gYnRmX3JlZl90eXBlX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4NTEtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTUxMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZsb2F0X29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXHQubG9nX2RldGFpbHMgPSBidGZfZmxvYXRfbG9nLFxua2VybmVsL2JwZi9idGYuYzo1MTQxOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNTE0Mi19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNTIzOS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjUyNDA6XHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz04MjcwPV9fcHJpbnRmKDIsIDApIHN0YXRpYyB2b2lkIGJ0Zl9zZXFfc2hvdyhzdHJ1Y3QgYnRmX3Nob3cgKnNob3csIGNvbnN0IGNoYXIgKmZtdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzUtXG5rZXJuZWwvYnBmL2J0Zi5jOjgyNzY6aW50IGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzctXHRcdFx0ICAgIHZvaWQgKm9iaiwgc3RydWN0IHNlcV9maWxlICptLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9idGYuYz04MjkwPXZvaWQgYnRmX3R5cGVfc2VxX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODI5Mi17XG5rZXJuZWwvYnBmL2J0Zi5jOjgyOTM6XHQodm9pZCkgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoYnRmLCB0eXBlX2lkLCBvYmosIG0sXG5rZXJuZWwvYnBmL2J0Zi5jLTgyOTQtXHRcdFx0XHQgICAgICAgQlRGX1NIT1dfTk9OQU1FIHwgQlRGX1NIT1dfQ09NUEFDVCB8XG4tLVxua2VybmVsL2JwZi9idGYuYz04MzA0PV9fcHJpbnRmKDIsIDApIHN0YXRpYyB2b2lkIGJ0Zl9zbnByaW50Zl9zaG93KHN0cnVjdCBidGZfc2hvdyAqc2hvdywgY29uc3QgY2hhciAqZm10LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODMyNS1cbmtlcm5lbC9icGYvYnRmLmM6ODMyNjppbnQgYnRmX3R5cGVfc25wcmludGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMjctXHRcdFx0ICAgY2hhciAqYnVmLCBpbnQgbGVuLCB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQlRGIFR5cGUgUmVzb2x1dGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJURiB0eXBlIElEcyBhcmUgYWN0dWFsbHkgcmVzb2x2ZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRhcmdldHMgYXJlIHRoZSBkZWNsYXJhdGlvbnMgZm9yIGBidGZfdHlwZV9pZF9yZXNvbHZlYCBhbmQgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgd29ya2hvcnNlcyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGEgQlRGIHR5cGUgSUQgKnJlYWxseSogcG9pbnRzIHRvLCBhbmQgcG90ZW50aWFsbHkgY2xlYW5pbmcgdXAgYW55IGV4dHJhbmVvdXMgbW9kaWZpZXJzIHRoYXQgbWlnaHQgYmUgaGFuZ2luZyBhcm91bmQuIEdvdHRhIHVuZGVyc3RhbmQgdGhlaXIgc2lnbmF0dXJlcywgdGhlaXIgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCB0eXBlIHJlc29sdXRpb24gZmxvdy4gS25vd2luZyB0aGUgKndoYXQqIGFuZCB0aGUgKmhvdyogb2YgdGhlc2UgdHdvIHdpbGwgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGUgYnJvYWRlciBzY2hlbWUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX3R5cGVfc2tpcF9tb2RpZmllcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9NzIyPUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9maW5kX2J0Zl9pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTcyMy1cbmtlcm5lbC9icGYvYnRmLmM6NzI0OmNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9idGYuYy03MjUtXHRcdFx0XHRcdCAgICAgICB1MzIgaWQsIHUzMiAqcmVzX2lkKVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NzQwPWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfcmVzb2x2ZV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzQ0LVxua2VybmVsL2JwZi9idGYuYzo3NDU6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBpZCwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc0Ni1cdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzQ4LVxua2VybmVsL2JwZi9idGYuYzo3NDk6XHRyZXR1cm4gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIHJlc19pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc1MC19XG4tLVxua2VybmVsL2JwZi9idGYuYz0xMDE2PWJvb2wgYnRmX21lbWJlcl9pc19yZWdfaW50KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMTA1Mi1cbmtlcm5lbC9icGYvYnRmLmM6MTA1MzovKiBTaW1pbGFyIHRvIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKCkgYnV0IGRvZXMgbm90IHNraXAgdHlwZWRlZnMuICovXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTQtc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MDQ9c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkxMS1cdGVsc2Vcbmtlcm5lbC9icGYvYnRmLmM6MjkxMjpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTMtXG4tLVxua2VybmVsL2JwZi9idGYuYz0yOTI1PXN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzYtXHRlbHNlXG5rZXJuZWwvYnBmL2J0Zi5jOjI5Mzc6XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzgtXG4tLVxua2VybmVsL2JwZi9idGYuYz0zMTgxPXN0YXRpYyB2b2lkIF9fYnRmX2FycmF5X3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zMTkxLVx0ZWxlbV90eXBlX2lkID0gYXJyYXktXHUwMDNldHlwZTtcbmtlcm5lbC9icGYvYnRmLmM6MzE5MjpcdGVsZW1fdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZWxlbV90eXBlX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtMzE5My1cdGlmIChlbGVtX3R5cGUgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2hhc19zaXplKGVsZW1fdHlwZSkpXG4tLVxua2VybmVsL2JwZi9idGYuYz02NjA0PXUzMiBidGZfY3R4X2FyZ19pZHgoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9idGYuYy02NjE3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJnczsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvYnRmLmM6NjYxODpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNjYxOS1cdFx0b2Zmc2V0ICYjNDM7PSBidGZfdHlwZV9pc19wdHIodCkgPyA4IDogcm91bmR1cCh0LVx1MDAzZXNpemUsIDgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYyMy1cbmtlcm5lbC9icGYvYnRmLmM6NjYyNDpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjUtXHRvZmZzZXQgJiM0Mzs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXHUwMDNlc2l6ZSwgOCk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODU4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy02OTMyLVxua2VybmVsL2JwZi9idGYuYzo2OTMzOlx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTY5MzQtXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zbWFsbF9pbnQodCkpIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTcxMjI9c3RhdGljIGludCBidGZfc3RydWN0X3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEzNC1cdGlmIChidGZfdHlwZV9pc19tb2RpZmllcih0KSlcbmtlcm5lbC9icGYvYnRmLmM6NzEzNTpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzEzNi1cdHRuYW1lID0gX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTcxNjMtXHRcdG1lbWJlciA9IGJ0Zl90eXBlX21lbWJlcih0KSAmIzQzOyB2bGVuIC0gMTtcbmtlcm5lbC9icGYvYnRmLmM6NzE2NDpcdFx0bXR5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLFxua2VybmVsL2JwZi9idGYuYy03MTY1LVx0XHRcdFx0XHRcdE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzE3Ny1cdFx0LyogYWxsb3cgc3RydWN0dXJlIGFuZCBpbnRlZ2VyICovXG5rZXJuZWwvYnBmL2J0Zi5jOjcxNzg6XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5X2VsZW0tXHUwMDNldHlwZSxcbmtlcm5lbC9icGYvYnRmLmMtNzE3OS1cdFx0XHRcdFx0ICAgIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NzY0OT1zdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX3R5cGVfbWF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc2ODYtXG5rZXJuZWwvYnBmL2J0Zi5jOjc2ODc6XHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIHQxLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYzo3Njg4Olx0dDIgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYyLCB0Mi1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzY4OS1cdGlmICh0MS1cdTAwM2VpbmZvICE9IHQyLVx1MDAzZWluZm8pIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc3MDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYXJnczE7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MDQ6XHRcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgYXJnczFbaV0udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MDU6XHRcdHQyID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMiwgYXJnczJbaV0udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc3MDYtXG4tLVxua2VybmVsL2JwZi9idGYuYy03NzMyLVx0XHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MzM6XHRcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgdDEtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MzQ6XHRcdHQyID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMiwgdDItXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc3MzUtXHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQxKSkge1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9Nzk0Nj1zdGF0aWMgaW50IGJ0Zl9zY2FuX3R5cGVfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzk1Ny1cdC8qIEZpbmQgdGhlIGZpcnN0IHBvaW50ZXIgdHlwZSBpbiB0aGUgY2hhaW4uICovXG5rZXJuZWwvYnBmL2J0Zi5jOjc5NTg6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzk1OS1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTc5ODE9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzk5MC1cbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc5OTItXG4tLVxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi9idGYuYy04MTgxLVxua2VybmVsL2JwZi9idGYuYzo4MTgyOlx0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYy04MTgzLVx0XHRcdGlmIChidGZfdHlwZV9pc192b2lkKHJlZl90KSB8fCBidGZfdHlwZV9pc19wcmltaXRpdmUocmVmX3QpKSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04MjIwLVxua2VybmVsL2JwZi9idGYuYzo4MjIxOlx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTgyMjItXHRcdFx0cmVmX3QgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgdCwgXHUwMDI2bWVtX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODc4MT1pbnQgYnRmX2NoZWNrX2l0ZXJfYXJnKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLCBpbnQgYXJnX2lkeClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTEtXHRhcmcgPSBcdTAwMjZidGZfcGFyYW1zKGZ1bmMpW2FyZ19pZHhdO1xua2VybmVsL2JwZi9idGYuYzo4NzkyOlx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYy04NzkzLVx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTQtXHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi9idGYuYzo4Nzk1Olx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZidGZfaWQpO1xua2VybmVsL2JwZi9idGYuYy04Nzk2LVx0aWYgKCF0IHx8ICFfX2J0Zl90eXBlX2lzX3N0cnVjdCh0KSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg4MDY9c3RhdGljIGludCBidGZfY2hlY2tfaXRlcl9rZnVuY3Moc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsXG4tLVxua2VybmVsL2JwZi9idGYuYy04ODU2LVx0XHQvKiBicGZfaXRlcl9cdTAwM2N0eXBlXHUwMDNlX25leHQoKSBzaG91bGQgcmV0dXJuIHBvaW50ZXIgKi9cbmtlcm5lbC9icGYvYnRmLmM6ODg1NzpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuYy1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtODg1OC1cdFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXG4tLVxua2VybmVsL2JwZi9idGYuYz05ODIyPWJvb2wgYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk4NTktXG5rZXJuZWwvYnBmL2J0Zi5jOjk4NjA6XHRcdGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbXR5cGUtXHUwMDNldHlwZSwgXHUwMDI2aWQpO1xua2VybmVsL2JwZi9idGYuYy05ODYxLVx0XHQvKiBJZiB3ZSBtYXRjaCBvbiBib3RoIHR5cGUgYW5kIG5hbWUsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHRydXN0ZWQuICovXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0xMzM9c3RhdGljIGludCBjaGVja19idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTg1LVxua2VybmVsL2JwZi9jaGVja19idGYuYzoxODY6XHRcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0xODctXHRcdHNjYWxhcl9yZXR1cm4gPVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zODg9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3VicHJvZ19yZXRfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwMzpcdHJldHVybiBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDA0LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4Mzc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTY5LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE3MDpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEucmV0X2J0ZiwgbWV0YS5yZXRfYnRmX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE3MS1cdFx0aWYgKCFidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MDg9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MTM6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTQtXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MjA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MjU6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjYtXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1Mzg9c3RhdGljIGJvb2wgX19pc19rZnVuY19wdHJfYXJnX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0NDpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0NS1cdGlmICghdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NDgtXHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0OTpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cmVzX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU1MC1cdGlmICghdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NTA9Ym9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjY0Olx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjY1LVx0XHRpZiAoYnRmX3R5cGVfaXNfc3RydWN0KG1lbWJlcl90eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY3Ny1cdFx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY3ODpcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NzktXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2NT1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk3MzpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc0LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk5My1cdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk5NDpcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5OTUtXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMzY9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTg4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMTg5Olx0cmVnX3JlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMocmVnX2J0ZiwgcmVnX3JlZl9pZCwgXHUwMDI2cmVnX3JlZl9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxOTAtXHRyZWdfcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHJlZ19idGYsIHJlZ19yZWZfdC1cdTAwM2VuYW1lX29mZik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNjk4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzQ4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNzQ5Olx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUwLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUxLVx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NTI6XHRcdFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cmVmX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc1My1cdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTQ5PXM2NCBicGZfa2Z1bmNfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1Njk6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NzAtXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1OTItXHQvKiBmaXhlZC1zaXplIHBvaW50ZWQtdG8gdHlwZTogcmVzb2x2ZSB2aWEgQlRGICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1OTM6XHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU5NC1cdGlmICghSVNfRVJSKGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgXHUwMDI2dHlwZV9zaXplKSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3ODU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzctXHQvKiBDaGVjayByZXR1cm4gdHlwZSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDM4Olx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDcwLVx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA3MTpcdFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZwdHJfdHlwZV9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzItXHRcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcdTAwMjZtZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2MzY9c3RhdGljIGludCBfX2NoZWNrX3BzZXVkb19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2ODktXHR0eXBlID0gdC1cdTAwM2V0eXBlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjkwOlx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2OTEtXHRpZiAocGVyY3B1KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTg5CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHplcm8gaW4gb24gYG1hcF9jcmVhdGVgLCBwb3RlbnRpYWxseSBpbiBgc3lzY2FsbC5jYCBvciB3aXRoaW4gdGhlIGBtYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSG93ZXZlciwgSSBpbW1lZGlhdGVseSBub3RlIGBtYXBfY2hlY2tfYnRmYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGV4cG9zdXJlLiAgSSYjMzk7bSBzZWVpbmcgYSBzdWl0ZSBvZiBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIHNvLCB0aGVyZWZvcmUsIGFyZSBleHBvcnRlZCBhbmQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zZXFfc2hvd2AsIHRoZSBgaHRhYl9tYXBfb3BzYCBhbmQgYHJodGFiX21hcF9vcHNgIHN0cnVjdHMsIGBicGZfbWFwX2NyZWF0ZWAgb3IgYG1hcF9jcmVhdGVgICh0aGUgcG90ZW50aWFsIHBvaW50IG9mIGVudHJ5ISksIGFuZCBgYnBmX3NucHJpbnRmX2J0ZmAuICBgYnBmX3NucHJpbnRmX2J0ZmAgZXNwZWNpYWxseSBncmFicyBteSBhdHRlbnRpb24gYmVjYXVzZSBpdCBpcyBhIEJQRiBoZWxwZXIgYW5kIGEgbm9uLXN0YXRpYyBCUEZfQ0FMTF81LiBUaGF0IGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gYGJwZl9zbnByaW50Zl9idGZgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXQgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgYEJQRl9DQUxMXzVgIG1hY3JvIGdlbmVyYXRlcyB0aGF0IHN5bWJvbCwgZWl0aGVyIGRpcmVjdGx5IGFzIGBicGZfc25wcmludGZfYnRmYCBvciBwb3RlbnRpYWxseSBhcyBgX19fYnBmX3NucHJpbnRmX2J0ZmAuIEFsc28sIGJvdGggYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgIGFuZCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgIGFyZSBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gVGhhdCBnaXZlcyBtZSBhIHNsaWdodGx5IHdpZGVyIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKTGV0JiMzOTtzIG5vdyBjb25zaWRlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHN5bWJvbHMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0VWRU5UU2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZm9yIGNvbnRleHQsIGJ1dCBub3QgZGlyZWN0bHkgZXhwbG9pdGFibGUgYXQgdGhpcyBzdGFnZS4gTXkgZm9jdXMsIHRob3VnaCwgbmFycm93cyB0byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGFuZCwgYWdhaW4sIGBicGZfc25wcmludGZfYnRmYC4gVGhvc2UgYXJlIHdoYXQgSSYjMzk7bSBob21pbmcgaW4gb24uCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgYSBmaW5hbCwgcXVpY2sgcmV2aWV3LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIHNwZWNpZmljIGFyZWFzOiB0aGUgQlRGIHNob3cgbG9naWMsIHRvIHByZXZlbnQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIHdoZW4gaGFuZGxpbmcgdm9pZCBtb2RpZmllcnMgYW5kIGBCVEZfS0lORF9WQVJgIHdpdGggYSBiYXNlIEJURi4gU3BlY2lmaWNhbGx5LCBpbiBga2VybmVsL2JwZi9idGYuY2Agd2l0aCBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSXQgYWxzbyBpbXBhY3RzIEJURiBtYXAgdmFsaWRhdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB2aWEgdGhlIGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb25zLCB0byByZWplY3Qga2V5bGVzcyBCVEYgbWFwcy4KClRoaXMgaXMgY29yZSBrZXJuZWwgQlBGIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJvdGggc3lzY2FsbHMgYW5kIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcG90ZW50aWFsbHkgc3VidGxlLCBidXQgdGhleSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgdmFsaWRhdGlvbi4gSSYjMzk7bSBub3cgZ29pbmcgdG8gZmxhZyBpdCBhcyAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZS4mIzM0OwoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2J0Zl90eXBlX3NucHJpbnRmX3Nob3cmIzM0OywKICAgICYjMzQ7YnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MmIzM0OywKICAgICYjMzQ7YnBmX3NucHJpbnRmX2J0ZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgQlRGIHNob3cgcm91dGluZXMgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIHdoZW4gZGVhbGluZyB3aXRoIHZvaWQgbW9kaWZpZXJzIGFuZCBiYXNlIEJURnMsIGFuZCBhZGRzIGNoZWNrcyBpbiBodGFiX21hcF9jaGVja19idGYvcmh0YWJfbWFwX2NoZWNrX2J0ZiB0byByZWplY3QgaGFzaCBtYXBzIGNyZWF0ZWQgd2l0aCBrZXktbGVzcyBCVEZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGL0JURiB2YWxpZGF0aW9uIGFuZCBmb3JtYXR0aW5nIHBhdGhzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIEJQRiBoZWxwZXIgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93JiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX3NlcV9zaG93X2ZsYWdzJiMzNDssCiAgICAmIzM0O2JwZl9zbnByaW50Zl9idGYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gdGhlIEJURiBzaG93IHJvdXRpbmVzIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSB3aGVuIGRlYWxpbmcgd2l0aCB2b2lkIG1vZGlmaWVycyBhbmQgYmFzZSBCVEZzLCBhbmQgYWRkcyBjaGVja3MgaW4gaHRhYl9tYXBfY2hlY2tfYnRmL3JodGFiX21hcF9jaGVja19idGYgdG8gcmVqZWN0IGhhc2ggbWFwcyBjcmVhdGVkIHdpdGgga2V5LWxlc3MgQlRGcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRi9CVEYgdmFsaWRhdGlvbiBhbmQgZm9ybWF0dGluZyBwYXRocyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBCUEYgaGVscGVyIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXG5cblNwZWNpZmljYWxseTpcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXG4yLiBJbiBidGZfdmFyX3Nob3coKSwgaXQgY2hlY2tzIGlmIGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMgaXMgTlVMTCBiZWZvcmUgcmVzb2x2aW5nLCBmYWxsaW5nIGJhY2sgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBvciBleHBvc2Uga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgY3Jhc2hlcyBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTRkNjU4MDhlMGFiYTBmNWY0MDA3MWE0OTExMzVhNjYwYzViOWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTI6NDA6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTI5MTEsMTQgJiM0MzsyOTExLDMwIEBAIHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAllbHNlCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JYnRmX3R5cGVfb3BzKHQpLSZndDtzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwomIzQzOwkvKgomIzQzOwkgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gJiMzNDtjb25zdCB2b2lkJiMzNDspLCB3aGljaAomIzQzOwkgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXIKJiM0MzsJICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJ0Zl90eXBlX29wcyh0KSkKJiM0MzsJCWJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwomIzQzOwllbHNlCiYjNDM7CQlidGZfdHlwZV9vcHModCktJmd0O3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKIAkJCSB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsCiAJCQkgc3RydWN0IGJ0Zl9zaG93ICpzaG93KQogewotCXQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgJmFtcDt0eXBlX2lkKTsKJiM0MzsJLyoKJiM0MzsJICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtJmd0O3Jlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTAomIzQzOwkgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuCiYjNDM7CSAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CWlmIChidGYtJmd0O3Jlc29sdmVkX2lkcykKJiM0MzsJCXQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgJmFtcDt0eXBlX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC0mZ3Q7dHlwZSwgJmFtcDt0eXBlX2lkKTsKIAogCWJ0Zl90eXBlX29wcyh0KS0mZ3Q7c2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTUzMCw2ICYjNDM7NTMwLDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIHsKIAlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAKJiM0MzsJLyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi8KJiM0MzsJaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpCiAJCXJldHVybiAwOwogCS8qCkBAIC0zMTEwLDYgJiM0MzszMTE0LDEwIEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwogCiYjNDM7CS8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovCiYjNDM7CWlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE3ZDAzN2Y1N2E3ZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYwpAQCAtMCwwICYjNDM7MSw4MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluCiYjNDM7ICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy4KJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZQomIzQzOyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXMKJiM0MzsgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlcgomIzQzOyAqIHBhbmljX29uX29vcHMpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzKTsKJiM0MzsJY29uc3QgY2hhciAqcGF0aCA9ICYjMzQ7L3N5cy9mcy9icGYva2V5bGVzc19tYXAmIzM0OzsKJiM0MzsJX191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDsKJiM0MzsJY2hhciBidWZbMjU2XTsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJb3B0cy5tYXBfZmxhZ3MgPSBtYXBfZmxhZ3M7CiYjNDM7CW9wdHMuYnRmX2ZkID0gYnRmX2ZkOwomIzQzOwlvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQb3NpdGl2ZSBjb250cm9sOiB0aGUgc2FtZSBtYXAgd2l0aCBhIHJlYWwga2V5IHR5cGUgbXVzdCBiZSBhY2NlcHRlZCwKJiM0MzsJICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkCiYjNDM7CSAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS4KJiM0MzsJICovCiYjNDM7CW9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkOwomIzQzOwltYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgJiMzNDtrZXllZF9tYXAmIzM0OywgNCwgNCwgOCwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCAmIzM0O2tleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJY2xvc2UobWFwX2ZkKTsKJiM0MzsKJiM0MzsJLyogQSBrZXktbGVzcyBCVEYgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MzsJb3B0cy5idGZfa2V5X3R5cGVfaWQgPSAwOwomIzQzOwltYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgJiMzNDtrZXlsZXNzX21hcCYjMzQ7LCA0LCA0LCA4LCAmYW1wO29wdHMpOwomIzQzOwomIzQzOwlpZiAobWFwX2ZkICZndDs9IDApIHsKJiM0MzsJCS8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovCiYjNDM7CQkodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKJiM0MzsJCWlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHsKJiM0MzsJCQlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJCWlmIChmKSB7CiYjNDM7CQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkKJiM0MzsJCQkJCTsKJiM0MzsJCQkJZmNsb3NlKGYpOwomIzQzOwkJCX0KJiM0MzsJCQl1bmxpbmsocGF0aCk7CiYjNDM7CQl9CiYjNDM7CQljbG9zZShtYXBfZmQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtYXBfZmQsIC1FSU5WQUwsICYjMzQ7a2V5LWxlc3MgY3JlYXRlIGlzIHJlamVjdGVkJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21hcF9rZXlsZXNzKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgYnRmX2ZkLCB2YWxfaWQ7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfX25ld19lbXB0eSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmFsX2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgJiMzNDtpbnQmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsICYjMzQ7YnRmX19hZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCAmIzM0O2J0Zl9fbG9hZF9pbnRvX2tlcm5lbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlidGZfZmQgPSBidGZfX2ZkKGJ0Zik7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aGFzaCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyaGFzaCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMKQEAgLTAsMCAmIzQzOzEsODEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2J0Zl9zaG93X3ZvaWQuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGJwZl9zbnByaW50Zl9idGYoKSByZW5kZXJzIGEgdHlwZV9pZCB0YWtlbiBzdHJhaWdodCBmcm9tIHRoZSB2bWxpbnV4IEJURi4KJiM0MzsgKiBUd28gc3VjaCB0eXBlX2lkcyB1c2VkIHRvIE5VTEwtZGVyZWYgaW4gdGhlIEJURiBzaG93IHBhdGg6CiYjNDM7ICogICAtIGEgJiMzNDtjb25zdCB2b2lkJiMzNDsgKGEgbW9kaWZpZXIgcmVzb2x2aW5nIHRvIHZvaWQpIGluIGJ0Zl9tb2RpZmllcl9zaG93KCkKJiM0MzsgKiAgIC0gYSBCVEZfS0lORF9WQVIgaW4gYnRmX3Zhcl9zaG93KCkgKGJhc2UgQlRGIGhhcyBubyByZXNvbHZlZF9pZHMpCiYjNDM7ICogQSBmaXhlZCBrZXJuZWwgcmVuZGVycyBib3RoIHdpdGhvdXQgY3Jhc2hpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGxvbmcgcnVuKHN0cnVjdCBidGZfc2hvd192b2lkICpza2VsLCBfX3UzMiB0eXBlX2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTsKJiM0MzsJY2hhciBjdHhbOF0gPSB7fTsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0eXBlX2lkID0gdHlwZV9pZDsKJiM0MzsJdG9wdHMuY3R4X2luID0gY3R4OwomIzQzOwl0b3B0cy5jdHhfc2l6ZV9pbiA9IHNpemVvZihjdHgpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5kdW1wX3R5cGUpLAomIzQzOwkJCQkJICAgICAgJmFtcDt0b3B0cyksICYjMzQ7dGVzdF9ydW4mIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBza2VsLSZndDtic3MtJmd0O3JldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDsKJiM0MzsJc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWw7CiYjNDM7CWludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19wYXJzZSgmIzM0Oy9zeXMva2VybmVsL2J0Zi92bWxpbnV4JiMzNDssIE5VTEwpOwomIzQzOwlpZiAoIWJ0ZikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2J0ZjsKJiM0MzsKJiM0MzsJbiA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7IG4gJmFtcDsmYW1wOyAhKGN2ICZhbXA7JmFtcDsgdmFyKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBpKTsKJiM0MzsJCWlmICghY3YgJmFtcDsmYW1wOyBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCAmYW1wOyZhbXA7IHQtJmd0O3R5cGUgPT0gMCkKJiM0MzsJCQljdiA9IGk7CiYjNDM7CQkvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSYjMzk7cyBidWZmZXIuICovCiYjNDM7CQlpZiAoIXZhciAmYW1wOyZhbXA7IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikgewomIzQzOwkJCWxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtJmd0O3R5cGUpOwomIzQzOwomIzQzOwkJCWlmIChzeiAmZ3Q7IDAgJmFtcDsmYW1wOyBzeiAmbHQ7PSAobG9uZylzaXplb2Yoc2tlbC0mZ3Q7YnNzLSZndDtvYmopKQomIzQzOwkJCQl2YXIgPSBpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qICYjMzQ7Y29uc3Qgdm9pZCYjMzQ7IHJlbmRlcnMgdGhlICYjMzQ7Jmx0O3Vuc3VwcG9ydGVkIGtpbmQ6MCZndDsmIzM0OyBwbGFjZWhvbGRlci4gKi8KJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtjb25zdF92b2lkJiMzNDspKSB7CiYjNDM7CQlpZiAoY3YpIHsKJiM0MzsJCQlBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSwKJiM0MzsJCQkJICBzaXplb2YoJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7KSAtIDEsICYjMzQ7cmV0JiMzNDspOwomIzQzOwkJCUFTU0VSVF9TVFJFUShza2VsLSZndDtic3MtJmd0O291dCwgJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7LAomIzQzOwkJCQkgICAgICYjMzQ7cGxhY2Vob2xkZXImIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIEJURl9LSU5EX1ZBUiBtdXN0IHJlc29sdmUgYW5kIHJlbmRlciB3aXRob3V0IGVycm9yLiAqLwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZhciYjMzQ7KSkgewomIzQzOwkJaWYgKHZhcikKJiM0MzsJCQlBU1NFUlRfR1QocnVuKHNrZWwsIHZhciksIDAsICYjMzQ7cmV0JiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpOwomIzQzO291dF9idGY6CiYjNDM7CWJ0Zl9fZnJlZShidGYpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0YWY4MGZiYmI4MDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jCkBAIC0wLDAgJiM0MzsxLDI0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2J0Zl9wdHIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO19fdTMyIHR5cGVfaWQ7CiYjNDM7LyogQSBidWZmZXIgd2Ugb3duIHRvIHJlbmRlciB0aGUgc2VsZWN0ZWQgdHlwZSBmcm9tLCBrZXB0IGluIGJvdW5kcy4gKi8KJiM0MztjaGFyIG9ialsyNTZdOwomIzQzO2NoYXIgb3V0WzY0XTsKJiM0Mztsb25nIHJldDsKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IGR1bXBfdHlwZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX3B0ciBwdHIgPSB7CiYjNDM7CQkucHRyID0gb2JqLAomIzQzOwkJLnR5cGVfaWQgPSB0eXBlX2lkLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCAmYW1wO3B0ciwgc2l6ZW9mKHB0ciksIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSByZWxldmFudCBhcmVhcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgd2hpbGUgcG90ZW50aWFsbHkgY29tcGxleCBpbiB0aGVpciBsb2dpYywgbWlnaHQgYmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRvb2xzLgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvYnRmLmNgIGFyZSBkZWZpbml0ZWx5IHRoZSBtb3N0IGludGVyZXN0aW5nLiBXZSYjMzk7dmUgZ290IHR3byBzcGVjaWZpYyBhcmVhcyBvZiBmb2N1cyB3aXRoaW4gdGhhdCBmaWxlOiBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSW4gYGJ0Zl9tb2RpZmllcl9zaG93YCwgdGhlIGNvZGUgaXMgbm93IGhhbmRsaW5nIGNhc2VzIHdoZXJlIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSBgdm9pZGAgdHlwZSwgd2hpY2ggbGFja3MgYSBzaG93IG9wZXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBudWxsIGNoZWNrIHRvIGd1YXJkIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciBhbmQgdXRpbGl6ZXMgYGJ0Zl9kZl9zaG93YCBhcyBhIGZhbGxiYWNrLiBgYnRmX3Zhcl9zaG93YCBhZGp1c3RzIHRoZSByZXNvbHV0aW9uIGxvZ2ljIGZvciB2YXJpYWJsZSB0eXBlcywgcGFydGljdWxhcmx5IGFkZHJlc3NpbmcgY2FzZXMgd2l0aCBiYXNlIEJURnMgd2hlcmUgYGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzYCBpcyBOVUxMLiBUaGlzIGRpcmVjdCByZXNvbHZlIHVzaW5nIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AgbG9va3MgbGlrZSBhIGZpeCB0byBhdm9pZCBOVUxMIGRlcmVmZXJlbmNlcyBpbiBzcGVjaWZpYyBjb250ZXh0cy4gQm90aCBhcHBlYXIgdG8gYmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYSBjbGFzc2ljIEtBU0FOIHRhcmdldC4KCkluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIHRoZSBuZXcgY29kZSBpbiBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgIGV4cGxpY2l0bHkgZGlzYWxsb3dzIGhhc2ggbWFwcyB3aXRoIGtleS1sZXNzIEJURnMgdXNpbmcgYGJ0Zl90eXBlX2lzX3ZvaWRgLiBUaGlzIGlzIGEgdHlwZSBzYWZldHkgY2hlY2suIFRoZSBpbnRlcmVzdGluZyBjYXNlIGlzIGBidGZfdHlwZV9pc192b2lkYCwgd2hpY2ggbWlnaHQgb3BlbiB1cCBuZXcgY29kZSBwYXRocy4KCkZpbmFsbHksIHRoZSBhZGRlZCBzZWxmdGVzdHMgZm9yIGBidGZfbWFwX2tleWxlc3NgIGFuZCBgYnRmX3Nob3dfdm9pZGAgYXJlIGdvb2QgdG8gc2VlLiBUaGVzZSB3aWxsIG9mZmVyIHNvbWUgaW5pdGlhbCBjb3ZlcmFnZSBhbmQgdmFsaWRhdGlvbiwgYnV0IHRoZXkgbWlnaHQgbm90IGJlIGNvbXByZWhlbnNpdmUuCgpOb3csIEkmIzM5O2xsIGRpZyBpbnRvIGBidGZfZGZfc2hvd2AgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRob3NlIG51bGwgY2hlY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGRhdGEgZmxvd3MgYW5kIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIHRob3NlIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZWZmZWN0aXZlIEtBU0FOIGlzIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIHRoZSBjaGFuZ2VzIHByaW1hcmlseSB0YXJnZXQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdHlwZSBjaGVja3MsIEtBU0FOIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgdG9vbCBmb3IgdmFsaWRhdGlvbiBoZXJlLiBXaGlsZSBJJiMzOTtsbCBrZWVwIEtNU0FOIGluIG1pbmQsIGl0IHNlZW1zIGxlc3MgbGlrZWx5IHRvIHVuY292ZXIgc2lnbmlmaWNhbnQgbmV3IGlzc3VlcyBpbiB0aGlzIHNwZWNpZmljIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfZGZfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz0yMjYzPXN0YXRpYyBpbnQgYnRmX2RmX3Jlc29sdmUoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNjktXG5rZXJuZWwvYnBmL2J0Zi5jOjIyNzA6c3RhdGljIHZvaWQgYnRmX2RmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXHRcdFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MDQ9c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkxOS1cdGlmICghYnRmX3R5cGVfb3BzKHQpKVxua2VybmVsL2JwZi9idGYuYzoyOTIwOlx0XHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy0zMDIxLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6MzAyMjpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQ3ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ1bmNfcHJvdG9fb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDgwMC1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9mdW5jX3Byb3RvX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDItfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQ4NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ1bmNfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9yZWZfdHlwZV9sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjQ4NTA6XHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxua2VybmVsL2JwZi9idGYuYy00ODUxLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy01MTQwLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NTE0MTpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTUyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGRlY2xfdGFnX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTUyMzktXHQubG9nX2RldGFpbHMgPSBidGZfZGVjbF90YWdfbG9nLFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNTI0MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOgoKKipBbmFseXppbmcgYGtlcm5lbC9icGYvYnRmLmNgLCBMaW5lcyAyMjY1LTIyODAqKgoKUmlnaHQsIGxldCBtZSBwdWxsIHVwIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyMjY1LTIyODAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0LCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBkZWNvZGluZyBvciBwcm9jZXNzaW5nIHNvbWUgYXNwZWN0IG9mIHRoZW0uIEJhc2VkIG9uIHRoZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSB3aXRoaW4gYSBsYXJnZXIgZnVuY3Rpb24sIGxpa2VseSBhIGNvcmUgZnVuY3Rpb24gZm9yIHJlYWRpbmcsIHBhcnNpbmcsIG9yIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uLgoKSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgc29ydCBvZiBwb2ludGVyIG1hbmlwdWxhdGlvbiBvciBzdHJ1Y3R1cmUgbWVtYmVyIGFjY2VzcyBhdCB0aGlzIHJhbmdlLCBwZXJoYXBzIGRlYWxpbmcgd2l0aCBleHRyYWN0aW5nIHR5cGUgaW5mb3JtYXRpb24sIHJlc29sdmluZyByZWZlcmVuY2VzIGJldHdlZW4gdHlwZXMsIG9yIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuIElmIGl0JiMzOTtzIG5lYXIgdGhlIGVuZCBvZiBhIGJsb2NrLCBpdCBjb3VsZCBiZSB0aGUgZmluYWwgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgYmUgYW55IG9mIHRoZSBgYnRmX2AgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgZnJlcXVlbnRseSB1c2VkIGluIHRoZSBgYnBmL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc2NvcGUsIGl0IG1pZ2h0IGJlIGFib3V0IHRoZSBgYnRmX3R5cGVgIHN0cnVjdHVyZSwgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQlRGIGluZm9ybWF0aW9uLgoKSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgQlRGIGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQsIHBlcmhhcHMgY2FzdGluZyBzb21lIHNvcnQgb2YgZ2VuZXJpYyBkYXRhIGJ1ZmZlciBpbnRvIHNwZWNpZmljIEJURiBzdHJ1Y3R1cmVzLCBvciBtYXliZSB2ZXJpZnlpbmcgc29tZSBmaWVsZCB2YWx1ZXMgYWdhaW5zdCBleHBlY3RlZCByYW5nZXMuIEl0IGNvdWxkIGludm9sdmUgY2hlY2tpbmcgdHlwZSBJRHMsIG1lbWJlciBvZmZzZXRzLCBvciBhbnkgb3RoZXIgc3RydWN0dXJhbCBlbGVtZW50IHJlbGV2YW50IHRvIHRoZSBCVEYgZm9ybWF0LiBLbm93aW5nIHRoZSBleGFjdCBmdW5jdGlvbiBzdXJyb3VuZGluZyB0aGlzIGNvZGUgYmxvY2sgd291bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQsIGJ1dCBqdXN0IGZyb20gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBCVEYtcmVsYXRlZCBvcGVyYXRpb24gdG8gb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NTpcdHtcbjIyNjY6XHRcdGJ0Zl92ZXJpZmllcl9sb2dfYmFzaWMoZW52LCB2LVx1MDAzZXQsIFwmIzM0O1Vuc3VwcG9ydGVkIHJlc29sdmVcJiMzNDspO1xuMjI2NzpcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjY4Olx0fVxuMjI2OTpcdFxuMjI3MDpcdHN0YXRpYyB2b2lkIGJ0Zl9kZl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuMjI3MTpcdFx0XHRcdHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldHMsXG4yMjcyOlx0XHRcdFx0c3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjI3MzpcdHtcbjIyNzQ6XHRcdGJ0Zl9zaG93KHNob3csIFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6JXVcdTAwM2VcJiMzNDssIEJURl9JTkZPX0tJTkQodC1cdTAwM2VpbmZvKSk7XG4yMjc1Olx0fVxuMjI3NjpcdFxuMjI3NzpcdHN0YXRpYyBpbnQgYnRmX2ludF9jaGVja19tZW1iZXIoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcbjIyNzg6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3RydWN0X3R5cGUsXG4yMjc5Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuMjI4MDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZSlcbjIyODE6XHR7XG4yMjgyOlx0XHR1MzIgaW50X2RhdGEgPSBidGZfdHlwZV9pbnQobWVtYmVyX3R5cGUpO1xuMjI4MzpcdFx0dTMyIHN0cnVjdF9iaXRzX29mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQ7XG4yMjg0Olx0XHR1MzIgc3RydWN0X3NpemUgPSBzdHJ1Y3RfdHlwZS1cdTAwM2VzaXplO1xuMjI4NTpcdFx0dTMyIG5yX2NvcHlfYml0cztcbjIyODY6XHRcdHUzMiBieXRlc19vZmZzZXQ7XG4yMjg3Olx0XG4yMjg4Olx0XHRpZiAoVTMyX01BWCAtIHN0cnVjdF9iaXRzX29mZiBcdTAwM2MgQlRGX0lOVF9PRkZTRVQoaW50X2RhdGEpKSB7XG4yMjg5Olx0XHRcdGJ0Zl92ZXJpZmllcl9sb2dfbWVtYmVyKGVudiwgc3RydWN0X3R5cGUsIG1lbWJlcixcbjIyOTA6XHRcdFx0XHRcdFx0XCYjMzQ7Yml0c19vZmZzZXQgZXhjZWVkcyBVMzJfTUFYXCYjMzQ7KTtcbjIyOTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjkyOlx0XHR9XG4yMjkzOlx0XG4yMjk0Olx0XHRzdHJ1Y3RfYml0c19vZmYgJiM0Mzs9IEJURl9JTlRfT0ZGU0VUKGludF9kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIEJURiBJbnNwZWN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5zcGVjdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGJlaW5nIGRpc3BsYXllZCwgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB2YXJpYWJsZSBwcmVzZW50YXRpb24gd2l0aGluIHRoZSBCVEYgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBkaWRuJiMzOTt0IGZ1bGx5IHNhdGlzZnkgbXkgbmVlZCBmb3IgYSBkZWVwIHVuZGVyc3RhbmRpbmcuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgZnVuY3Rpb25zIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmVzIDI5MDAgdG8gMjk0MC4gVGhpcyByYW5nZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgaW50ZWdyYXRlZCBhbmQgcmVuZGVyZWQgaW4gdGhlIG91dHB1dC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBmdXJ0aGVyIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uIGNvdWxkIGJlIG5lZWRlZC4gVGhpcyBmb2N1c2VkIGludmVzdGlnYXRpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmUgZGV0YWlsIEkgYW0gc2Vla2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTAwOlx0XG4yOTAxOlx0XHRyZXR1cm4gMDtcbjI5MDI6XHR9XG4yOTAzOlx0XG4yOTA0Olx0c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuMjkwNTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbjI5MDY6XHRcdFx0XHQgICAgICB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSxcbjI5MDc6XHRcdFx0XHQgICAgICB1OCBiaXRzX29mZnNldCwgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjkwODpcdHtcbjI5MDk6XHRcdGlmIChidGYtXHUwMDNlcmVzb2x2ZWRfaWRzKVxuMjkxMDpcdFx0XHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFx1MDAyNnR5cGVfaWQpO1xuMjkxMTpcdFx0ZWxzZVxuMjkxMjpcdFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbjI5MTM6XHRcbjI5MTQ6XHRcdC8qXG4yOTE1Olx0XHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXCYjMzQ7Y29uc3Qgdm9pZFwmIzM0OyksIHdoaWNoXG4yOTE2Olx0XHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbjI5MTc6XHRcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuMjkxODpcdFx0ICovXG4yOTE5Olx0XHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbjI5MjA6XHRcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4yOTIxOlx0XHRlbHNlXG4yOTIyOlx0XHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuMjkyMzpcdH1cbjI5MjQ6XHRcbjI5MjU6XHRzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4yOTI2Olx0XHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbjI5Mjc6XHRcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjkyODpcdHtcbjI5Mjk6XHRcdC8qXG4yOTMwOlx0XHQgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcbjI5MzE6XHRcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cbjI5MzI6XHRcdCAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbjI5MzM6XHRcdCAqL1xuMjkzNDpcdFx0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4yOTM1Olx0XHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4yOTM2Olx0XHRlbHNlXG4yOTM3Olx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4yOTM4Olx0XG4yOTM5Olx0XHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbjI5NDA6XHR9XG4yOTQxOlx0XG4yOTQyOlx0c3RhdGljIHZvaWQgYnRmX3B0cl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuMjk0MzpcdFx0XHRcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXG4yOTQ0Olx0XHRcdFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJQRiBoYXNodGFibGUgdmVyaWZpY2F0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbnMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zLCBwcmVzdW1hYmx5LCB2YWxpZGF0ZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgcmVndWxhciBhbmQgcmUtaGFzaGVkIGhhc2h0YWJsZXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBjb25jZXJuLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIG1lbnRhbGx5IHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hlY2tzIHBlcmZvcm1lZCBmb3IgcHJvZ3JhbSBzZWN1cml0eSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjU6XHRcdHJldHVybiAwO1xuIDUyNjpcdH1cbiA1Mjc6XHRcbiA1Mjg6XHRzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gNTI5Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuIDUzMDpcdHtcbiA1MzE6XHRcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiA1MzI6XHRcbiA1MzM6XHRcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4gNTM0Olx0XHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4gNTM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUzNjpcdFxuIDUzNzpcdFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gNTM4Olx0XHRcdHJldHVybiAwO1xuIDUzOTpcdFx0LypcbiA1NDA6XHRcdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCYjMzk7cyBCVEYgcmVjb3JkIGlzIG5vdFxuIDU0MTpcdFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIDU0MjpcdFx0ICovXG4gNTQzOlx0XHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4gNTQ0Olx0XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4gNTQ1Olx0XHRlbHNlXG4gNTQ2Olx0XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbiA1NDc6XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaXRzIHJvbGUgYW5kIGVuc3VyZSBpdCYjMzk7cyBub3QgdGhlIHNvdXJjZSBvciBhIGNvbnRyaWJ1dGluZyBmYWN0b3IgdG8gd2hhdGV2ZXIgcHJvYmxlbSB3ZSYjMzk7cmUgdHJhY2tpbmcgZG93bi4gR290dGEgYmUgbWV0aG9kaWNhbCBhbmQgY292ZXIgYWxsIHRoZSBiYXNlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0by4uLiB3ZWxsLCBJJiMzOTtsbCBuZWVkIG1vcmUgY29udGV4dCB0byBrbm93IHdoYXQgaXQgaXMgcmVsYXRlZCB0bywgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgbWFrZSBzdXJlIGl0IGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTA1Olx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbjMxMDY6XHRcdFx0XHRcdG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSAmIzQzOyByb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbjMxMDc6XHRcbjMxMDg6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4zMTA5Olx0fVxuMzExMDpcdFxuMzExMTpcdHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4zMTEyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4zMTEzOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbjMxMTQ6XHR7XG4zMTE1Olx0XHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4zMTE2Olx0XG4zMTE3Olx0XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuMzExODpcdFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuMzExOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMjA6XHRcbjMxMjE6XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuMzEyMjpcdH1cbjMxMjM6XHRcbjMxMjQ6XHRzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDI4NAoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gRGVjaXNpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCB0aGUgS01TQU4gZnV6emluZy4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBjaGFuZ2VzLiBJbiBga2VybmVsL2JwZi9idGYuY2AsIHdlJiMzOTtyZSBoYXJkZW5pbmcgYWdhaW5zdCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBTcGVjaWZpY2FsbHksIGBidGZfbW9kaWZpZXJfc2hvd2AgaXMgYmVpbmcgcGF0Y2hlZCB0byBoYW5kbGUgdGhlIGB2b2lkYCBtb2RpZmllciBncmFjZWZ1bGx5IGFuZCBgYnRmX3Zhcl9zaG93YCBpcyBoYW5kbGluZyBhIHBvdGVudGlhbCBOVUxMIGByZXNvbHZlZF9pZHNgIHBvaW50ZXIgaW4gYmFzZSBCVEYgc2NlbmFyaW9zLiBHb29kLCBkZWZlbnNpdmUgY29kaW5nLiBUaGVuLCB3ZSBzZWUgdGhhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gcmVqZWN0IGtleS1sZXNzIEJURiBtYXBzLCBhZ2FpbiwgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGxhdGVyIGluIHRoZSBgYnBmZnNgIGR1bXAgb3BlcmF0aW9uLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyB0aGUgYWRkaXRpb24gb2Ygc2VsZnRlc3RzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEFyZSB3ZSBzZW5kaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHdpdGggZ2FyYmFnZSBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZS4gQXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZW0/IE5vdCBoYXBwZW5pbmcgaGVyZS4gTmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzIGludHJvZHVjZWQ/IE5vLiBBcmUgYm91bmRzIGNoZWNrcyBiZWluZyByZWxheGVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGJ1Z3MgYmVpbmcgZml4ZWQgYXJlIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggS0FTQU4sIGFuZCB0aGUga2VybmVsJiMzOTtzIG5vcm1hbCBvb3BzIHN5c3RlbSBzaG91bGQgY2F0Y2guIFNvLCBub3QgS01TQU4gbWF0ZXJpYWwuCgpUaGF0IHRha2VzIGNhcmUgb2YgdGhlIHRlY2huaWNhbCByZXZpZXcsIGJ1dCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZyBLTVNBTi4KCk15IHJ1bGUgb2YgdGh1bWIgaXM6IGlmIGEgYnVnIGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIG9yIHNpbWlsYXIsIHdlICpkb24mIzM5O3QqIHJ1biBhIEtNU0FOIHNlc3Npb24uIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZTsgd2UgdXNlIGl0IG9ubHkgd2hlbiB3ZSBoYXZlIHRvLiBUaGUgY29kZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IEtNU0FOIGFsb25lIGNhbiBkZXRlY3QuCgpUaGVyZWZvcmUsIHRoaXMgaXMgY2xlYXI6IEkmIzM5O2xsIGludm9rZSBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcgSSBqdXN0IGxhaWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQwOjMzLjA4NzIxOTc5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA0MzA0OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gdGhlIEJURiBzaG93IHJvdXRpbmVzIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSB3aGVuIGRlYWxpbmcgd2l0aCB2b2lkIG1vZGlmaWVycyBhbmQgYmFzZSBCVEZzLCBhbmQgYWRkcyBjaGVja3MgaW4gaHRhYl9tYXBfY2hlY2tfYnRmL3JodGFiX21hcF9jaGVja19idGYgdG8gcmVqZWN0IGhhc2ggbWFwcyBjcmVhdGVkIHdpdGgga2V5LWxlc3MgQlRGcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRi9CVEYgdmFsaWRhdGlvbiBhbmQgZm9ybWF0dGluZyBwYXRocyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBCUEYgaGVscGVyIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MDozMy4wODcyMjM3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzI0NTc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTRkNjU4MDhlMGFiYTBmNWY0MDA3MWE0OTExMzVhNjYwYzViOWJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEyOjQwOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuaW5kZXggOTFiOGNlNzdmNjk5YS4uM2NmMzVlZTQ5YzEwMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXFxuKysrIGIva2VybmVsL2JwZi9idGYuY1xcbkBAIC0yOTExLDE0ICsyOTExLDMwIEBAIHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG4gXFxuLVxcdGJ0Zl90eXBlX29wcyh0KS1cXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcXG4rXFx0LypcXG4rXFx0ICogQSBtb2RpZmllciBjYW4gcmVzb2x2ZSB0byB0aGUgdm9pZCB0eXBlIChlLmcuIFxcXCJjb25zdCB2b2lkXFxcIiksIHdoaWNoXFxuK1xcdCAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlclxcbitcXHQgKiBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgTlVMTC5cXG4rXFx0ICovXFxuK1xcdGlmICghYnRmX3R5cGVfb3BzKHQpKVxcbitcXHRcXHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4gXFx0XFx0XFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4ge1xcbi1cXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4rXFx0LypcXG4rXFx0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXFx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxcbitcXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXFxuK1xcdCAqIFJlc29sdmUgdGhlIHZhcidzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJ0Zi1cXHUwMDNlcmVzb2x2ZWRfaWRzKVxcbitcXHRcXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2dHlwZV9pZCk7XFxuIFxcbiBcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjQzMTIzNDI0MTgzYzcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC01MzAsNiArNTMwLDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcbitcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuIFxcbitcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuY1xcbkBAIC0wLDAgKzEsODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIEEgaGFzaCBtYXAgd2l0aCBhIGtleS1sZXNzIEJURiAoYnRmX2tleV90eXBlX2lkID09IDApIHVzZWQgdG8gTlVMTC1kZXJlZiBpblxcbisgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLlxcbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxcbisgKiBwaW4tYW5kLXJlYWQgYmVsb3cgZGVsaWJlcmF0ZWx5IHdhbGtzIHRoYXQgYnBmZnMgZHVtcCBwYXRoLCBzbyBpdCBkb3VibGVzXFxuKyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyXFxuKyAqIHBhbmljX29uX29vcHMpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzKTtcXG4rXFx0Y29uc3QgY2hhciAqcGF0aCA9IFxcXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFxcXCI7XFxuK1xcdF9fdTMyIGtleSA9IDEsIHZhbCA9IDB4NDE0MjQzNDQ7XFxuK1xcdGNoYXIgYnVmWzI1Nl07XFxuK1xcdGludCBtYXBfZmQ7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFncztcXG4rXFx0b3B0cy5idGZfZmQgPSBidGZfZmQ7XFxuK1xcdG9wdHMuYnRmX3ZhbHVlX3R5cGVfaWQgPSB2YWxfaWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQb3NpdGl2ZSBjb250cm9sOiB0aGUgc2FtZSBtYXAgd2l0aCBhIHJlYWwga2V5IHR5cGUgbXVzdCBiZSBhY2NlcHRlZCxcXG4rXFx0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXFxuK1xcdCAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS5cXG4rXFx0ICovXFxuK1xcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xcbitcXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXFxcImtleWVkX21hcFxcXCIsIDQsIDQsIDgsIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcXFwia2V5ZWQgY3JlYXRlIGlzIGFjY2VwdGVkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rXFxuK1xcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXFxuK1xcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gMDtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFxcXCJrZXlsZXNzX21hcFxcXCIsIDQsIDQsIDgsIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmIChtYXBfZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHQvKiBVbmZpeGVkIGtlcm5lbDogcmVwcm9kdWNlIHRoZSBvb3BzIHZpYSB0aGUgYnBmZnMgZHVtcCBwYXRoLiAqL1xcbitcXHRcXHQodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgMCk7XFxuK1xcdFxcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcXG4rXFx0XFx0XFx0ZiA9IGZvcGVuKHBhdGgsIFxcXCJyXFxcIik7XFxuK1xcdFxcdFxcdGlmIChmKSB7XFxuK1xcdFxcdFxcdFxcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSlcXG4rXFx0XFx0XFx0XFx0XFx0O1xcbitcXHRcXHRcXHRcXHRmY2xvc2UoZik7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW5saW5rKHBhdGgpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNsb3NlKG1hcF9mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdEFTU0VSVF9FUShtYXBfZmQsIC1FSU5WQUwsIFxcXCJrZXktbGVzcyBjcmVhdGUgaXMgcmVqZWN0ZWRcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxcbit7XFxuK1xcdGludCBidGZfZmQsIHZhbF9pZDtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXG4rXFx0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXFxcImJ0Zl9fbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZhbF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFxcXCJpbnRcXFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgXFxcImJ0Zl9fYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcXFwiYnRmX19sb2FkX2ludG9fa2VybmVsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaGFzaFxcXCIpKVxcbitcXHRcXHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9IQVNILCAwLCBidGZfZmQsIHZhbF9pZCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJyaGFzaFxcXCIpKVxcbitcXHRcXHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9SSEFTSCwgQlBGX0ZfTk9fUFJFQUxMT0MsIGJ0Zl9mZCwgdmFsX2lkKTtcXG4rb3V0OlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jXFxuQEAgLTAsMCArMSw4MSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcXFwiXFxuK1xcbisvKlxcbisgKiBicGZfc25wcmludGZfYnRmKCkgcmVuZGVycyBhIHR5cGVfaWQgdGFrZW4gc3RyYWlnaHQgZnJvbSB0aGUgdm1saW51eCBCVEYuXFxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcXG4rICogICAtIGEgXFxcImNvbnN0IHZvaWRcXFwiIChhIG1vZGlmaWVyIHJlc29sdmluZyB0byB2b2lkKSBpbiBidGZfbW9kaWZpZXJfc2hvdygpXFxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcXG4rICogQSBmaXhlZCBrZXJuZWwgcmVuZGVycyBib3RoIHdpdGhvdXQgY3Jhc2hpbmcuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0Y2hhciBjdHhbOF0gPSB7fTtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XFxuK1xcdHRvcHRzLmN0eF9pbiA9IGN0eDtcXG4rXFx0dG9wdHMuY3R4X3NpemVfaW4gPSBzaXplb2YoY3R4KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZHVtcF90eXBlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRvcHRzKSwgXFxcInRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmV0O1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX3Nob3dfdm9pZCh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcXG4rXFx0c3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWw7XFxuK1xcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZjtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fcGFyc2UoXFxcIi9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFxcIiwgTlVMTCk7XFxuK1xcdGlmICghYnRmKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gYnRmX3Nob3dfdm9pZF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9idGY7XFxuK1xcbitcXHRuID0gYnRmX190eXBlX2NudChidGYpO1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbiBcXHUwMDI2XFx1MDAyNiAhKGN2IFxcdTAwMjZcXHUwMDI2IHZhcik7IGkrKykge1xcbitcXHRcXHR0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgaSk7XFxuK1xcdFxcdGlmICghY3YgXFx1MDAyNlxcdTAwMjYgYnRmX2tpbmQodCkgPT0gQlRGX0tJTkRfQ09OU1QgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNldHlwZSA9PSAwKVxcbitcXHRcXHRcXHRjdiA9IGk7XFxuK1xcdFxcdC8qIFBpY2sgYSBWQVIgc21hbGwgZW5vdWdoIHRvIHJlbmRlciBmcm9tIHRoZSBwcm9ncmFtJ3MgYnVmZmVyLiAqL1xcbitcXHRcXHRpZiAoIXZhciBcXHUwMDI2XFx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9WQVIpIHtcXG4rXFx0XFx0XFx0bG9uZyBzeiA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgdC1cXHUwMDNldHlwZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoc3ogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHN6IFxcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW9iaikpXFxuK1xcdFxcdFxcdFxcdHZhciA9IGk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogXFxcImNvbnN0IHZvaWRcXFwiIHJlbmRlcnMgdGhlIFxcXCJcXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXFx1MDAzZVxcXCIgcGxhY2Vob2xkZXIuICovXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjb25zdF92b2lkXFxcIikpIHtcXG4rXFx0XFx0aWYgKGN2KSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9FUShydW4oc2tlbCwgY3YpLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFxcdTAwM2VcXFwiKSAtIDEsIFxcXCJyZXRcXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX1NUUkVRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlb3V0LCBcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFxcdTAwM2VcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJwbGFjZWhvbGRlclxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQSBCVEZfS0lORF9WQVIgbXVzdCByZXNvbHZlIGFuZCByZW5kZXIgd2l0aG91dCBlcnJvci4gKi9cXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInZhclxcXCIpKSB7XFxuK1xcdFxcdGlmICh2YXIpXFxuK1xcdFxcdFxcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXFxcInJldFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0fVxcbitcXG4rXFx0YnRmX3Nob3dfdm9pZF9fZGVzdHJveShza2VsKTtcXG4rb3V0X2J0ZjpcXG4rXFx0YnRmX19mcmVlKGJ0Zik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0YWY4MGZiYmI4MDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuY1xcbkBAIC0wLDAgKzEsMjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFxcImJ0Zl9wdHIuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rX191MzIgdHlwZV9pZDtcXG4rLyogQSBidWZmZXIgd2Ugb3duIHRvIHJlbmRlciB0aGUgc2VsZWN0ZWQgdHlwZSBmcm9tLCBrZXB0IGluIGJvdW5kcy4gKi9cXG4rY2hhciBvYmpbMjU2XTtcXG4rY2hhciBvdXRbNjRdO1xcbitsb25nIHJldDtcXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcXG4rXFx0XFx0LnB0ciA9IG9iaixcXG4rXFx0XFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxcbitcXHRcXHQuZmxhZ3MgPSAwLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCBcXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6MzQuNDYwMjc5NzY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjM2MDg0NjE3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3R5cGVfc25wcmludGZfc2hvd1wiLFxuICAgIFwiYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NcIixcbiAgICBcImJwZl9zbnByaW50Zl9idGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgQlRGIHNob3cgcm91dGluZXMgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIHdoZW4gZGVhbGluZyB3aXRoIHZvaWQgbW9kaWZpZXJzIGFuZCBiYXNlIEJURnMsIGFuZCBhZGRzIGNoZWNrcyBpbiBodGFiX21hcF9jaGVja19idGYvcmh0YWJfbWFwX2NoZWNrX2J0ZiB0byByZWplY3QgaGFzaCBtYXBzIGNyZWF0ZWQgd2l0aCBrZXktbGVzcyBCVEZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGL0JURiB2YWxpZGF0aW9uIGFuZCBmb3JtYXR0aW5nIHBhdGhzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIEJQRiBoZWxwZXIgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI5MTEsMTQgKzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ZWxzZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuK1x0LypcbitcdCAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiBcImNvbnN0IHZvaWRcIiksIHdoaWNoXG4rXHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbitcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuK1x0ICovXG4rXHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbitcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4rXHRlbHNlXG4rXHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuIHtcbi1cdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHQvKlxuK1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4rXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXG4rXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4rXHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHRlbHNlXG4rXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4gXG4gXHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTUzMCw2ICs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbitcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4rXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4rXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuK1x0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgKzEsODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuK1xuKy8qXG4rICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluXG4rICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy5cbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuKyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXNcbisgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlclxuKyAqIHBhbmljX29uX29vcHMpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyk7XG4rXHRjb25zdCBjaGFyICpwYXRoID0gXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwiO1xuK1x0X191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRpbnQgbWFwX2ZkO1xuK1x0RklMRSAqZjtcbitcbitcdG9wdHMubWFwX2ZsYWdzID0gbWFwX2ZsYWdzO1xuK1x0b3B0cy5idGZfZmQgPSBidGZfZmQ7XG4rXHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuK1xuK1x0LypcbitcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuK1x0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXG4rXHQgKiByZWplY3Rpb24gKGUuZy4gYW4gdW5rbm93biBtYXAgdHlwZSkuXG4rXHQgKi9cbitcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwia2V5ZWRfbWFwXCIsIDQsIDQsIDgsIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImtleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbitcbitcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4rXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCJrZXlsZXNzX21hcFwiLCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbitcbitcdGlmIChtYXBfZmQgXHUwMDNlPSAwKSB7XG4rXHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4rXHRcdCh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcbitcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0XHRcdGlmIChmKSB7XG4rXHRcdFx0XHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpXG4rXHRcdFx0XHRcdDtcbitcdFx0XHRcdGZjbG9zZShmKTtcbitcdFx0XHR9XG4rXHRcdFx0dW5saW5rKHBhdGgpO1xuK1x0XHR9XG4rXHRcdGNsb3NlKG1hcF9mZCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobWFwX2ZkLCAtRUlOVkFMLCBcImtleS1sZXNzIGNyZWF0ZSBpcyByZWplY3RlZFwiKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuK3tcbitcdGludCBidGZfZmQsIHZhbF9pZDtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9fbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsIFwiYnRmX19hZGRfaW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcImJ0Zl9fbG9hZF9pbnRvX2tlcm5lbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpO1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNzMyMzJkYzJhMDQ1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbkBAIC0wLDAgKzEsODEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcIlxuK1xuKy8qXG4rICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcbisgKiAgIC0gYSBcImNvbnN0IHZvaWRcIiAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKVxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcbisgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbisgKi9cbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdGNoYXIgY3R4WzhdID0ge307XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0eXBlX2lkID0gdHlwZV9pZDtcbitcdHRvcHRzLmN0eF9pbiA9IGN0eDtcbitcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmR1bXBfdHlwZSksXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbitcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX3BhcnNlKFwiL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcIiwgTlVMTCk7XG4rXHRpZiAoIWJ0Zikge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0X2J0ZjtcbitcbitcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiAhKGN2IFx1MDAyNlx1MDAyNiB2YXIpOyBpKyspIHtcbitcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpO1xuK1x0XHRpZiAoIWN2IFx1MDAyNlx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCBcdTAwMjZcdTAwMjYgdC1cdTAwM2V0eXBlID09IDApXG4rXHRcdFx0Y3YgPSBpO1xuK1x0XHQvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSdzIGJ1ZmZlci4gKi9cbitcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuK1x0XHRcdGxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtXHUwMDNldHlwZSk7XG4rXG4rXHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuK1x0XHRcdFx0dmFyID0gaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogXCJjb25zdCB2b2lkXCIgcmVuZGVycyB0aGUgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIiBwbGFjZWhvbGRlci4gKi9cbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29uc3Rfdm9pZFwiKSkge1xuK1x0XHRpZiAoY3YpIHtcbitcdFx0XHRBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSxcbitcdFx0XHRcdCAgc2l6ZW9mKFwiXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXHUwMDNlXCIpIC0gMSwgXCJyZXRcIik7XG4rXHRcdFx0QVNTRVJUX1NUUkVRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW91dCwgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIixcbitcdFx0XHRcdCAgICAgXCJwbGFjZWhvbGRlclwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInZhclwiKSkge1xuK1x0XHRpZiAodmFyKVxuK1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCJyZXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpO1xuK291dF9idGY6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40NGFmODBmYmJiODA4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcImJ0Zl9wdHIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitfX3UzMiB0eXBlX2lkO1xuKy8qIEEgYnVmZmVyIHdlIG93biB0byByZW5kZXIgdGhlIHNlbGVjdGVkIHR5cGUgZnJvbSwga2VwdCBpbiBib3VuZHMuICovXG4rY2hhciBvYmpbMjU2XTtcbitjaGFyIG91dFs2NF07XG4rbG9uZyByZXQ7XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcbitcdFx0LnB0ciA9IG9iaixcbitcdFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHJldCA9IGJwZl9zbnByaW50Zl9idGYob3V0LCBzaXplb2Yob3V0KSwgXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6MzQuNDYwMjgwOTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM5NDE5OTcwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBiaXQgb2YgYSBudWFuY2VkIGFyZWEsIGJ1dCB0aGUgY29yZSBvZiBpdCBpcyB3aGV0aGVyIHRoZXNlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb3VsZCBpbnRyb2R1Y2UgbmV3IHBhdGhzIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGZ1enppbmcgY291bGQgcG90ZW50aWFsbHkgdW5jb3Zlci5cblxuRmlyc3QsIGxldCBtZSBhbmFseXplIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIEkgc2VlIGFkanVzdG1lbnRzIHRvIGBidGZfbW9kaWZpZXJfc2hvd2Agd2l0aGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5IGFyZSBhZGRpbmcgbnVsbCBjaGVja3MgYGlmICghYnRmX3R5cGVfb3BzKHQpKWAgd2hlbiBza2lwcGluZyBtb2RpZmllcnMgcmVzb2x2ZXMgdG8gdm9pZCB0eXBlLiBUaGlzIGxvZ2ljIGNoYW5nZSBtaWdodCBiZSBpbnRlcmVzdGluZy4gVGhlIGFkZGVkIGNhbGwgdG8gYGJ0Zl9kZl9zaG93KClgIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBTaW1pbGFybHksIHRoZSBjaGVjayBpbiBgYnRmX3Zhcl9zaG93YCB3aXRoIGBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzYCB2ZXJzdXMgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAsIG5vdyBleHBsaWNpdGx5IHJlamVjdCB2b2lkIGtleSB0eXBlcyB3aXRoIGBpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgbGlrZWx5IGEgaGFyZGVuaW5nIG1lYXN1cmUsIGJ1dCBhbnl0aW1lIHRoZXJlIGFyZSBuZXcgZXJyb3IgY2hlY2tzLCB0aGVyZSdzIGEgY2hhbmNlIHRoZSBlcnJvciBoYW5kbGluZyBpdHNlbGYgY291bGQgYmUgZmxhd2VkLiBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgZXJyb3IgcmV0dXJucyB0by5cblxuRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBuZXcgc2VsZnRlc3RzLCBgYnRmX21hcF9rZXlsZXNzLmNgLCBgYnRmX3Nob3dfdm9pZC5jYCwgYW5kIGBidGZfc2hvd192b2lkLmNgIGluZGljYXRlcyB0aGUgZGV2ZWxvcGVycyBhcmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgYXJlIGFjdGl2ZWx5IHRlc3RpbmcgdGhlbSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEhvd2V2ZXIsIHRoZXkgbWlnaHQgbm90IGJlIHRlc3RpbmcgdGhlIGZ1bGwgc3RhdGUgc3BhY2UuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgdGVzdHMsIGFuZCB0aGVuIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGFmZmVjdGVkIGNvZGUgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlIGVub3VnaC4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB0cnVseSBuZWNlc3NhcnksIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgdGFyZ2V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6NDguNDAyMjgwMzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjE0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3Nob3d8YnRmX21vZGlmaWVyX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTM1MD1jb25zdCBjaGFyICpidGZfdHlwZV9zdHIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zNzgtICogdGhlaXIgb3duIGRhdGEgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHN0cnVjdCBidGZfc2hvdyBhbmQgY29uc3VsdCBpdFxcbmtlcm5lbC9icGYvYnRmLmM6Mzc5OiAqIGluIHRoZSBzaG93IGNhbGxiYWNrLiAgU2VlIGJ0Zl90eXBlX3Nob3coKSBiZWxvdy5cXG5rZXJuZWwvYnBmL2J0Zi5jLTM4MC0gKlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0xMDc3PXN0YXRpYyBjb25zdCBjaGFyICpidGZfc2hvd19uYW1lKHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMTExMy1cXHQgKiBTdGFydCB3aXRoIHR5cGVfaWQsIGFzIHdlIGhhdmUgcmVzb2x2ZWQgdGhlIHN0cnVjdCBidGZfdHlwZSAqXFxua2VybmVsL2JwZi9idGYuYzoxMTE0OlxcdCAqIHZpYSBidGZfbW9kaWZpZXJfc2hvdygpIHBhc3QgdGhlIHBhcmVudCB0eXBlZGVmIHRvIHRoZSBjaGlsZFxcbmtlcm5lbC9icGYvYnRmLmMtMTExNS1cXHQgKiBzdHJ1Y3QsIGludCBldGMgaXQgaXMgZGVmaW5lZCBhcy4gIEluIHN1Y2ggY2FzZXMsIHRoZSB0eXBlX2lkXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI4NDc9c3RhdGljIGludCBidGZfcHRyX3Jlc29sdmUoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjkwMy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MDQ6c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbmtlcm5lbC9icGYvYnRmLmMtMjkwNS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIG1vZGlmaWVyX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjk3MS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6Mjk3MjpcXHQuc2hvdyA9IGJ0Zl9tb2RpZmllcl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtMjk3My19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNTctXFxua2VybmVsL2JwZi9idGYuYzo4MjU4OnN0YXRpYyB2b2lkIGJ0Zl90eXBlX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxcbmtlcm5lbC9icGYvYnRmLmMtODI1OS1cXHRcXHRcXHQgIHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODI3Nj1pbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODI4NC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgyODU6XFx0YnRmX3R5cGVfc2hvdyhidGYsIHR5cGVfaWQsIG9iaiwgXFx1MDAyNnNzZXEpO1xcbmtlcm5lbC9icGYvYnRmLmMtODI4Ni1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODMyNj1pbnQgYnRmX3R5cGVfc25wcmludGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMzYtXFxua2VybmVsL2JwZi9idGYuYzo4MzM3OlxcdGJ0Zl90eXBlX3Nob3coYnRmLCB0eXBlX2lkLCBvYmosIChzdHJ1Y3QgYnRmX3Nob3cgKilcXHUwMDI2c3NucHJpbnRmKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQwOjQ4LjQ0ODg5ODE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzYyMDc5Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBhbmQgQlRGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGFuZCBCVEYgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCBhIGxpc3Qgb2YgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCB0aGluayBoYXNodGFibGVzLCBldGMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSB3aGF0J3MgYmVpbmcgZG9uZS4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQgSSBuZWVkIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6MDAuMjEwOTc5NDUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDkwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0ZlxcXFwub3xoYXNodGFiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTowMC4yNTk0NzUxMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDczNjEzODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIFN5c2NhbGwgYW5kIEJURiBDb25maWd1cmF0aW9uIElzc3VlcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYXMgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBCUEYgcHJvZ3JhbSBleGVjdXRpb24gdmlhIHN5c2NhbGxzLiBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgY2hlY2tpbmcgYERFQlVHX0lORk9fQlRGYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBCVEYuIEknbSB0aGlua2luZyBwZXJoYXBzIHJlbGF0ZWQgY29uZmlncyBjYW4gc2hlZCBsaWdodCBvbiBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gaXQgY29tZXMgdG8gQlRGIGFuZCBzeXNjYWxscyByZWxhdGVkIHRvIEJQRi4gSSdtIGFzc3VtaW5nIHRoYXQgcHJvcGVyIGNvbmZpZ3VyYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6MzAuOTk1NjE3OTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTE2NjE0OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMfGNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWd8a2VybmVsL2JwZi9LY29uZmlnfGxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTozMS4xNTA3OTMwNjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Mzk2NzI0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQlBGX1NZU0NBTExgIE1hY3JvKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYEJQRl9TWVNDQUxMYCBtYWNybyBkZWZpbmVkP1wiIEl0J3MgYSBrZXkgcGllY2UgaW4gdGhpcyB3aG9sZSBCUEYgcHV6emxlLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgdGFzayBhdCBoYW5kICh3aGljaCBpcyBhc3N1bWVkIGZyb20gdGhlIGNvbnRleHQsIGFzIHRoZSBwcm9tcHQgbGFja3MgaXQpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhwYW5zaW9uLCBpdHMgYXJndW1lbnRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBpbmZyYXN0cnVjdHVyZS4gSSdtIHRoaW5raW5nIG9mIHF1aWNrbHkgdXNpbmcgYSBncmVwIG9yIGFuIElERSdzIHNlYXJjaCBmdW5jdGlvbiB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBmaWxlLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gY2FsbHMgaW50ZXJmYWNlIHdpdGggZUJQRi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQxOjQwLjU0NzUyMDc4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDk4ODcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTo0Mi42Nzg1MTY4MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4ODM0OTI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgREVCVUdfSU5GT19CVEZgIGluIEtjb25maWcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBERUJVR19JTkZPX0JURmAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgYmVoYXZpbmcuIEkgc2hvdWxkIHRoaW5rIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc3VjaCBhcyBgREVCVUdfSU5GT2AsIGBERUJVR19JTkZPX0RXQVJGYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIEJURiBpbmZyYXN0cnVjdHVyZSBlbmFibGVtZW50LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIGluIGhvdyB0aGlzIGlzIHNldCBvciB1c2VkLiBJIHdpbGwgcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBhbmQgcGVyaGFwcyBzZWFyY2ggdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjb25maWcgb3B0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBhYm91dCBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiBidWlsZCB0aW1lcywga2VybmVsIHNpemUsIGFuZCBydW50aW1lIHBlcmZvcm1hbmNlLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBvZiByZWxldmFudCBkZWZjb25maWdzIHdvdWxkIGFsc28gYmUgd2lzZS4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3Mgd2hldGhlciBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlIGlzIHRoZSByaWdodCBhcHByb2FjaCBmb3IgbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6NTMuNTYyMDExNjYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE1NTc4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQxOjU2LjY3NzU5NDg0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Nzc2MjU1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGxpYi9LY29uZmlnLmRlYnVnYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHplcm8gaW4gb24gbGluZSAzOTguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNldHRpbmcsIG9yIGEgcmVsYXRlZCBncm91cGluZywgdGVuZHMgdG8gYmUuIEkndmUgZ290IGEgZmVlbGluZyB0aGUgc29sdXRpb24gSSdtIHNlZWtpbmcgaXMgZ29pbmcgdG8gYmUgbmVhcmJ5LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MjowMy40NTM4NTQyMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5NTpcXHRcXHQgIHRvIGtub3cgYWJvdXQgdGhlIC5kd28gZmlsZXMgYW5kIGluY2x1ZGUgdGhlbS5cXG4gMzk2OlxcdFxcdCAgSW5jb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY2NhY2hlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfSU5GT19TUExJVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXFxuIDQwMTpcXHRcXHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXFxuIDQwMjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbiA0MDQ6XFx0XFx0IyBwYWhvbGUgdXNlcyBlbGZ1dGlscywgd2hpY2ggZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBIZXhhZ29uIHJlbG9jYXRpb25zXFxuIDQwNTpcXHRcXHRkZXBlbmRzIG9uICFIRVhBR09OXFxuIDQwNjpcXHRcXHRoZWxwXFxuIDQwNzpcXHRcXHQgIEdlbmVyYXRlIGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIERXQVJGIGRlYnVnIGluZm8uXFxuIDQwODpcXHRcXHQgIFR1cm5pbmcgdGhpcyBvbiByZXF1aXJlcyBwYWhvbGUgdjEuMjIgb3IgbGF0ZXIsIHdoaWNoIHdpbGwgY29udmVydFxcbiA0MDk6XFx0XFx0ICBEV0FSRiB0eXBlIGluZm8gaW50byBlcXVpdmFsZW50IGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvLlxcbiA0MTA6XFx0XFxuIDQxMTpcXHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXFxuIDQxMjpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjNcXG4gNDEzOlxcdFxcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcXG4gNDE0OlxcdFxcdGhlbHBcXG4gNDE1OlxcdFxcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxcbiA0MTY6XFx0XFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xcbiA0MTc6XFx0XFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxcbiA0MTg6XFx0XFxuIDQxOTpcXHRjb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4gNDIwOlxcdFxcdGRlZl9ib29sIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyNFxcbiA0MjE6XFx0XFx0aGVscFxcbiA0MjI6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgLS1sYW5nX2V4Y2x1ZGUgZmxhZyB3aGljaCBtYWtlcyBwYWhvbGUgZXhjbHVkZVxcbiA0MjM6XFx0XFx0ICBjb21waWxhdGlvbiB1bml0cyBmcm9tIHRoZSBzdXBwbGllZCBsYW5ndWFnZS4gVXNlZCBpbiBLYnVpbGQgdG9cXG4gNDI0OlxcdFxcdCAgb21pdCBSdXN0IENVcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDEuMjQgb2YgcGFob2xlLFxcbiA0MjU6XFx0XFx0ICBvdGhlcndpc2UgaXQgd291bGQgZW1pdCBtYWxmb3JtZWQga2VybmVsIGFuZCBtb2R1bGUgYmluYXJpZXMgd2hlblxcbiA0MjY6XFx0XFx0ICB1c2luZyBERUJVR19JTkZPX0JURl9NT0RVTEVTLlxcbiA0Mjc6XFx0XFxuIDQyODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbiA0Mjk6XFx0XFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MjowMy40NTQwNjEyOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NzgwNjIyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCVEYgRGlzcGxheSBhbmQgTWFwIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlRGIHNob3cgZnVuY3Rpb25zIGFuZCB0aGUgbWFwIGNyZWF0aW9uIGNoZWNrIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGRpdmUgaW4uIExldCdzIHNlZSwgaW4gYGtlcm5lbC9icGYvYnRmLmNgIHNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBicGZfc25wcmludGZfYnRmYCAod2hpY2ggSSBhc3N1bWUgaXMgYSBoZWxwZXIpLCBhbmQgYWxzbyBmdW5jdGlvbnMgbGlrZSBgbWFwX2NoZWNrX2J0ZmAgYW5kIGBodGFiX21hcF9jaGVja19idGZgIGFyZSBrZXkgcGxheWVycyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UuIFJpZ2h0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgcGF0aHMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYW5kIGBicGZfc25wcmludGZfYnRmYCBhcmUgYWN0dWFsbHkgYmVpbmcgaW52b2tlZCwgYXMgd2VsbCBhcyB0aG9zZSBtYXAgY2hlY2sgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDI6MjkuMjMyMTI2NDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjgzOTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz0yOTI1PXN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cXHQgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi1cXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlxcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzItXFx0ICogUmVzb2x2ZSB0aGUgdmFyJ3MgdHlwZSBkaXJlY3RseSBpbiB0aGF0IGNhc2UuXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMTcyPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gX193ZWFrO1xcbmtlcm5lbC9icGYvY29yZS5jOjMxNzM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjE4LVxcdGNhc2UgQlBGX0ZVTkNfc25wcmludGZfYnRmOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMjAtXFx0Y2FzZSBCUEZfRlVOQ19zbnByaW50ZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDI6MjkuMzI4OTcyNDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzQwMzY2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc25wcmludGZfYnRmYCBpbiBga2VybmVsL2JwZi9idGYuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBicGZfc25wcmludGZfYnRmYCB3b3Jrcy4gVGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIHRoZSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBCVEYgZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5c2lzLCBhbmQgcG9zc2libHkgZXZlbiBkeW5hbWljIGluc3RydW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdHJhdmVyc2luZyB0aGUgQlRGIHR5cGUgaW5mb3JtYXRpb24sIGRlY29kaW5nIHRoZSB2YXJpb3VzIHR5cGUgZGVzY3JpcHRvcnMsIGFuZCBnZW5lcmF0aW5nIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHN1aXRhYmxlIGZvciBsb2dnaW5nIG9yIHVzZXIgZGlzcGxheS4gVGhlIGZvcm1hdHRpbmcgbGlrZWx5IGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgQlRGIGVudHJ5IGl0J3MgZW5jb3VudGVyaW5nLCBhbmQgSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFuYWdlcyByZWN1cnNpdmUgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBjb21wbGV4IGRhdGEgdHlwZXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFzIHdlbGwuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIGZvcm1hdCBzcGVjaWZpZXJzIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXQsIGFuZCBob3BlZnVsbHksIEknbGwgc2VlIHNvbWUgZ29vZCBleGFtcGxlcyBvZiBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscy4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDM6MDIuMDY5MzQxNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA3NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzE3Mj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9uc19jdXJyZW50X3BpZF90Z2lkX3Byb3RvIF9fd2VhaztcXG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2VhaztcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMTc0LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIxOC1cXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0ZjpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjE5OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NucHJpbnRmX2J0Zl9wcm90bztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjIwLVxcdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjAyLjE2ODQyODAwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTUzNzczMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfc25wcmludGZfYnRmX3Byb3RvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gIGlzIHJlYWxseSBkb2luZy4gR2l2ZW4gaXRzIG5hbWUsIGl0J3MgcHJldHR5IGxpa2VseSBpdCdzIHJlbGF0ZWQgdG8gcHJpbnRpbmcgb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBkYXRhLCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0byBwcm90b3R5cGVzIG9yIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIE15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIEtlcm5lbCBjb2RlIGJlaW5nIGtlcm5lbCBjb2RlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZmlyc3QgaXMgd2l0aGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBvciBhIGZpbGUgc2ltaWxhcmx5IG5hbWVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoxMS4zMjIyMDUwOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTAwMjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yOTMwLVxcdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MzE6XFx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxcbmtlcm5lbC9icGYvYnRmLmMtMjkzMi1cXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XFxua2VybmVsL2JwZi9jb3JlLmM6MzE3Mzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XFxua2VybmVsL2JwZi9jb3JlLmMtMzE3NC1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfYnRmX3Byb3RvIF9fd2VhaztcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXFx0Y2FzZSBCUEZfRlVOQ19zbnByaW50Zl9idGY6XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjIxOTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zbnByaW50Zl9idGZfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwMDY9c3RhdGljIGludCBicGZfYnRmX3ByaW50Zl9wcmVwYXJlKHN0cnVjdCBidGZfcHRyICpwdHIsIHUzMiBidGZfcHRyX3NpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTAzNS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTAzNjpCUEZfQ0FMTF81KGJwZl9zbnByaW50Zl9idGYsIGNoYXIgKiwgc3RyLCB1MzIsIHN0cl9zaXplLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwMzctXFx0ICAgdTMyLCBidGZfcHRyX3NpemUsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA1MC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NucHJpbnRmX2J0ZixcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA1My1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoxMS40MzMyMTMyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY0MjgyNzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlRGLVJlbGF0ZWQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gQlRGIChCUEYgVHlwZSBGb3JtYXQpLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSB0d28ga2V5IGFyZWFzOiBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuXG5cbkluIGBidGYuY2AsIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgZGlzcGxheSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgYXJlIHRoZSB0YXJnZXRzLiBUaGVzZSBhcmUgKnN0YXRpYyogY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5J3JlIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhlIGltcG9ydGFudCB0aGluZyBub3cgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSAqdXNlZCouIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHNob3cgdXAgaW4gcGxhY2VzIHRoYXQgZm9ybWF0IGFuZCBvdXRwdXQgQlRGIGluZm9ybWF0aW9uOiBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGFuZCwgY3J1Y2lhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIHZpYSBCUEYgcHJvZ3JhbXMgbGlrZSBgYnBmX3NucHJpbnRmX2J0ZmAgYW5kIGBicGZfc2VxX3ByaW50Zl9idGZgLiBBZGRpdGlvbmFsbHksIHRoZSBtYXAgZHVtcCBmdW5jdGlvbnMgaW4gYnBmZnMsIHN1Y2ggYXMgYG1hcF9zZXFfc2hvd2AsIGBicGZfbWFwX3NlcV9zaG93YCwgYW5kIGBicGZfb2JqX3BpbmAsIGFyZSBhbHNvIGludm9sdmVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIHJlZmluZSB0aGUgd2F5IEJURiBkYXRhIGlzIGZvcm1hdHRlZCBhbmQgcHJlc2VudGVkIHRvIHRoZSB1c2VyLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBzZXF1ZW5jZSBmaWxlcyBhbmQgcG90ZW50aWFsbHkgdmlhIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLlxuXG5OZXh0LCBpbiBgaGFzaHRhYi5jYCwgdGhlIGNoYW5nZXMgYWZmZWN0IGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAsIHdoaWNoLCBhZ2FpbiwgYXJlIHN0YXRpYy4gVGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byAqaGFzaCB0YWJsZSogbWFwcyBhbmQgQlRGLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIG1hcHMgd2hlcmUgQlRGIGlzIHJlbGV2YW50LiBMb29raW5nIGF0IHRoZSBicm9hZGVyIGNvZGUsIGBtYXBfY3JlYXRlYCwgYGJwZl9tYXBfbmV3X2ZkYCwgYW5kIGBicGZfbWFwX2FsbG9jX2lkYCBpbiBgc3lzY2FsbC5jYCBhbGwgc2VlbSB0byBiZSBlbnRyeSBwb2ludHMgY2FsbGVkIGZyb20gdGhlIGBzeXNfYnBmYCBzeXN0ZW0gY2FsbCB3aGVuIGBCUEZfTUFQX0NSRUFURWAgaXMgaW52b2tlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGNoZWNraW5nIG9yIHZhbGlkYXRpbmcgQlRGIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgaGFzaCB0YWJsZS1iYXNlZCBCUEYgbWFwcy4gTm93IEkgd2FudCB0byBxdWlja2x5IGludmVzdGlnYXRlIHdoZXJlIGBodGFiX21hcF9jaGVja19idGZgIGlzIGJlaW5nIGNhbGxlZCB0byBzZWUgdGhlIHdob2xlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjIxLjA3NjA0NDU1NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NDY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHRhYl9tYXBfY2hlY2tfYnRmfHJodGFiX21hcF9jaGVja19idGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz01MDQ9c3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjUyODpzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3NjpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc3LVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM4Mz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5OTpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDAwLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3OTpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTgwLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Nj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk5LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2MDA6XFx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYwMS1cXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwOTY9c3RhdGljIGludCByaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTExOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4OlxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI5LVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjIxLjE2OTk5NTg2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODIyNjYwMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYC5tYXBfY2hlY2tfYnRmYCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgLm1hcF9jaGVja19idGZgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmFjZSBkb3duIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCouIEl0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgdmVyaWZpY2F0aW9uIGlzIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwgY29udGV4dC4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWFwX2NoZWNrX2J0ZmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHZhbGlkYXRpb24gaW5mcmFzdHJ1Y3R1cmUsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSB1c2VzLCBvciB1bnVzdWFsIGNvZGUgZmxvd3MgdGhhdCByZXF1aXJlIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgYWxsIGNhbGwgc2l0ZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIG9yIGNvbnRleHQtZGVwZW5kZW50IGNhbGxzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoYXQgZnVuY3Rpb27igJlzIGRlc2lnbiBhZmZlY3RzIHBlcmZvcm1hbmNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBkZXNpZ24gaW1wcm92ZW1lbnRzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoyOS45OTI2NTg5NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjIwMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9jaGVja19idGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDA2PXN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjQwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1My1cXHQubWFwX2RlbGV0ZV9lbGVtID0gYXJlbmFfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XFx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTUtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTU1Nz1zdGF0aWMgdm9pZCBwZXJjcHVfYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU3OS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTgwOnN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzQ6XFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzUtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTgtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcGVyY3B1X2FycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4OTk6XFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDAtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTM4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyZl9ldmVudF9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTEzOTItXFx0Lm1hcF9yZWxlYXNlID0gcGVyZl9ldmVudF9mZF9hcnJheV9yZWxlYXNlLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxMzkzOlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTM5NC1cXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTQxOD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dyb3VwX2FycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQyNy1cXHQubWFwX2ZkX3B1dF9wdHIgPSBjZ3JvdXBfZmRfYXJyYXlfcHV0X3B0cixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyODpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MjktXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE3OlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxOC1cXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTE3NT1zdGF0aWMgbG9uZyBibG9vbV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODEtXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxODI6c3RhdGljIGludCBibG9vbV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9MjAzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBibG9vbV9maWx0ZXJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMjE0LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBibG9vbV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoyMTU6XFx0Lm1hcF9jaGVja19idGYgPSBibG9vbV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMjE2LVxcdC5tYXBfbWVtX3VzYWdlID0gYmxvb21fbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE2MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dycF9zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNjgtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTY5OlxcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNzAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jPTE5OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaW5vZGVfc3RvcmFnZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTIwNi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gYnBmX2ZkX2lub2RlX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjIwNzpcXHQubWFwX2NoZWNrX2J0ZiA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTIwOC1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9MTM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBpbnNuX2FycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTQzLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBpbnNuX2FycmF5X2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxNDQ6XFx0Lm1hcF9jaGVja19idGYgPSBpbnNuX2FycmF5X2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTQ1LVxcdC5tYXBfbWVtX3VzYWdlID0gaW5zbl9hcnJheV9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzAyPWludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE3LVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3MTg6aW50IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0yMjM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRhc2tfc3RvcmFnZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfdGFza19zdG9yYWdlLmMtMjMxLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfcGlkX3Rhc2tfc3RvcmFnZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMzI6XFx0Lm1hcF9jaGVja19idGYgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMy1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTcwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTcxNi1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gY3B1X21hcF9nZXRfbmV4dF9rZXksXFxua2VybmVsL2JwZi9jcHVtYXAuYzo3MTc6XFx0Lm1hcF9jaGVja19idGZcXHRcXHQ9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9jcHVtYXAuYy03MTgtXFx0Lm1hcF9tZW1fdXNhZ2VcXHRcXHQ9IGNwdV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMDg3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBkZXZfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTA5NS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gZGV2X21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwOTY6XFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTA5Ny1cXHQubWFwX21lbV91c2FnZSA9IGRldl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMTAyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBkZXZfbWFwX2hhc2hfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMTEwLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBkZXZfbWFwX2hhc2hfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9kZXZtYXAuYzoxMTExOlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExMTItXFx0Lm1hcF9tZW1fdXNhZ2UgPSBkZXZfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTUwND1zdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NTI4OnN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjktXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3NS1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc2OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzctXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5OC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzk5OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MDAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTY0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3OC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc5OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1ODAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYwMDpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjAxLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQyLVxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MzpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0NC1cXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwOTY9c3RhdGljIGludCByaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTExOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4OlxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI5LVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz00NjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NjctXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2ODpcXHQubWFwX2NoZWNrX2J0ZiA9IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NjktXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gY2dyb3VwX3N0b3JhZ2Vfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODUtXFx0Lm1hcF9kZWxldGVfYmF0Y2ggPSBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4NjpcXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODctXFx0Lm1hcF9tZW1fdXNhZ2UgPSB0cmllX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0xMTQxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzdGFja190cmFjZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTExNDktXFx0Lm1hcF9kZWxldGVfZWxlbSA9IHN0YWNrX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTE1MDpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTExNTEtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBzdGFja19tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfbWFwX29mZmxvYWRfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE3LVxcdC5tYXBfZnJlZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfZnJlZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTg6XFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExOS1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0Nz1pbnQgbWFwX2NoZWNrX25vX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI1NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjU1OnN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU2LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfa2V5X2lkLCB1MzIgYnRmX3ZhbHVlX2lkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI2OC1cXHRcXHRrZXlfdHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgMCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI2OTpcXHRcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfY2hlY2tfYnRmKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNzAtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzY3LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzNjg6XFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfY2hlY2tfYnRmKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTM2OTpcXHRcXHRyZXQgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2NoZWNrX2J0ZihtYXAsIGJ0Ziwga2V5X3R5cGUsIHZhbHVlX3R5cGUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzNzAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTgxLVxcdFxcdGlmIChhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1ODI6XFx0XFx0XFx0ZXJyID0gbWFwX2NoZWNrX2J0ZihtYXAsIHRva2VuLCBidGYsIGF0dHItXFx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTgzLVxcdFxcdFxcdFxcdFxcdCAgICBhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjMwLjA3Nzg4MzI4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAxNzYzNjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyB0d28ga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJURiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciBUeXBlIEZvcm1hdCkgaGFuZGxpbmcgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIHZvaWQga2V5IHR5cGVzIGluIGhhc2ggdGFibGVzLlxuXG5GaXJzdCwgdGhlIGBidGYuY2AgY2hhbmdlcyBhcmUgZml4aW5nIHBvdGVudGlhbCBjcmFzaGVzIGR1cmluZyBCVEYgdHlwZSByZXNvbHV0aW9uIGFuZCBkdW1waW5nLiBXZSdyZSBkZWFsaW5nIHdpdGggZWRnZSBjYXNlcyDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSB2b2lkIHR5cGUgb3Igd2hlbiBoYW5kbGluZyBgQlRGX0tJTkRfVkFSYCB0eXBlcyBpbiBhIGJhc2UgQlRGIHN0cnVjdHVyZSB0aGF0IGxhY2tzIGByZXNvbHZlZF9pZHNgLiBUaGUgYGhhc2h0YWIuY2AgY2hhbmdlIHJlamVjdHMgdm9pZCBrZXkgdHlwZXMgZm9yIEJQRiBtYXBzLCBwcmV2ZW50aW5nIGxhdGVyIGlzc3VlcyBkdXJpbmcgYnBmZnMgZHVtcHMuXG5cbk5vdywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCB0aGlzIGRlZmluaXRlbHkgKmlzbid0KiBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjb2RlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyB0aGF0J3MgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgQlBGIHByb2dyYW1zL2JwZmZzLiBUaGUgQlBGIHN1YnN5c3RlbSBpcyBhIGtub3duIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uLCBhbmQgdGhlc2UgcGF0Y2hlcyBhcmUgZml4aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggdm9pZCB0eXBlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCB0aGUgcG90ZW50aWFsIGZvciB0aGVzZSB0eXBlcyBvZiBidWdzLCBJJ20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgd2UgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciByZXByb2R1Y2liaWxpdHkuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgbmVjZXNzYXJ5LiBCdXQgQlBGIGFuZCBCVEYgYXJlIGRlZXBseSBpbnRlcnR3aW5lZCwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9mIGBCUEZfU1lTQ0FMTGAgb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCByZXByb2R1Y2luZyB0aGUgcmVwb3J0ZWQgaXNzdWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgYSBwcm9wZXJseSBjb25maWd1cmVkIGZ1enppbmcgZW52aXJvbm1lbnQgdGhhdCBmdWxseSBleHBvc2VzIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NDowNS4wOTU1MjM5OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTEwNDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NDowNS4xNjY0Mzg5MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwOTE1NzQ2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJQRiBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYgY29tcG9uZW50cyBhcmUgYnVpbHQuIEZpcnN0LCBJJ2xsIGRpdmUgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYXJlIGNvbXBpbGVkLiBJJ2xsIG9wZW4gdXAgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNoZWNrLlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IExpbmUgMTEsIGl0J3MgcHJldHR5IGNsZWFyOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8uLi5gIFNvLCBgaGFzaHRhYi5vYCBpcyBvbmx5IGluY2x1ZGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBBbmQganVzdCBiZWxvdyB0aGF0LCBvbiBsaW5lIDE4LCBpdCBzZWVtcyB0aGUgc2FtZSBydWxlIGlzIGFwcGxpZWQgdG8gYGJ0Zi5vYCAtLSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYuby4uLmAuIEdvb2QsIHRoYXQgbWFrZXMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVhbGx5IGNsZWFyLlxuXG5Ob3csIGZvciB0aGF0IGBicGZfc25wcmludGZfYnRmYCBmdW5jdGlvbuKApiB3aGVyZSdzIHRoYXQgZGVmaW5lZD8gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgaXQgbWlnaHQgbGl2ZSBpbiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3IgcGVyaGFwcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeS4gTGV0J3MgZ2V0IHRvIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6MjIuMjU4NzYzODY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMjUyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgKz0gdHJhY2VfZXZlbnRzX3VzZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICs9IGJwZl90cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgKz0gdHJhY2Vfa3Byb2JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6MjIuMzc2OTk1MjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTUwMTExNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIEV2ZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0VWRU5UU2AgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkLXRpbWUgaW5jbHVzaW9uIGFuZCBzZXR0aW5ncyBvZiBmZWF0dXJlcyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgZXZlbnRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjM1LjUyNzExMDk2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjMyOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjM1LjY0MjM0OTA0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjMzMTkwNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9FVkVOVFNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBzcGVjaWZpY2FsbHkgcmVtZW1iZXIgc2VlaW5nIGl0IHdpdGhpbiB0aGUgdHJhY2UgZGlyZWN0b3J5LiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIGxvb2sgYXJvdW5kIGxpbmUgODUzIGluIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhhdCBsb2NhdGlvbiBpcyByZWNlbnQgZW5vdWdoLCBhbmQgSSBjYW4gcXVpY2tseSBnZXQgYW4gaWRlYSBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NDcuOTc0MjU3NzU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXFxuIDg1MTpcXHRcXHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cXG4gODUyOlxcdFxcbiA4NTM6XFx0Y29uZmlnIEJQRl9FVkVOVFNcXG4gODU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gODU1OlxcdFxcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgUEVSRl9FVkVOVFNcXG4gODU2OlxcdFxcdGJvb2xcXG4gODU3OlxcdFxcdGRlZmF1bHQgeVxcbiA4NTg6XFx0XFx0aGVscFxcbiA4NTk6XFx0XFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcXG4gODYwOlxcdFxcdCAgdHJhY2Vwb2ludCBldmVudHMuXFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xcbiA4NjM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgUFJPQkVfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZWZfYm9vbCBuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuIDg2OTpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NDcuOTc0MzQ1MDk1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTkwMzQ5MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgRm9jdXM6IEJQRiBCVEYgRnVuY3Rpb25zKipcblxuT2theSwgdGltZSB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIGludGVyZXN0aW5nIGJ1Z3MgYW5kIHRoYXQgYXJlICphY3R1YWxseSogYWNjZXNzaWJsZS4gTGV0J3Mgc3RhcnQgd2l0aCBgRm9jdXNTeW1ib2xzYC4gUmVtZW1iZXIgdGhlIGtleSBndWlkZWxpbmVzOiBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGNydWNpYWwgZm9yIGZ1enppbmcuIEF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBOb24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYXJlIHRoZSBnb2xkIHN0YW5kYXJkLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRob3NlIGdldCBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIsIGFuZCBkb24ndCBwcm92aWRlIGEgdW5pcXVlIHN5bWJvbCB0byB0YXJnZXQgYW55d2F5LlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlRGIHNob3cgYW5kIG1hcCBjcmVhdGlvbiBwYXRocy4gSSBrbm93IHRoZXJlJ3MgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVuaW5nIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gTGV0IG1lIHRha2UgYSBsb29rOlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSB3aGV0aGVyIHRoZXNlIGFyZSBhcHByb3ByaWF0ZS5cbkkgbmVlZCB0byBjaGVjaywgYW5kIEkgd2lsbCwgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX2lkX3Jlc29sdmVgLCBgYnRmX3R5cGVfc2tpcF9tb2RpZmllcnNgLCBhbmQgYGJ0Zl9kZl9zaG93YCBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQuIEkgdGhpbmsgYGJ0Zl9kZl9zaG93YCAqbWlnaHQqIGJlIHN0YXRpYywgc28gSSB3aWxsIGNoZWNrIHRoYXQgb25lIHNwZWNpZmljYWxseS5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgYWRkIHRvIHRoZSBsaXN0IHRoaW5ncyBsaWtlIGBicGZfc25wcmludGZfYnRmYCwgYG1hcF9jaGVja19idGZgLCBgaHRhYl9tYXBfY2hlY2tfYnRmYCDigJMgdGhvc2UgYXJlIGFsbCBrZXkgYXJlYXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kLCB0YXJnZXRlZCBzZXQgb2YgZnVuY3Rpb25zIGZvciB0aGlzIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjU5LjU2NDY5NjEyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTk3MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3NucHJpbnRmX3Nob3d8YnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3N8YnRmX2RmX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yMjY5LVxcbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXFx0XFx0XFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTktXFx0aWYgKCFidGZfdHlwZV9vcHModCkpXFxua2VybmVsL2JwZi9idGYuYzoyOTIwOlxcdFxcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjMwMjI6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz00ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmdW5jX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDg1MS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjUxNDE6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy01MjM5LVxcdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlxcdC5zaG93ID0gYnRmX2RmX3Nob3csXFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgyNzA9X19wcmludGYoMiwgMCkgc3RhdGljIHZvaWQgYnRmX3NlcV9zaG93KHN0cnVjdCBidGZfc2hvdyAqc2hvdywgY29uc3QgY2hhciAqZm10LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04Mjc1LVxcbmtlcm5lbC9icGYvYnRmLmM6ODI3NjppbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzctXFx0XFx0XFx0ICAgIHZvaWQgKm9iaiwgc3RydWN0IHNlcV9maWxlICptLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgyOTA9dm9pZCBidGZfdHlwZV9zZXFfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgyOTIte1xcbmtlcm5lbC9icGYvYnRmLmM6ODI5MzpcXHQodm9pZCkgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoYnRmLCB0eXBlX2lkLCBvYmosIG0sXFxua2VybmVsL2JwZi9idGYuYy04Mjk0LVxcdFxcdFxcdFxcdCAgICAgICBCVEZfU0hPV19OT05BTUUgfCBCVEZfU0hPV19DT01QQUNUIHxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODMwND1fX3ByaW50ZigyLCAwKSBzdGF0aWMgdm9pZCBidGZfc25wcmludGZfc2hvdyhzdHJ1Y3QgYnRmX3Nob3cgKnNob3csIGNvbnN0IGNoYXIgKmZtdCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODMyNS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgzMjY6aW50IGJ0Zl90eXBlX3NucHJpbnRmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxcbmtlcm5lbC9icGYvYnRmLmMtODMyNy1cXHRcXHRcXHQgICBjaGFyICpidWYsIGludCBsZW4sIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NTkuNjcwNzAwMDk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjA1NDExNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBCVEYgVHlwZSBSZXNvbHV0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCVEYgdHlwZSBJRHMgYXJlIGFjdHVhbGx5IHJlc29sdmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0YXJnZXRzIGFyZSB0aGUgZGVjbGFyYXRpb25zIGZvciBgYnRmX3R5cGVfaWRfcmVzb2x2ZWAgYW5kIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgd29ya2hvcnNlcyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGEgQlRGIHR5cGUgSUQgKnJlYWxseSogcG9pbnRzIHRvLCBhbmQgcG90ZW50aWFsbHkgY2xlYW5pbmcgdXAgYW55IGV4dHJhbmVvdXMgbW9kaWZpZXJzIHRoYXQgbWlnaHQgYmUgaGFuZ2luZyBhcm91bmQuIEdvdHRhIHVuZGVyc3RhbmQgdGhlaXIgc2lnbmF0dXJlcywgdGhlaXIgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCB0eXBlIHJlc29sdXRpb24gZmxvdy4gS25vd2luZyB0aGUgKndoYXQqIGFuZCB0aGUgKmhvdyogb2YgdGhlc2UgdHdvIHdpbGwgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGUgYnJvYWRlciBzY2hlbWUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ1OjE1LjI3NjExNDkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNDkxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz03MjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX2ZpbmRfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTcyMy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcyNDpjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2J0Zi5jLTcyNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGlkLCB1MzIgKnJlc19pZClcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NzQwPWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfcmVzb2x2ZV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NDQtXFxua2VybmVsL2JwZi9idGYuYzo3NDU6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgaWQsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzQ2LVxcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NDgtXFxua2VybmVsL2JwZi9idGYuYzo3NDk6XFx0cmV0dXJuIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgcmVzX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc1MC19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTEwMTY9Ym9vbCBidGZfbWVtYmVyX2lzX3JlZ19pbnQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTItXFxua2VybmVsL2JwZi9idGYuYzoxMDUzOi8qIFNpbWlsYXIgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSBidXQgZG9lcyBub3Qgc2tpcCB0eXBlZGVmcy4gKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTQtc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTEtXFx0ZWxzZVxcbmtlcm5lbC9icGYvYnRmLmM6MjkxMjpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTMtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yOTM2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2J0Zi5jOjI5Mzc6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnR5cGVfaWQpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkzOC1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MzE4MT1zdGF0aWMgdm9pZCBfX2J0Zl9hcnJheV9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zMTkxLVxcdGVsZW1fdHlwZV9pZCA9IGFycmF5LVxcdTAwM2V0eXBlO1xcbmtlcm5lbC9icGYvYnRmLmM6MzE5MjpcXHRlbGVtX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGVsZW1fdHlwZV9pZCwgTlVMTCk7XFxua2VybmVsL2JwZi9idGYuYy0zMTkzLVxcdGlmIChlbGVtX3R5cGUgXFx1MDAyNlxcdTAwMjYgYnRmX3R5cGVfaGFzX3NpemUoZWxlbV90eXBlKSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjYwND11MzIgYnRmX2N0eF9hcmdfaWR4KHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjE3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9hcmdzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2J0Zi5jOjY2MTg6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MTktXFx0XFx0b2Zmc2V0ICs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXFx1MDAzZXNpemUsIDgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjIzLVxcbmtlcm5lbC9icGYvYnRmLmM6NjYyNDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjUtXFx0b2Zmc2V0ICs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXFx1MDAzZXNpemUsIDgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODU4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY5MzItXFxua2VybmVsL2JwZi9idGYuYzo2OTMzOlxcdFxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNjkzNC1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NtYWxsX2ludCh0KSkge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz03MTIyPXN0YXRpYyBpbnQgYnRmX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzEzNC1cXHRpZiAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXFxua2VybmVsL2JwZi9idGYuYzo3MTM1OlxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEzNi1cXHR0bmFtZSA9IF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTYzLVxcdFxcdG1lbWJlciA9IGJ0Zl90eXBlX21lbWJlcih0KSArIHZsZW4gLSAxO1xcbmtlcm5lbC9icGYvYnRmLmM6NzE2NDpcXHRcXHRtdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNzE2NS1cXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzE3Ny1cXHRcXHQvKiBhbGxvdyBzdHJ1Y3R1cmUgYW5kIGludGVnZXIgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxNzg6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXlfZWxlbS1cXHUwMDNldHlwZSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTcxNzktXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz03NjQ5PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfdHlwZV9tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03Njg2LVxcbmtlcm5lbC9icGYvYnRmLmM6NzY4NzpcXHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIHQxLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjc2ODg6XFx0dDIgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYyLCB0Mi1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi9idGYuYy03Njg5LVxcdGlmICh0MS1cXHUwMDNlaW5mbyAhPSB0Mi1cXHUwMDNlaW5mbykge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NzAzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYXJnczE7IGkrKykge1xcbmtlcm5lbC9icGYvYnRmLmM6NzcwNDpcXHRcXHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIGFyZ3MxW2ldLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmM6NzcwNTpcXHRcXHR0MiA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjIsIGFyZ3MyW2ldLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzcwNi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzczMi1cXHRcXHR9XFxua2VybmVsL2JwZi9idGYuYzo3NzMzOlxcdFxcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgdDEtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmM6NzczNDpcXHRcXHR0MiA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjIsIHQyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc3MzUtXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zdHJ1Y3QodDEpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NDY9c3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzk1Ny1cXHQvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqL1xcbmtlcm5lbC9icGYvYnRmLmM6Nzk1ODpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTktXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5ODE9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTkwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5OTItXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgwMjk9aW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODE4MS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgxODI6XFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtODE4My1cXHRcXHRcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgfHwgYnRmX3R5cGVfaXNfcHJpbWl0aXZlKHJlZl90KSkge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04MjIwLVxcbmtlcm5lbC9icGYvYnRmLmM6ODIyMTpcXHRcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgyMjItXFx0XFx0XFx0cmVmX3QgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgdCwgXFx1MDAyNm1lbV9zaXplKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODc4MT1pbnQgYnRmX2NoZWNrX2l0ZXJfYXJnKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLCBpbnQgYXJnX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODc5MS1cXHRhcmcgPSBcXHUwMDI2YnRmX3BhcmFtcyhmdW5jKVthcmdfaWR4XTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg3OTI6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTMtXFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXFxua2VybmVsL2JwZi9idGYuYy04Nzk0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYnRmLmM6ODc5NTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2YnRmX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTYtXFx0aWYgKCF0IHx8ICFfX2J0Zl90eXBlX2lzX3N0cnVjdCh0KSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODgwNj1zdGF0aWMgaW50IGJ0Zl9jaGVja19pdGVyX2tmdW5jcyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODg1Ni1cXHRcXHQvKiBicGZfaXRlcl9cXHUwMDNjdHlwZVxcdTAwM2VfbmV4dCgpIHNob3VsZCByZXR1cm4gcG9pbnRlciAqL1xcbmtlcm5lbC9icGYvYnRmLmM6ODg1NzpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4NTgtXFx0XFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk4MjI9Ym9vbCBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05ODU5LVxcbmtlcm5lbC9icGYvYnRmLmM6OTg2MDpcXHRcXHRidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIG10eXBlLVxcdTAwM2V0eXBlLCBcXHUwMDI2aWQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTg2MS1cXHRcXHQvKiBJZiB3ZSBtYXRjaCBvbiBib3RoIHR5cGUgYW5kIG5hbWUsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHRydXN0ZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTEzMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTE4NS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjE4NjpcXHRcXHRyZXRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xODctXFx0XFx0c2NhbGFyX3JldHVybiA9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN1YnByb2dfcmV0X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDM6XFx0cmV0dXJuIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwNC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4Mzc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNjktXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTcwOlxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLnJldF9idGYsIG1ldGEucmV0X2J0Zl9pZCwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTcxLVxcdFxcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MDg9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQxMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MTM6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTQtXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MjA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MjU6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjYtXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1Mzg9c3RhdGljIGJvb2wgX19pc19rZnVuY19wdHJfYXJnX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTQzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0NDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0NS1cXHRpZiAoIXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NDgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0OTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2cmVzX2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NTAtXFx0aWYgKCF0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjUwPWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY2NDpcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjUtXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY3Ny1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjc4OlxcdFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcnJheS1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjc5LVxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2NT1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk3MzpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cXHUwMDNlYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc0LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTkzLVxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5OTQ6XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVxcdTAwM2VidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk5NS1cXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cXHUwMDNlYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMTM2PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTg4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjE4OTpcXHRyZWdfcmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhyZWdfYnRmLCByZWdfcmVmX2lkLCBcXHUwMDI2cmVnX3JlZl9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTkwLVxcdHJlZ19yZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQocmVnX2J0ZiwgcmVnX3JlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2OTg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc0OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NDk6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI3NTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUxLVxcdFxcdGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NTI6XFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZyZWZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc1My1cXHRcXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTQ5PXM2NCBicGZfa2Z1bmNfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1Njk6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU3MC1cXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU5Mi1cXHQvKiBmaXhlZC1zaXplIHBvaW50ZWQtdG8gdHlwZTogcmVzb2x2ZSB2aWEgQlRGICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNTkzOlxcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1OTQtXFx0aWYgKCFJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcXHUwMDI2dHlwZV9zaXplKSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc4NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM3LVxcdC8qIENoZWNrIHJldHVybiB0eXBlICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDM4OlxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgbWV0YS5mdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzAtXFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwNzE6XFx0XFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnB0cl90eXBlX2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzItXFx0XFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFxcdTAwMjZtZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYzNj1zdGF0aWMgaW50IF9fY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Njg5LVxcdHR5cGUgPSB0LVxcdTAwM2V0eXBlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODY5MDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2OTEtXFx0aWYgKHBlcmNwdSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NToxNi41Njk2MTA5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTM3MzkyMDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byB6ZXJvIGluIG9uIGBtYXBfY3JlYXRlYCwgcG90ZW50aWFsbHkgaW4gYHN5c2NhbGwuY2Agb3Igd2l0aGluIHRoZSBgbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb24uIEhvd2V2ZXIsIEkgaW1tZWRpYXRlbHkgbm90ZSBgbWFwX2NoZWNrX2J0ZmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBleHBvc3VyZS4gIEknbSBzZWVpbmcgYSBzdWl0ZSBvZiBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIHNvLCB0aGVyZWZvcmUsIGFyZSBleHBvcnRlZCBhbmQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2U6IGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX3NlcV9zaG93YCwgdGhlIGBodGFiX21hcF9vcHNgIGFuZCBgcmh0YWJfbWFwX29wc2Agc3RydWN0cywgYGJwZl9tYXBfY3JlYXRlYCBvciBgbWFwX2NyZWF0ZWAgKHRoZSBwb3RlbnRpYWwgcG9pbnQgb2YgZW50cnkhKSwgYW5kIGBicGZfc25wcmludGZfYnRmYC4gIGBicGZfc25wcmludGZfYnRmYCBlc3BlY2lhbGx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGlzIGEgQlBGIGhlbHBlciBhbmQgYSBub24tc3RhdGljIEJQRl9DQUxMXzUuIFRoYXQgaXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYGJwZl9zbnByaW50Zl9idGZgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdCB3aXRoaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZ2VuZXJhdGVzIHRoYXQgc3ltYm9sLCBlaXRoZXIgZGlyZWN0bHkgYXMgYGJwZl9zbnByaW50Zl9idGZgIG9yIHBvdGVudGlhbGx5IGFzIGBfX19icGZfc25wcmludGZfYnRmYC4gQWxzbywgYm90aCBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AgYW5kIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AgYXJlIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvYnRmLmNgLiBUaGF0IGdpdmVzIG1lIGEgc2xpZ2h0bHkgd2lkZXIgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCdzIG5vdyBjb25zaWRlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHN5bWJvbHMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0VWRU5UU2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZm9yIGNvbnRleHQsIGJ1dCBub3QgZGlyZWN0bHkgZXhwbG9pdGFibGUgYXQgdGhpcyBzdGFnZS4gTXkgZm9jdXMsIHRob3VnaCwgbmFycm93cyB0byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGFuZCwgYWdhaW4sIGBicGZfc25wcmludGZfYnRmYC4gVGhvc2UgYXJlIHdoYXQgSSdtIGhvbWluZyBpbiBvbi5cblxuQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIGEgZmluYWwsIHF1aWNrIHJldmlldy4gVGhlIHBhdGNoIG1vZGlmaWVzIHR3byBzcGVjaWZpYyBhcmVhczogdGhlIEJURiBzaG93IGxvZ2ljLCB0byBwcmV2ZW50IHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlcyB3aGVuIGhhbmRsaW5nIHZvaWQgbW9kaWZpZXJzIGFuZCBgQlRGX0tJTkRfVkFSYCB3aXRoIGEgYmFzZSBCVEYuIFNwZWNpZmljYWxseSwgaW4gYGtlcm5lbC9icGYvYnRmLmNgIHdpdGggYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AuIEl0IGFsc28gaW1wYWN0cyBCVEYgbWFwIHZhbGlkYXRpb24gd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdmlhIHRoZSBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgIGZ1bmN0aW9ucywgdG8gcmVqZWN0IGtleWxlc3MgQlRGIG1hcHMuXG5cblRoaXMgaXMgY29yZSBrZXJuZWwgQlBGIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgYm90aCBzeXNjYWxscyBhbmQgQlBGIHByb2dyYW1zIHRoZW1zZWx2ZXMuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBwb3RlbnRpYWxseSBzdWJ0bGUsIGJ1dCB0aGV5J3JlIGRlYWxpbmcgd2l0aCBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIHZhbGlkYXRpb24uIEknbSBub3cgZ29pbmcgdG8gZmxhZyBpdCBhcyBcIldvcnRoRnV6emluZzogdHJ1ZS5cIlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODksIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ1OjU3Ljk0MzUzNTA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjAzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDU6NTguMDY4NzQ1MTk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNjE1MTA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NTo1OC4wNjkxOTIyNDhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTkwNjEwNTc2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBCVEYgdHlwZSBmb3JtYXR0aW5nIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSBhbmQgQlBGIGhhc2ggbWFwIEJURiB2YWxpZGF0aW9uIChodGFiX21hcF9jaGVja19idGYgYW5kIHJodGFiX21hcF9jaGVja19idGYpLlxcblxcblNwZWNpZmljYWxseTpcXG4xLiBJbiBidGZfbW9kaWZpZXJfc2hvdygpLCBpdCBhZGRzIGEgY2hlY2sgZm9yIE5VTEwgYnRmX3R5cGVfb3BzKHQpIHdoZW4gbW9kaWZpZXJzIHJlc29sdmUgdG8gdm9pZCwgZmFsbGluZyBiYWNrIHRvIGJ0Zl9kZl9zaG93KCkgdG8gYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMgaXMgTlVMTCBiZWZvcmUgcmVzb2x2aW5nLCBmYWxsaW5nIGJhY2sgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cXG4zLiBJbiBodGFiX21hcF9jaGVja19idGYoKSBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZigpLCBpdCByZWplY3RzIGtleS1sZXNzIEJURiBkZWZpbml0aW9ucyB3aXRoIC1FSU5WQUwgdG8gYXZvaWQgY3Jhc2hlcyBkdXJpbmcgbWFwIGR1bXBpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBvciBleHBvc2Uga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgY3Jhc2hlcyBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI5MTEsMTQgKzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ZWxzZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuK1x0LypcbitcdCAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiBcImNvbnN0IHZvaWRcIiksIHdoaWNoXG4rXHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbitcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuK1x0ICovXG4rXHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbitcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4rXHRlbHNlXG4rXHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuIHtcbi1cdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHQvKlxuK1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4rXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXG4rXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4rXHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHRlbHNlXG4rXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4gXG4gXHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTUzMCw2ICs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbitcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4rXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4rXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuK1x0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgKzEsODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuK1xuKy8qXG4rICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluXG4rICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy5cbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuKyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXNcbisgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlclxuKyAqIHBhbmljX29uX29vcHMpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyk7XG4rXHRjb25zdCBjaGFyICpwYXRoID0gXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwiO1xuK1x0X191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRpbnQgbWFwX2ZkO1xuK1x0RklMRSAqZjtcbitcbitcdG9wdHMubWFwX2ZsYWdzID0gbWFwX2ZsYWdzO1xuK1x0b3B0cy5idGZfZmQgPSBidGZfZmQ7XG4rXHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuK1xuK1x0LypcbitcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuK1x0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXG4rXHQgKiByZWplY3Rpb24gKGUuZy4gYW4gdW5rbm93biBtYXAgdHlwZSkuXG4rXHQgKi9cbitcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwia2V5ZWRfbWFwXCIsIDQsIDQsIDgsIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImtleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbitcbitcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4rXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCJrZXlsZXNzX21hcFwiLCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbitcbitcdGlmIChtYXBfZmQgXHUwMDNlPSAwKSB7XG4rXHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4rXHRcdCh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcbitcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0XHRcdGlmIChmKSB7XG4rXHRcdFx0XHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpXG4rXHRcdFx0XHRcdDtcbitcdFx0XHRcdGZjbG9zZShmKTtcbitcdFx0XHR9XG4rXHRcdFx0dW5saW5rKHBhdGgpO1xuK1x0XHR9XG4rXHRcdGNsb3NlKG1hcF9mZCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobWFwX2ZkLCAtRUlOVkFMLCBcImtleS1sZXNzIGNyZWF0ZSBpcyByZWplY3RlZFwiKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuK3tcbitcdGludCBidGZfZmQsIHZhbF9pZDtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9fbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsIFwiYnRmX19hZGRfaW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcImJ0Zl9fbG9hZF9pbnRvX2tlcm5lbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpO1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNzMyMzJkYzJhMDQ1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbkBAIC0wLDAgKzEsODEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcIlxuK1xuKy8qXG4rICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcbisgKiAgIC0gYSBcImNvbnN0IHZvaWRcIiAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKVxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcbisgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbisgKi9cbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdGNoYXIgY3R4WzhdID0ge307XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0eXBlX2lkID0gdHlwZV9pZDtcbitcdHRvcHRzLmN0eF9pbiA9IGN0eDtcbitcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmR1bXBfdHlwZSksXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbitcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX3BhcnNlKFwiL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcIiwgTlVMTCk7XG4rXHRpZiAoIWJ0Zikge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0X2J0ZjtcbitcbitcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiAhKGN2IFx1MDAyNlx1MDAyNiB2YXIpOyBpKyspIHtcbitcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpO1xuK1x0XHRpZiAoIWN2IFx1MDAyNlx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCBcdTAwMjZcdTAwMjYgdC1cdTAwM2V0eXBlID09IDApXG4rXHRcdFx0Y3YgPSBpO1xuK1x0XHQvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSdzIGJ1ZmZlci4gKi9cbitcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuK1x0XHRcdGxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtXHUwMDNldHlwZSk7XG4rXG4rXHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuK1x0XHRcdFx0dmFyID0gaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogXCJjb25zdCB2b2lkXCIgcmVuZGVycyB0aGUgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIiBwbGFjZWhvbGRlci4gKi9cbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29uc3Rfdm9pZFwiKSkge1xuK1x0XHRpZiAoY3YpIHtcbitcdFx0XHRBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSxcbitcdFx0XHRcdCAgc2l6ZW9mKFwiXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXHUwMDNlXCIpIC0gMSwgXCJyZXRcIik7XG4rXHRcdFx0QVNTRVJUX1NUUkVRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW91dCwgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIixcbitcdFx0XHRcdCAgICAgXCJwbGFjZWhvbGRlclwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInZhclwiKSkge1xuK1x0XHRpZiAodmFyKVxuK1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCJyZXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpO1xuK291dF9idGY6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40NGFmODBmYmJiODA4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcImJ0Zl9wdHIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitfX3UzMiB0eXBlX2lkO1xuKy8qIEEgYnVmZmVyIHdlIG93biB0byByZW5kZXIgdGhlIHNlbGVjdGVkIHR5cGUgZnJvbSwga2VwdCBpbiBib3VuZHMuICovXG4rY2hhciBvYmpbMjU2XTtcbitjaGFyIG91dFs2NF07XG4rbG9uZyByZXQ7XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcbitcdFx0LnB0ciA9IG9iaixcbitcdFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHJldCA9IGJwZl9zbnByaW50Zl9idGYob3V0LCBzaXplb2Yob3V0KSwgXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDU6NTguMDY5MTkzMTE4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTA5NTA5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSByZWxldmFudCBhcmVhcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgd2hpbGUgcG90ZW50aWFsbHkgY29tcGxleCBpbiB0aGVpciBsb2dpYywgbWlnaHQgYmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRvb2xzLlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBhcmUgZGVmaW5pdGVseSB0aGUgbW9zdCBpbnRlcmVzdGluZy4gV2UndmUgZ290IHR3byBzcGVjaWZpYyBhcmVhcyBvZiBmb2N1cyB3aXRoaW4gdGhhdCBmaWxlOiBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSW4gYGJ0Zl9tb2RpZmllcl9zaG93YCwgdGhlIGNvZGUgaXMgbm93IGhhbmRsaW5nIGNhc2VzIHdoZXJlIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSBgdm9pZGAgdHlwZSwgd2hpY2ggbGFja3MgYSBzaG93IG9wZXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBudWxsIGNoZWNrIHRvIGd1YXJkIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciBhbmQgdXRpbGl6ZXMgYGJ0Zl9kZl9zaG93YCBhcyBhIGZhbGxiYWNrLiBgYnRmX3Zhcl9zaG93YCBhZGp1c3RzIHRoZSByZXNvbHV0aW9uIGxvZ2ljIGZvciB2YXJpYWJsZSB0eXBlcywgcGFydGljdWxhcmx5IGFkZHJlc3NpbmcgY2FzZXMgd2l0aCBiYXNlIEJURnMgd2hlcmUgYGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHNgIGlzIE5VTEwuIFRoaXMgZGlyZWN0IHJlc29sdmUgdXNpbmcgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBsb29rcyBsaWtlIGEgZml4IHRvIGF2b2lkIE5VTEwgZGVyZWZlcmVuY2VzIGluIHNwZWNpZmljIGNvbnRleHRzLiBCb3RoIGFwcGVhciB0byBiZSBhZGRyZXNzaW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhIGNsYXNzaWMgS0FTQU4gdGFyZ2V0LlxuXG5JbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgbmV3IGNvZGUgaW4gYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBleHBsaWNpdGx5IGRpc2FsbG93cyBoYXNoIG1hcHMgd2l0aCBrZXktbGVzcyBCVEZzIHVzaW5nIGBidGZfdHlwZV9pc192b2lkYC4gVGhpcyBpcyBhIHR5cGUgc2FmZXR5IGNoZWNrLiBUaGUgaW50ZXJlc3RpbmcgY2FzZSBpcyBgYnRmX3R5cGVfaXNfdm9pZGAsIHdoaWNoIG1pZ2h0IG9wZW4gdXAgbmV3IGNvZGUgcGF0aHMuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBzZWxmdGVzdHMgZm9yIGBidGZfbWFwX2tleWxlc3NgIGFuZCBgYnRmX3Nob3dfdm9pZGAgYXJlIGdvb2QgdG8gc2VlLiBUaGVzZSB3aWxsIG9mZmVyIHNvbWUgaW5pdGlhbCBjb3ZlcmFnZSBhbmQgdmFsaWRhdGlvbiwgYnV0IHRoZXkgbWlnaHQgbm90IGJlIGNvbXByZWhlbnNpdmUuXG5cbk5vdywgSSdsbCBkaWcgaW50byBgYnRmX2RmX3Nob3dgIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aG9zZSBudWxsIGNoZWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBkYXRhIGZsb3dzIGFuZCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgdHJpZ2dlciB0aG9zZSBjb25kaXRpb25zLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IGVmZmVjdGl2ZSBLQVNBTiBpcyBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBHaXZlbiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgdGFyZ2V0IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHR5cGUgY2hlY2tzLCBLQVNBTiBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IHRvb2wgZm9yIHZhbGlkYXRpb24gaGVyZS4gV2hpbGUgSSdsbCBrZWVwIEtNU0FOIGluIG1pbmQsIGl0IHNlZW1zIGxlc3MgbGlrZWx5IHRvIHVuY292ZXIgc2lnbmlmaWNhbnQgbmV3IGlzc3VlcyBpbiB0aGlzIHNwZWNpZmljIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDY6MTguOTc4NzA0NTk4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNzIwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2RmX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yMjY5LVxcbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXFx0XFx0XFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTktXFx0aWYgKCFidGZfdHlwZV9vcHModCkpXFxua2VybmVsL2JwZi9idGYuYzoyOTIwOlxcdFxcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjMwMjI6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz00ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmdW5jX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDg1MS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjUxNDE6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy01MjM5LVxcdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlxcdC5zaG93ID0gYnRmX2RmX3Nob3csXFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjE5Ljc3Mjk4MzYxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzY5NjQwMjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOlxuXG4qKkFuYWx5emluZyBga2VybmVsL2JwZi9idGYuY2AsIExpbmVzIDIyNjUtMjI4MCoqXG5cblJpZ2h0LCBsZXQgbWUgcHVsbCB1cCBga2VybmVsL2JwZi9idGYuY2AgYW5kIHplcm8gaW4gb24gbGluZXMgMjI2NS0yMjgwLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgZGVjb2Rpbmcgb3IgcHJvY2Vzc2luZyBzb21lIGFzcGVjdCBvZiB0aGVtLiBCYXNlZCBvbiB0aGUgbGluZSBudW1iZXJzLCBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSB3aXRoaW4gYSBsYXJnZXIgZnVuY3Rpb24sIGxpa2VseSBhIGNvcmUgZnVuY3Rpb24gZm9yIHJlYWRpbmcsIHBhcnNpbmcsIG9yIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uLlxuXG5JJ2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgcG9pbnRlciBtYW5pcHVsYXRpb24gb3Igc3RydWN0dXJlIG1lbWJlciBhY2Nlc3MgYXQgdGhpcyByYW5nZSwgcGVyaGFwcyBkZWFsaW5nIHdpdGggZXh0cmFjdGluZyB0eXBlIGluZm9ybWF0aW9uLCByZXNvbHZpbmcgcmVmZXJlbmNlcyBiZXR3ZWVuIHR5cGVzLCBvciBoYW5kbGluZyBlcnJvciBjb25kaXRpb25zIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiBJZiBpdCdzIG5lYXIgdGhlIGVuZCBvZiBhIGJsb2NrLCBpdCBjb3VsZCBiZSB0aGUgZmluYWwgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgYmUgYW55IG9mIHRoZSBgYnRmX2AgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgZnJlcXVlbnRseSB1c2VkIGluIHRoZSBgYnBmL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc2NvcGUsIGl0IG1pZ2h0IGJlIGFib3V0IHRoZSBgYnRmX3R5cGVgIHN0cnVjdHVyZSwgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQlRGIGluZm9ybWF0aW9uLlxuXG5JJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIEJURiBkYXRhIGlzIGJlaW5nIGFjY2Vzc2VkLCBwZXJoYXBzIGNhc3Rpbmcgc29tZSBzb3J0IG9mIGdlbmVyaWMgZGF0YSBidWZmZXIgaW50byBzcGVjaWZpYyBCVEYgc3RydWN0dXJlcywgb3IgbWF5YmUgdmVyaWZ5aW5nIHNvbWUgZmllbGQgdmFsdWVzIGFnYWluc3QgZXhwZWN0ZWQgcmFuZ2VzLiBJdCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHR5cGUgSURzLCBtZW1iZXIgb2Zmc2V0cywgb3IgYW55IG90aGVyIHN0cnVjdHVyYWwgZWxlbWVudCByZWxldmFudCB0byB0aGUgQlRGIGZvcm1hdC4gS25vd2luZyB0aGUgZXhhY3QgZnVuY3Rpb24gc3Vycm91bmRpbmcgdGhpcyBjb2RlIGJsb2NrIHdvdWxkIGdpdmUgbWUgbW9yZSBjb250ZXh0LCBidXQganVzdCBmcm9tIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBCVEYtcmVsYXRlZCBvcGVyYXRpb24gdG8gb2NjdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NjozNy40NjkzODkyMDVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI2NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2NTpcXHR7XFxuMjI2NjpcXHRcXHRidGZfdmVyaWZpZXJfbG9nX2Jhc2ljKGVudiwgdi1cXHUwMDNldCwgXFxcIlVuc3VwcG9ydGVkIHJlc29sdmVcXFwiKTtcXG4yMjY3OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNjg6XFx0fVxcbjIyNjk6XFx0XFxuMjI3MDpcXHRzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yMjcxOlxcdFxcdFxcdFxcdHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldHMsXFxuMjI3MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXFxuMjI3MzpcXHR7XFxuMjI3NDpcXHRcXHRidGZfc2hvdyhzaG93LCBcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6JXVcXHUwMDNlXFxcIiwgQlRGX0lORk9fS0lORCh0LVxcdTAwM2VpbmZvKSk7XFxuMjI3NTpcXHR9XFxuMjI3NjpcXHRcXG4yMjc3OlxcdHN0YXRpYyBpbnQgYnRmX2ludF9jaGVja19tZW1iZXIoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjc4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3RydWN0X3R5cGUsXFxuMjI3OTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxcbjIyODA6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZSlcXG4yMjgxOlxcdHtcXG4yMjgyOlxcdFxcdHUzMiBpbnRfZGF0YSA9IGJ0Zl90eXBlX2ludChtZW1iZXJfdHlwZSk7XFxuMjI4MzpcXHRcXHR1MzIgc3RydWN0X2JpdHNfb2ZmID0gbWVtYmVyLVxcdTAwM2VvZmZzZXQ7XFxuMjI4NDpcXHRcXHR1MzIgc3RydWN0X3NpemUgPSBzdHJ1Y3RfdHlwZS1cXHUwMDNlc2l6ZTtcXG4yMjg1OlxcdFxcdHUzMiBucl9jb3B5X2JpdHM7XFxuMjI4NjpcXHRcXHR1MzIgYnl0ZXNfb2Zmc2V0O1xcbjIyODc6XFx0XFxuMjI4ODpcXHRcXHRpZiAoVTMyX01BWCAtIHN0cnVjdF9iaXRzX29mZiBcXHUwMDNjIEJURl9JTlRfT0ZGU0VUKGludF9kYXRhKSkge1xcbjIyODk6XFx0XFx0XFx0YnRmX3ZlcmlmaWVyX2xvZ19tZW1iZXIoZW52LCBzdHJ1Y3RfdHlwZSwgbWVtYmVyLFxcbjIyOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFxcImJpdHNfb2Zmc2V0IGV4Y2VlZHMgVTMyX01BWFxcXCIpO1xcbjIyOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI5MjpcXHRcXHR9XFxuMjI5MzpcXHRcXG4yMjk0OlxcdFxcdHN0cnVjdF9iaXRzX29mZiArPSBCVEZfSU5UX09GRlNFVChpbnRfZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjM3LjQ3MDA3NTQzNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzcxNjI0NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQlRGIEluc3BlY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5zcGVjdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGJlaW5nIGRpc3BsYXllZCwgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB2YXJpYWJsZSBwcmVzZW50YXRpb24gd2l0aGluIHRoZSBCVEYgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBkaWRuJ3QgZnVsbHkgc2F0aXNmeSBteSBuZWVkIGZvciBhIGRlZXAgdW5kZXJzdGFuZGluZy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YCBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZXMgMjkwMCB0byAyOTQwLiBUaGlzIHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBpbnRlZ3JhdGVkIGFuZCByZW5kZXJlZCBpbiB0aGUgb3V0cHV0LiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgY2xhcmlmaWNhdGlvbiBjb3VsZCBiZSBuZWVkZWQuIFRoaXMgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIHNob3VsZCBnaXZlIG1lIHRoZSBmaW5lIGRldGFpbCBJIGFtIHNlZWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjU1LjE4NjMyNDU0NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTAwOlxcdFxcbjI5MDE6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMjpcXHR9XFxuMjkwMzpcXHRcXG4yOTA0OlxcdHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4yOTA1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yOTA2OlxcdFxcdFxcdFxcdCAgICAgIHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLFxcbjI5MDc6XFx0XFx0XFx0XFx0ICAgICAgdTggYml0c19vZmZzZXQsIHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4yOTA4OlxcdHtcXG4yOTA5OlxcdFxcdGlmIChidGYtXFx1MDAzZXJlc29sdmVkX2lkcylcXG4yOTEwOlxcdFxcdFxcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXFx1MDAyNnR5cGVfaWQpO1xcbjI5MTE6XFx0XFx0ZWxzZVxcbjI5MTI6XFx0XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuMjkxMzpcXHRcXG4yOTE0OlxcdFxcdC8qXFxuMjkxNTpcXHRcXHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXFxcImNvbnN0IHZvaWRcXFwiKSwgd2hpY2hcXG4yOTE2OlxcdFxcdCAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlclxcbjI5MTc6XFx0XFx0ICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuXFxuMjkxODpcXHRcXHQgKi9cXG4yOTE5OlxcdFxcdGlmICghYnRmX3R5cGVfb3BzKHQpKVxcbjI5MjA6XFx0XFx0XFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuMjkyMTpcXHRcXHRlbHNlXFxuMjkyMjpcXHRcXHRcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuMjkyMzpcXHR9XFxuMjkyNDpcXHRcXG4yOTI1OlxcdHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yOTI2OlxcdFxcdFxcdFxcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXFxuMjkyNzpcXHRcXHRcXHRcXHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxcbjI5Mjg6XFx0e1xcbjI5Mjk6XFx0XFx0LypcXG4yOTMwOlxcdFxcdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcXG4yOTMxOlxcdFxcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cXG4yOTMyOlxcdFxcdCAqIFJlc29sdmUgdGhlIHZhcidzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxcbjI5MzM6XFx0XFx0ICovXFxuMjkzNDpcXHRcXHRpZiAoYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMpXFxuMjkzNTpcXHRcXHRcXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4yOTM2OlxcdFxcdGVsc2VcXG4yOTM3OlxcdFxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZ0eXBlX2lkKTtcXG4yOTM4OlxcdFxcbjI5Mzk6XFx0XFx0YnRmX3R5cGVfb3BzKHQpLVxcdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbjI5NDA6XFx0fVxcbjI5NDE6XFx0XFxuMjk0MjpcXHRzdGF0aWMgdm9pZCBidGZfcHRyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuMjk0MzpcXHRcXHRcXHRcXHQgdTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxcbjI5NDQ6XFx0XFx0XFx0XFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDY6NTUuMTg3MDYyMjU1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODA0OTc4MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGhhc2h0YWJsZSB2ZXJpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb25zIGxvY2F0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucywgcHJlc3VtYWJseSwgdmFsaWRhdGUgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uIGluIHRoZSBjb250ZXh0IG9mIHJlZ3VsYXIgYW5kIHJlLWhhc2hlZCBoYXNodGFibGVzLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBjb25jZXJuLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MsIGFuZCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGVja3MgcGVyZm9ybWVkIGZvciBwcm9ncmFtIHNlY3VyaXR5IGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NzoxOC45OTIwNDMzMDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHRcXHRyZXR1cm4gMDtcXG4gNTI2OlxcdH1cXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiA1Mjk6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbiA1MzA6XFx0e1xcbiA1MzE6XFx0XFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbiA1MzQ6XFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxcbiA1MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxcbiA1Mzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUzOTpcXHRcXHQvKlxcbiA1NDA6XFx0XFx0ICogV2UgbXVzdCBzZXQgdGhlIGR0b3IgdXNpbmcgdGhpcyBjYWxsYmFjaywgYXMgbWFwJ3MgQlRGIHJlY29yZCBpcyBub3RcXG4gNTQxOlxcdFxcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cXG4gNTQyOlxcdFxcdCAqL1xcbiA1NDM6XFx0XFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKVxcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpO1xcbiA1NDU6XFx0XFx0ZWxzZVxcbiA1NDY6XFx0XFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VtYSwgaHRhYl9tZW1fZHRvcik7XFxuIDU0NzpcXHR9XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ3OjE4Ljk5MjM5MDM2OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA2MTQwODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaXRzIHJvbGUgYW5kIGVuc3VyZSBpdCdzIG5vdCB0aGUgc291cmNlIG9yIGEgY29udHJpYnV0aW5nIGZhY3RvciB0byB3aGF0ZXZlciBwcm9ibGVtIHdlJ3JlIHRyYWNraW5nIGRvd24uIEdvdHRhIGJlIG1ldGhvZGljYWwgYW5kIGNvdmVyIGFsbCB0aGUgYmFzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8uLi4gd2VsbCwgSSdsbCBuZWVkIG1vcmUgY29udGV4dCB0byBrbm93IHdoYXQgaXQgaXMgcmVsYXRlZCB0bywgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgbWFrZSBzdXJlIGl0IGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDc6MjQuMDk4NTM0Mjg4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTA1OlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4zMTA2OlxcdFxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSArIHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4zMTA3OlxcdFxcbjMxMDg6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4zMTA5OlxcdH1cXG4zMTEwOlxcdFxcbjMxMTE6XFx0c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4zMTEyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLFxcbjMxMTM6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4zMTE0OlxcdHtcXG4zMTE1OlxcdFxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG4zMTE2OlxcdFxcbjMxMTc6XFx0XFx0LyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi9cXG4zMTE4OlxcdFxcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcXG4zMTE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMjA6XFx0XFxuMzEyMTpcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xcbjMxMjI6XFx0fVxcbjMxMjM6XFx0XFxuMzEyNDpcXHRzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ3OjI0LjA5ODg2MDU3OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzAzMTM1OTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gRGVjaXNpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgdGhlIEtNU0FOIGZ1enppbmcuIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzLiBJbiBga2VybmVsL2JwZi9idGYuY2AsIHdlJ3JlIGhhcmRlbmluZyBhZ2FpbnN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBpcyBiZWluZyBwYXRjaGVkIHRvIGhhbmRsZSB0aGUgYHZvaWRgIG1vZGlmaWVyIGdyYWNlZnVsbHkgYW5kIGBidGZfdmFyX3Nob3dgIGlzIGhhbmRsaW5nIGEgcG90ZW50aWFsIE5VTEwgYHJlc29sdmVkX2lkc2AgcG9pbnRlciBpbiBiYXNlIEJURiBzY2VuYXJpb3MuIEdvb2QsIGRlZmVuc2l2ZSBjb2RpbmcuIFRoZW4sIHdlIHNlZSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgYmVpbmcgdHdlYWtlZCB0byByZWplY3Qga2V5LWxlc3MgQlRGIG1hcHMsIGFnYWluLCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgbGF0ZXIgaW4gdGhlIGBicGZmc2AgZHVtcCBvcGVyYXRpb24uIEZpbmFsbHksIHRoZXJlJ3MgdGhlIGFkZGl0aW9uIG9mIHNlbGZ0ZXN0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gQXJlIHdlIHNlbmRpbmcga2VybmVsIHN0cnVjdHVyZXMgd2l0aCBnYXJiYWdlIGRhdGEgdG8gdXNlcnNwYWNlPyBOb3BlLiBBcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgYmFzZWQgb24gdGhlbT8gTm90IGhhcHBlbmluZyBoZXJlLiBOZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMgaW50cm9kdWNlZD8gTm8uIEFyZSBib3VuZHMgY2hlY2tzIGJlaW5nIHJlbGF4ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYnVncyBiZWluZyBmaXhlZCBhcmUgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBLQVNBTiwgYW5kIHRoZSBrZXJuZWwncyBub3JtYWwgb29wcyBzeXN0ZW0gc2hvdWxkIGNhdGNoLiBTbywgbm90IEtNU0FOIG1hdGVyaWFsLlxuXG5UaGF0IHRha2VzIGNhcmUgb2YgdGhlIHRlY2huaWNhbCByZXZpZXcsIGJ1dCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZyBLTVNBTi5cblxuTXkgcnVsZSBvZiB0aHVtYiBpczogaWYgYSBidWcgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgb3Igc2ltaWxhciwgd2UgKmRvbid0KiBydW4gYSBLTVNBTiBzZXNzaW9uLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmU7IHdlIHVzZSBpdCBvbmx5IHdoZW4gd2UgaGF2ZSB0by4gVGhlIGNvZGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3MgdGhhdCBLTVNBTiBhbG9uZSBjYW4gZGV0ZWN0LlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgY2xlYXI6IEknbGwgaW52b2tlIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyBJIGp1c3QgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI2LCJPdXRwdXRUb2tlbnMiOjI4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ4OjM3LjEzMDIyNDQ2NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 12:01:31 +0000 UTC FinishedAt: 2026-08-31 12:48:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f62a9b82700c718cdf619fb36aaab31015ff87eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "f62a9b82700c718cdf619fb36aaab31015ff87eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_EVENTS" ], "series_id": "a53e4eb9-57cd-4f3d-a081-873d90cb628a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "btf_type_snprintf_show", "btf_type_seq_show_flags", "bpf_snprintf_btf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93JiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX3NlcV9zaG93X2ZsYWdzJiMzNDssCiAgICAmIzM0O2JwZl9zbnByaW50Zl9idGYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggOTFiOGNlNzdmNjk5YS4uM2NmMzVlZTQ5YzEwMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC0yOTExLDE0ICYjNDM7MjkxMSwzMCBAQCBzdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRlbHNlXG4gXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuIFxuLVx0YnRmX3R5cGVfb3BzKHQpLVx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXCYjMzQ7Y29uc3Qgdm9pZFwmIzM0OyksIHdoaWNoXG4mIzQzO1x0ICogaGFzIG5vIHNob3cgb3AgKGtpbmRfb3BzW0JURl9LSU5EX1VOS05dIGlzIE5VTEwpLiBQcmludCBhIHBsYWNlaG9sZGVyXG4mIzQzO1x0ICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFidGZfdHlwZV9vcHModCkpXG4mIzQzO1x0XHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuIFx0XHRcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXG4gXHRcdFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcbiB7XG4tXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFx1MDAyNnR5cGVfaWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4mIzQzO1x0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxuJiM0MztcdCAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnRmLVx1MDAzZXJlc29sdmVkX2lkcylcbiYjNDM7XHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0eXBlX2lkKTtcbiBcbiBcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi40MzEyMzQyNDE4M2M3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtNTMwLDYgJiM0Mzs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbiYjNDM7XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuJiM0MztcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMzExMCw2ICYjNDM7MzExNCwxMCBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbiYjNDM7XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuJiM0MztcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgJiM0MzsxLDgyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgaGFzaCBtYXAgd2l0aCBhIGtleS1sZXNzIEJURiAoYnRmX2tleV90eXBlX2lkID09IDApIHVzZWQgdG8gTlVMTC1kZXJlZiBpblxuJiM0MzsgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLlxuJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuJiM0MzsgKiBwaW4tYW5kLXJlYWQgYmVsb3cgZGVsaWJlcmF0ZWx5IHdhbGtzIHRoYXQgYnBmZnMgZHVtcCBwYXRoLCBzbyBpdCBkb3VibGVzXG4mIzQzOyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyXG4mIzQzOyAqIHBhbmljX29uX29vcHMpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMpO1xuJiM0MztcdGNvbnN0IGNoYXIgKnBhdGggPSBcJiMzNDsvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwmIzM0OztcbiYjNDM7XHRfX3UzMiBrZXkgPSAxLCB2YWwgPSAweDQxNDI0MzQ0O1xuJiM0MztcdGNoYXIgYnVmWzI1Nl07XG4mIzQzO1x0aW50IG1hcF9mZDtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFncztcbiYjNDM7XHRvcHRzLmJ0Zl9mZCA9IGJ0Zl9mZDtcbiYjNDM7XHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuJiM0MztcdCAqIHNvIHRoZSAtRUlOVkFMIGJlbG93IGlzIGFib3V0IHRoZSBrZXktbGVzcyBCVEYgYW5kIG5vdCBzb21lIHVucmVsYXRlZFxuJiM0MztcdCAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IHZhbF9pZDtcbiYjNDM7XHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCYjMzQ7a2V5ZWRfbWFwXCYjMzQ7LCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsIFwmIzM0O2tleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2xvc2UobWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBrZXktbGVzcyBCVEYgbXVzdCBiZSByZWplY3RlZC4gKi9cbiYjNDM7XHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4mIzQzO1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwmIzM0O2tleWxlc3NfbWFwXCYjMzQ7LCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hcF9mZCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4mIzQzO1x0XHQodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuJiM0MztcdFx0aWYgKGJwZl9vYmpfcGluKG1hcF9mZCwgcGF0aCkgPT0gMCkge1xuJiM0MztcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChmKSB7XG4mIzQzO1x0XHRcdFx0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKVxuJiM0MztcdFx0XHRcdFx0O1xuJiM0MztcdFx0XHRcdGZjbG9zZShmKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR1bmxpbmsocGF0aCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjbG9zZShtYXBfZmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9mZCwgLUVJTlZBTCwgXCYjMzQ7a2V5LWxlc3MgY3JlYXRlIGlzIHJlamVjdGVkXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGJ0Zl9mZCwgdmFsX2lkO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcJiMzNDtidGZfX25ld19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZhbF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwmIzM0O2ludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcdGlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgXCYjMzQ7YnRmX19hZGRfaW50XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhidGZfX2xvYWRfaW50b19rZXJuZWwoYnRmKSwgXCYjMzQ7YnRmX19sb2FkX2ludG9fa2VybmVsXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGJ0Zl9mZCA9IGJ0Zl9fZmQoYnRmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aGFzaFwmIzM0OykpXG4mIzQzO1x0XHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9IQVNILCAwLCBidGZfZmQsIHZhbF9pZCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmhhc2hcJiMzNDspKVxuJiM0MztcdFx0Y2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfUkhBU0gsIEJQRl9GX05PX1BSRUFMTE9DLCBidGZfZmQsIHZhbF9pZCk7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuY1xuQEAgLTAsMCAmIzQzOzEsODEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfc2hvd192b2lkLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuJiM0MzsgKiBUd28gc3VjaCB0eXBlX2lkcyB1c2VkIHRvIE5VTEwtZGVyZWYgaW4gdGhlIEJURiBzaG93IHBhdGg6XG4mIzQzOyAqICAgLSBhIFwmIzM0O2NvbnN0IHZvaWRcJiMzNDsgKGEgbW9kaWZpZXIgcmVzb2x2aW5nIHRvIHZvaWQpIGluIGJ0Zl9tb2RpZmllcl9zaG93KClcbiYjNDM7ICogICAtIGEgQlRGX0tJTkRfVkFSIGluIGJ0Zl92YXJfc2hvdygpIChiYXNlIEJURiBoYXMgbm8gcmVzb2x2ZWRfaWRzKVxuJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIHJ1bihzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbCwgX191MzIgdHlwZV9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4mIzQzO1x0Y2hhciBjdHhbOF0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XG4mIzQzO1x0dG9wdHMuY3R4X2luID0gY3R4O1xuJiM0MztcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5kdW1wX3R5cGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcJiMzNDt0ZXN0X3J1blwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbiYjNDM7XHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbiYjNDM7XHRpbnQgaSwgbiwgY3YgPSAwLCB2YXIgPSAwO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19wYXJzZShcJiMzNDsvc3lzL2tlcm5lbC9idGYvdm1saW51eFwmIzM0OywgTlVMTCk7XG4mIzQzO1x0aWYgKCFidGYpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9idGY7XG4mIzQzO1xuJiM0MztcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgbiBcdTAwMjZcdTAwMjYgIShjdiBcdTAwMjZcdTAwMjYgdmFyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBpKTtcbiYjNDM7XHRcdGlmICghY3YgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX0NPTlNUIFx1MDAyNlx1MDAyNiB0LVx1MDAzZXR5cGUgPT0gMClcbiYjNDM7XHRcdFx0Y3YgPSBpO1xuJiM0MztcdFx0LyogUGljayBhIFZBUiBzbWFsbCBlbm91Z2ggdG8gcmVuZGVyIGZyb20gdGhlIHByb2dyYW0mIzM5O3MgYnVmZmVyLiAqL1xuJiM0MztcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuJiM0MztcdFx0XHRsb25nIHN6ID0gYnRmX19yZXNvbHZlX3NpemUoYnRmLCB0LVx1MDAzZXR5cGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuJiM0MztcdFx0XHRcdHZhciA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDtjb25zdCB2b2lkXCYjMzQ7IHJlbmRlcnMgdGhlIFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFx1MDAzZVwmIzM0OyBwbGFjZWhvbGRlci4gKi9cbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjb25zdF92b2lkXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGN2KSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShydW4oc2tlbCwgY3YpLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFx1MDAzZVwmIzM0OykgLSAxLCBcJiMzNDtyZXRcJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfU1RSRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlb3V0LCBcJiMzNDtcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtwbGFjZWhvbGRlclwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIEJURl9LSU5EX1ZBUiBtdXN0IHJlc29sdmUgYW5kIHJlbmRlciB3aXRob3V0IGVycm9yLiAqL1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3ZhclwmIzM0OykpIHtcbiYjNDM7XHRcdGlmICh2YXIpXG4mIzQzO1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCYjMzQ7cmV0XCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnRmX3Nob3dfdm9pZF9fZGVzdHJveShza2VsKTtcbiYjNDM7b3V0X2J0ZjpcbiYjNDM7XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRhZjgwZmJiYjgwOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuY1xuQEAgLTAsMCAmIzQzOzEsMjQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnRmX3B0ci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztfX3UzMiB0eXBlX2lkO1xuJiM0MzsvKiBBIGJ1ZmZlciB3ZSBvd24gdG8gcmVuZGVyIHRoZSBzZWxlY3RlZCB0eXBlIGZyb20sIGtlcHQgaW4gYm91bmRzLiAqL1xuJiM0MztjaGFyIG9ialsyNTZdO1xuJiM0MztjaGFyIG91dFs2NF07XG4mIzQzO2xvbmcgcmV0O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9wdHIgcHRyID0ge1xuJiM0MztcdFx0LnB0ciA9IG9iaixcbiYjNDM7XHRcdC50eXBlX2lkID0gdHlwZV9pZCxcbiYjNDM7XHRcdC5mbGFncyA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCBcdTAwMjZwdHIsIHNpemVvZihwdHIpLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3R5cGVfc25wcmludGZfc2hvdyYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9zZXFfc2hvd19mbGFncyYjMzQ7LAogICAgJiMzNDticGZfc25wcmludGZfYnRmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDkxYjhjZTc3ZjY5OWEuLjNjZjM1ZWU0OWMxMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtMjkxMSwxNCAmIzQzOzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCWVsc2UKIAkJdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7CiAKLQlidGZfdHlwZV9vcHModCktJmd0O3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiAmIzM0O2NvbnN0IHZvaWQmIzM0OyksIHdoaWNoCiYjNDM7CSAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlcgomIzQzOwkgKiBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgTlVMTC4KJiM0MzsJICovCiYjNDM7CWlmICghYnRmX3R5cGVfb3BzKHQpKQomIzQzOwkJYnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiYjNDM7CWVsc2UKJiM0MzsJCWJ0Zl90eXBlX29wcyh0KS0mZ3Q7c2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTsKIH0KIAogc3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCQkJIHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCwKIAkJCSBzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpCiB7Ci0JdCA9IGJ0Zl90eXBlX2lkX3Jlc29sdmUoYnRmLCAmYW1wO3R5cGVfaWQpOwomIzQzOwkvKgomIzQzOwkgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMCiYjNDM7CSAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS4KJiM0MzsJICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzKQomIzQzOwkJdCA9IGJ0Zl90eXBlX2lkX3Jlc29sdmUoYnRmLCAmYW1wO3R5cGVfaWQpOwomIzQzOwllbHNlCiYjNDM7CQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCAmYW1wO3R5cGVfaWQpOwogCiAJYnRmX3R5cGVfb3BzKHQpLSZndDtzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi40MzEyMzQyNDE4M2M3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtNTMwLDYgJiM0Mzs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogewogCXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAomIzQzOwkvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqLwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTMxMTAsNiAmIzQzOzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIHsKIAlzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7CiAKJiM0MzsJLyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi8KJiM0MzsJaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7cmh0YWItJmd0O21hLCByaHRhYl9tZW1fZHRvcik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jCkBAIC0wLDAgJiM0MzsxLDgyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGhhc2ggbWFwIHdpdGggYSBrZXktbGVzcyBCVEYgKGJ0Zl9rZXlfdHlwZV9pZCA9PSAwKSB1c2VkIHRvIE5VTEwtZGVyZWYgaW4KJiM0MzsgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLgomIzQzOyAqIEEgZml4ZWQga2VybmVsIHJlamVjdHMgc3VjaCBhIG1hcCBhdCBjcmVhdGlvbjsgb24gYW4gdW5maXhlZCBrZXJuZWwgdGhlCiYjNDM7ICogcGluLWFuZC1yZWFkIGJlbG93IGRlbGliZXJhdGVseSB3YWxrcyB0aGF0IGJwZmZzIGR1bXAgcGF0aCwgc28gaXQgZG91YmxlcwomIzQzOyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyCiYjNDM7ICogcGFuaWNfb25fb29wcykuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMpOwomIzQzOwljb25zdCBjaGFyICpwYXRoID0gJiMzNDsvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcCYjMzQ7OwomIzQzOwlfX3UzMiBrZXkgPSAxLCB2YWwgPSAweDQxNDI0MzQ0OwomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFnczsKJiM0MzsJb3B0cy5idGZfZmQgPSBidGZfZmQ7CiYjNDM7CW9wdHMuYnRmX3ZhbHVlX3R5cGVfaWQgPSB2YWxfaWQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLAomIzQzOwkgKiBzbyB0aGUgLUVJTlZBTCBiZWxvdyBpcyBhYm91dCB0aGUga2V5LWxlc3MgQlRGIGFuZCBub3Qgc29tZSB1bnJlbGF0ZWQKJiM0MzsJICogcmVqZWN0aW9uIChlLmcuIGFuIHVua25vd24gbWFwIHR5cGUpLgomIzQzOwkgKi8KJiM0MzsJb3B0cy5idGZfa2V5X3R5cGVfaWQgPSB2YWxfaWQ7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKG1hcF90eXBlLCAmIzM0O2tleWVkX21hcCYjMzQ7LCA0LCA0LCA4LCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsICYjMzQ7a2V5ZWQgY3JlYXRlIGlzIGFjY2VwdGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzOwomIzQzOwkvKiBBIGtleS1sZXNzIEJURiBtdXN0IGJlIHJlamVjdGVkLiAqLwomIzQzOwlvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKG1hcF90eXBlLCAmIzM0O2tleWxlc3NfbWFwJiMzNDssIDQsIDQsIDgsICZhbXA7b3B0cyk7CiYjNDM7CiYjNDM7CWlmIChtYXBfZmQgJmd0Oz0gMCkgewomIzQzOwkJLyogVW5maXhlZCBrZXJuZWw6IHJlcHJvZHVjZSB0aGUgb29wcyB2aWEgdGhlIGJwZmZzIGR1bXAgcGF0aC4gKi8KJiM0MzsJCSh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwomIzQzOwkJaWYgKGJwZl9vYmpfcGluKG1hcF9mZCwgcGF0aCkgPT0gMCkgewomIzQzOwkJCWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CQkJaWYgKGYpIHsKJiM0MzsJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQomIzQzOwkJCQkJOwomIzQzOwkJCQlmY2xvc2UoZik7CiYjNDM7CQkJfQomIzQzOwkJCXVubGluayhwYXRoKTsKJiM0MzsJCX0KJiM0MzsJCWNsb3NlKG1hcF9mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKG1hcF9mZCwgLUVJTlZBTCwgJiMzNDtrZXktbGVzcyBjcmVhdGUgaXMgcmVqZWN0ZWQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9idGZfbWFwX2tleWxlc3Modm9pZCkKJiM0Mzt7CiYjNDM7CWludCBidGZfZmQsIHZhbF9pZDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwomIzQzOwlidGYgPSBidGZfX25ld19lbXB0eSgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCAmIzM0O2J0Zl9fbmV3X2VtcHR5JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgJiMzNDtidGZfX2FkZF9pbnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnRmX19sb2FkX2ludG9fa2VybmVsKGJ0ZiksICYjMzQ7YnRmX19sb2FkX2ludG9fa2VybmVsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWJ0Zl9mZCA9IGJ0Zl9fZmQoYnRmKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtoYXNoJiMzNDspKQomIzQzOwkJY2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfSEFTSCwgMCwgYnRmX2ZkLCB2YWxfaWQpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3JoYXNoJiMzNDspKQomIzQzOwkJY2hlY2tfa2V5bGVzcyhCUEZfTUFQX1RZUEVfUkhBU0gsIEJQRl9GX05PX1BSRUFMTE9DLCBidGZfZmQsIHZhbF9pZCk7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDczMjMyZGMyYTA0NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9zaG93X3ZvaWQuYwpAQCAtMCwwICYjNDM7MSw4MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX3Nob3dfdm9pZC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLgomIzQzOyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDoKJiM0MzsgKiAgIC0gYSAmIzM0O2NvbnN0IHZvaWQmIzM0OyAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKQomIzQzOyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcykKJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwljaGFyIGN0eFs4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R5cGVfaWQgPSB0eXBlX2lkOwomIzQzOwl0b3B0cy5jdHhfaW4gPSBjdHg7CiYjNDM7CXRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmR1bXBfdHlwZSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHNrZWwtJmd0O2Jzcy0mZ3Q7cmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX3Nob3dfdm9pZCh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDsKJiM0MzsJaW50IGksIG4sIGN2ID0gMCwgdmFyID0gMDsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwomIzQzOwlidGYgPSBidGZfX3BhcnNlKCYjMzQ7L3N5cy9rZXJuZWwvYnRmL3ZtbGludXgmIzM0OywgTlVMTCk7CiYjNDM7CWlmICghYnRmKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9zaG93X3ZvaWRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXRfYnRmOwomIzQzOwomIzQzOwluID0gYnRmX190eXBlX2NudChidGYpOwomIzQzOwlmb3IgKGkgPSAxOyBpICZsdDsgbiAmYW1wOyZhbXA7ICEoY3YgJmFtcDsmYW1wOyB2YXIpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpOwomIzQzOwkJaWYgKCFjdiAmYW1wOyZhbXA7IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX0NPTlNUICZhbXA7JmFtcDsgdC0mZ3Q7dHlwZSA9PSAwKQomIzQzOwkJCWN2ID0gaTsKJiM0MzsJCS8qIFBpY2sgYSBWQVIgc21hbGwgZW5vdWdoIHRvIHJlbmRlciBmcm9tIHRoZSBwcm9ncmFtJiMzOTtzIGJ1ZmZlci4gKi8KJiM0MzsJCWlmICghdmFyICZhbXA7JmFtcDsgYnRmX2tpbmQodCkgPT0gQlRGX0tJTkRfVkFSKSB7CiYjNDM7CQkJbG9uZyBzeiA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgdC0mZ3Q7dHlwZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHN6ICZndDsgMCAmYW1wOyZhbXA7IHN6ICZsdDs9IChsb25nKXNpemVvZihza2VsLSZndDtic3MtJmd0O29iaikpCiYjNDM7CQkJCXZhciA9IGk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogJiMzNDtjb25zdCB2b2lkJiMzNDsgcmVuZGVycyB0aGUgJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7IHBsYWNlaG9sZGVyLiAqLwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NvbnN0X3ZvaWQmIzM0OykpIHsKJiM0MzsJCWlmIChjdikgewomIzQzOwkJCUFTU0VSVF9FUShydW4oc2tlbCwgY3YpLAomIzQzOwkJCQkgIHNpemVvZigmIzM0OyZsdDt1bnN1cHBvcnRlZCBraW5kOjAmZ3Q7JiMzNDspIC0gMSwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX1NUUkVRKHNrZWwtJmd0O2Jzcy0mZ3Q7b3V0LCAmIzM0OyZsdDt1bnN1cHBvcnRlZCBraW5kOjAmZ3Q7JiMzNDssCiYjNDM7CQkJCSAgICAgJiMzNDtwbGFjZWhvbGRlciYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dmFyJiMzNDspKSB7CiYjNDM7CQlpZiAodmFyKQomIzQzOwkJCUFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ0Zl9zaG93X3ZvaWRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7b3V0X2J0ZjoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRhZjgwZmJiYjgwOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX3B0ci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7X191MzIgdHlwZV9pZDsKJiM0MzsvKiBBIGJ1ZmZlciB3ZSBvd24gdG8gcmVuZGVyIHRoZSBzZWxlY3RlZCB0eXBlIGZyb20sIGtlcHQgaW4gYm91bmRzLiAqLwomIzQzO2NoYXIgb2JqWzI1Nl07CiYjNDM7Y2hhciBvdXRbNjRdOwomIzQzO2xvbmcgcmV0OwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgZHVtcF90eXBlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfcHRyIHB0ciA9IHsKJiM0MzsJCS5wdHIgPSBvYmosCiYjNDM7CQkudHlwZV9pZCA9IHR5cGVfaWQsCiYjNDM7CQkuZmxhZ3MgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXQgPSBicGZfc25wcmludGZfYnRmKG91dCwgc2l6ZW9mKG91dCksICZhbXA7cHRyLCBzaXplb2YocHRyKSwgMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgJmFtcDsgRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgYSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGEgYml0IG9mIGEgbnVhbmNlZCBhcmVhLCBidXQgdGhlIGNvcmUgb2YgaXQgaXMgd2hldGhlciB0aGVzZSBjb2RlIG1vZGlmaWNhdGlvbnMgY291bGQgaW50cm9kdWNlIG5ldyBwYXRocyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIuCgpGaXJzdCwgbGV0IG1lIGFuYWx5emUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcy4gSSBzZWUgYWRqdXN0bWVudHMgdG8gYGJ0Zl9tb2RpZmllcl9zaG93YCB3aXRoaW4gYGtlcm5lbC9icGYvYnRmLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIGFkZGluZyBudWxsIGNoZWNrcyBgaWYgKCFidGZfdHlwZV9vcHModCkpYCB3aGVuIHNraXBwaW5nIG1vZGlmaWVycyByZXNvbHZlcyB0byB2b2lkIHR5cGUuIFRoaXMgbG9naWMgY2hhbmdlIG1pZ2h0IGJlIGludGVyZXN0aW5nLiBUaGUgYWRkZWQgY2FsbCB0byBgYnRmX2RmX3Nob3coKWAgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFNpbWlsYXJseSwgdGhlIGNoZWNrIGluIGBidGZfdmFyX3Nob3dgIHdpdGggYGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzYCB2ZXJzdXMgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KClRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIHNwZWNpZmljYWxseSBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgLCBub3cgZXhwbGljaXRseSByZWplY3Qgdm9pZCBrZXkgdHlwZXMgd2l0aCBgaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGxpa2VseSBhIGhhcmRlbmluZyBtZWFzdXJlLCBidXQgYW55dGltZSB0aGVyZSBhcmUgbmV3IGVycm9yIGNoZWNrcywgdGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhlIGVycm9yIGhhbmRsaW5nIGl0c2VsZiBjb3VsZCBiZSBmbGF3ZWQuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBlcnJvciByZXR1cm5zIHRvLgoKRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBuZXcgc2VsZnRlc3RzLCBgYnRmX21hcF9rZXlsZXNzLmNgLCBgYnRmX3Nob3dfdm9pZC5jYCwgYW5kIGBidGZfc2hvd192b2lkLmNgIGluZGljYXRlcyB0aGUgZGV2ZWxvcGVycyBhcmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgYXJlIGFjdGl2ZWx5IHRlc3RpbmcgdGhlbSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEhvd2V2ZXIsIHRoZXkgbWlnaHQgbm90IGJlIHRlc3RpbmcgdGhlIGZ1bGwgc3RhdGUgc3BhY2UuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgdGVzdHMsIGFuZCB0aGVuIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGFmZmVjdGVkIGNvZGUgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlIGVub3VnaC4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB0cnVseSBuZWNlc3NhcnksIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgdGFyZ2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J0Zl90eXBlX3Nob3d8YnRmX21vZGlmaWVyX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9MzUwPWNvbnN0IGNoYXIgKmJ0Zl90eXBlX3N0cihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNzgtICogdGhlaXIgb3duIGRhdGEgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHN0cnVjdCBidGZfc2hvdyBhbmQgY29uc3VsdCBpdFxua2VybmVsL2JwZi9idGYuYzozNzk6ICogaW4gdGhlIHNob3cgY2FsbGJhY2suICBTZWUgYnRmX3R5cGVfc2hvdygpIGJlbG93Llxua2VybmVsL2JwZi9idGYuYy0zODAtICpcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTEwNzc9c3RhdGljIGNvbnN0IGNoYXIgKmJ0Zl9zaG93X25hbWUoc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMTExMy1cdCAqIFN0YXJ0IHdpdGggdHlwZV9pZCwgYXMgd2UgaGF2ZSByZXNvbHZlZCB0aGUgc3RydWN0IGJ0Zl90eXBlICpcbmtlcm5lbC9icGYvYnRmLmM6MTExNDpcdCAqIHZpYSBidGZfbW9kaWZpZXJfc2hvdygpIHBhc3QgdGhlIHBhcmVudCB0eXBlZGVmIHRvIHRoZSBjaGlsZFxua2VybmVsL2JwZi9idGYuYy0xMTE1LVx0ICogc3RydWN0LCBpbnQgZXRjIGl0IGlzIGRlZmluZWQgYXMuICBJbiBzdWNoIGNhc2VzLCB0aGUgdHlwZV9pZFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mjg0Nz1zdGF0aWMgaW50IGJ0Zl9wdHJfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkwMy1cbmtlcm5lbC9icGYvYnRmLmM6MjkwNDpzdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MDUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mjk2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgbW9kaWZpZXJfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjk3MS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9yZWZfdHlwZV9sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjI5NzI6XHQuc2hvdyA9IGJ0Zl9tb2RpZmllcl9zaG93LFxua2VybmVsL2JwZi9idGYuYy0yOTczLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi9idGYuYy04MjU3LVxua2VybmVsL2JwZi9idGYuYzo4MjU4OnN0YXRpYyB2b2lkIGJ0Zl90eXBlX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxua2VybmVsL2JwZi9idGYuYy04MjU5LVx0XHRcdCAgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODI3Nj1pbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTgyODQtXG5rZXJuZWwvYnBmL2J0Zi5jOjgyODU6XHRidGZfdHlwZV9zaG93KGJ0ZiwgdHlwZV9pZCwgb2JqLCBcdTAwMjZzc2VxKTtcbmtlcm5lbC9icGYvYnRmLmMtODI4Ni1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTgzMjY9aW50IGJ0Zl90eXBlX3NucHJpbnRmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODMzNi1cbmtlcm5lbC9icGYvYnRmLmM6ODMzNzpcdGJ0Zl90eXBlX3Nob3coYnRmLCB0eXBlX2lkLCBvYmosIChzdHJ1Y3QgYnRmX3Nob3cgKilcdTAwMjZzc25wcmludGYpO1xua2VybmVsL2JwZi9idGYuYy04MzM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgYW5kIEJURiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBCUEYgYW5kIEJURiBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMsIHRoaW5rIGhhc2h0YWJsZXMsIGV0Yy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBtYW5hZ2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2Ygd2hhdCBJIG5lZWQgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmXFwub3xoYXNodGFiXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE5LWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT00MD1pZmVxICgkKENPTkZJR19TWVNGUykseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gc3lzZnNfYnRmLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNDItZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTg0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIFN5c2NhbGwgYW5kIEJURiBDb25maWd1cmF0aW9uIElzc3VlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiB2aWEgc3lzY2FsbHMuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgY2hlY2tpbmcgYERFQlVHX0lORk9fQlRGYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBCVEYuIEkmIzM5O20gdGhpbmtpbmcgcGVyaGFwcyByZWxhdGVkIGNvbmZpZ3MgY2FuIHNoZWQgbGlnaHQgb24gYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB3aGVuIGl0IGNvbWVzIHRvIEJURiBhbmQgc3lzY2FsbHMgcmVsYXRlZCB0byBCUEYuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgY29uZmlndXJhdGlvbiBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEx8Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnfGtlcm5lbC9icGYvS2NvbmZpZ3xsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBCUEZfU1lTQ0FMTGAgTWFjcm8qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYEJQRl9TWVNDQUxMYCBtYWNybyBkZWZpbmVkPyYjMzQ7IEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMgd2hvbGUgQlBGIHB1enpsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlIHRhc2sgYXQgaGFuZCAod2hpY2ggaXMgYXNzdW1lZCBmcm9tIHRoZSBjb250ZXh0LCBhcyB0aGUgcHJvbXB0IGxhY2tzIGl0KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4cGFuc2lvbiwgaXRzIGFyZ3VtZW50cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgcXVpY2tseSB1c2luZyBhIGdyZXAgb3IgYW4gSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBmaWxlLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gY2FsbHMgaW50ZXJmYWNlIHdpdGggZUJQRi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYERFQlVHX0lORk9fQlRGYCBpbiBLY29uZmlnKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBERUJVR19JTkZPX0JURmAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgYmVoYXZpbmcuIEkgc2hvdWxkIHRoaW5rIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc3VjaCBhcyBgREVCVUdfSU5GT2AsIGBERUJVR19JTkZPX0RXQVJGYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIEJURiBpbmZyYXN0cnVjdHVyZSBlbmFibGVtZW50LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIGluIGhvdyB0aGlzIGlzIHNldCBvciB1c2VkLiBJIHdpbGwgcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBhbmQgcGVyaGFwcyBzZWFyY2ggdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjb25maWcgb3B0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgYWJvdXQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGtlcm5lbCBzaXplLCBhbmQgcnVudGltZSBwZXJmb3JtYW5jZS4gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugb2YgcmVsZXZhbnQgZGVmY29uZmlncyB3b3VsZCBhbHNvIGJlIHdpc2UuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gYXNzZXNzIHdoZXRoZXIgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBpcyB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gemVybyBpbiBvbiBsaW5lIDM5OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNldHRpbmcsIG9yIGEgcmVsYXRlZCBncm91cGluZywgdGVuZHMgdG8gYmUuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhlIHNvbHV0aW9uIEkmIzM5O20gc2Vla2luZyBpcyBnb2luZyB0byBiZSBuZWFyYnkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTU6XHRcdCAgdG8ga25vdyBhYm91dCB0aGUgLmR3byBmaWxlcyBhbmQgaW5jbHVkZSB0aGVtLlxuIDM5NjpcdFx0ICBJbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjY2FjaGUuXG4gMzk3Olx0XG4gMzk4Olx0Y29uZmlnIERFQlVHX0lORk9fQlRGXG4gMzk5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4gNDAwOlx0XHRkZXBlbmRzIG9uICFERUJVR19JTkZPX1NQTElUIFx1MDAyNlx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXG4gNDAxOlx0XHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXG4gNDAyOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gNDAzOlx0XHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFx1MDAzZT0gMTIyXG4gNDA0Olx0XHQjIHBhaG9sZSB1c2VzIGVsZnV0aWxzLCB3aGljaCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIEhleGFnb24gcmVsb2NhdGlvbnNcbiA0MDU6XHRcdGRlcGVuZHMgb24gIUhFWEFHT05cbiA0MDY6XHRcdGhlbHBcbiA0MDc6XHRcdCAgR2VuZXJhdGUgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm9ybWF0aW9uIGZyb20gRFdBUkYgZGVidWcgaW5mby5cbiA0MDg6XHRcdCAgVHVybmluZyB0aGlzIG9uIHJlcXVpcmVzIHBhaG9sZSB2MS4yMiBvciBsYXRlciwgd2hpY2ggd2lsbCBjb252ZXJ0XG4gNDA5Olx0XHQgIERXQVJGIHR5cGUgaW5mbyBpbnRvIGVxdWl2YWxlbnQgZGVkdXBsaWNhdGVkIEJURiB0eXBlIGluZm8uXG4gNDEwOlx0XG4gNDExOlx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xuIDQxMjpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjNcbiA0MTM6XHRcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcbiA0MTQ6XHRcdGhlbHBcbiA0MTU6XHRcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxuIDQxNjpcdFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xuIDQxNzpcdFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxuIDQxODpcdFxuIDQxOTpcdGNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuIDQyMDpcdFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjRcbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcbiA0MjM6XHRcdCAgY29tcGlsYXRpb24gdW5pdHMgZnJvbSB0aGUgc3VwcGxpZWQgbGFuZ3VhZ2UuIFVzZWQgaW4gS2J1aWxkIHRvXG4gNDI0Olx0XHQgIG9taXQgUnVzdCBDVXMgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAxLjI0IG9mIHBhaG9sZSxcbiA0MjU6XHRcdCAgb3RoZXJ3aXNlIGl0IHdvdWxkIGVtaXQgbWFsZm9ybWVkIGtlcm5lbCBhbmQgbW9kdWxlIGJpbmFyaWVzIHdoZW5cbiA0MjY6XHRcdCAgdXNpbmcgREVCVUdfSU5GT19CVEZfTU9EVUxFUy5cbiA0Mjc6XHRcbiA0Mjg6XHRjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xuIDQyOTpcdFx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJURiBEaXNwbGF5IGFuZCBNYXAgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlRGIHNob3cgZnVuY3Rpb25zIGFuZCB0aGUgbWFwIGNyZWF0aW9uIGNoZWNrIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGRpdmUgaW4uIExldCYjMzk7cyBzZWUsIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBzcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnBmX3NucHJpbnRmX2J0ZmAgKHdoaWNoIEkgYXNzdW1lIGlzIGEgaGVscGVyKSwgYW5kIGFsc28gZnVuY3Rpb25zIGxpa2UgYG1hcF9jaGVja19idGZgIGFuZCBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhcmUga2V5IHBsYXllcnMgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aG9zZS4gUmlnaHQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBwYXRocy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYW5kIGBicGZfc25wcmludGZfYnRmYCBhcmUgYWN0dWFsbHkgYmVpbmcgaW52b2tlZCwgYXMgd2VsbCBhcyB0aG9zZSBtYXAgY2hlY2sgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc25wcmludGZfYnRmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxua2VybmVsL2JwZi9idGYuYy0yOTMyLVx0ICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2Vhaztcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0Zjpcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XHRcdHJldHVybiBcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gYGJwZl9zbnByaW50Zl9idGZgIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBicGZfc25wcmludGZfYnRmYCB3b3Jrcy4gVGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIHRoZSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBCVEYgZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5c2lzLCBhbmQgcG9zc2libHkgZXZlbiBkeW5hbWljIGluc3RydW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRyYXZlcnNpbmcgdGhlIEJURiB0eXBlIGluZm9ybWF0aW9uLCBkZWNvZGluZyB0aGUgdmFyaW91cyB0eXBlIGRlc2NyaXB0b3JzLCBhbmQgZ2VuZXJhdGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBzdWl0YWJsZSBmb3IgbG9nZ2luZyBvciB1c2VyIGRpc3BsYXkuIFRoZSBmb3JtYXR0aW5nIGxpa2VseSBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIEJURiBlbnRyeSBpdCYjMzk7cyBlbmNvdW50ZXJpbmcsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFuYWdlcyByZWN1cnNpdmUgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBjb21wbGV4IGRhdGEgdHlwZXMuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGNsZXZlciB1c2Ugb2YgZm9ybWF0IHNwZWNpZmllcnMgdG8gZ2VuZXJhdGUgdGhlIG91dHB1dCwgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgc2VlIHNvbWUgZ29vZCBleGFtcGxlcyBvZiBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscy4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc25wcmludGZfYnRmX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0zMTcyPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gX193ZWFrO1xua2VybmVsL2JwZi9jb3JlLmM6MzE3Mzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYy0zMTc0LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjE4LVx0Y2FzZSBCUEZfRlVOQ19zbnByaW50Zl9idGY6XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjE5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NucHJpbnRmX2J0Zl9wcm90bztcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMjAtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gIGlzIHJlYWxseSBkb2luZy4gR2l2ZW4gaXRzIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBsaWtlbHkgaXQmIzM5O3MgcmVsYXRlZCB0byBwcmludGluZyBvciBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQlRGIChCUEYgVHlwZSBGb3JtYXQpIGRhdGEsIGFuZCBwcm9iYWJseSByZWxhdGVkIHRvIHByb3RvdHlwZXMgb3IgZnVuY3Rpb24gc2lnbmF0dXJlcy4gTXkgaW1tZWRpYXRlIG1vdmUgaXMgdG8gdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gS2VybmVsIGNvZGUgYmVpbmcga2VybmVsIGNvZGUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmaXJzdCBpcyB3aXRoaW4gYGtlcm5lbC9icGYvYnRmLmNgIG9yIGEgZmlsZSBzaW1pbGFybHkgbmFtZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NucHJpbnRmX2J0ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxua2VybmVsL2JwZi9idGYuYy0yOTMyLVx0ICogUmVzb2x2ZSB0aGUgdmFyJiMzOTtzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2Vhaztcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0Zjpcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XHRcdHJldHVybiBcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwMDY9c3RhdGljIGludCBicGZfYnRmX3ByaW50Zl9wcmVwYXJlKHN0cnVjdCBidGZfcHRyICpwdHIsIHUzMiBidGZfcHRyX3NpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwMzUtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTAzNjpCUEZfQ0FMTF81KGJwZl9zbnByaW50Zl9idGYsIGNoYXIgKiwgc3RyLCB1MzIsIHN0cl9zaXplLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTAzNy1cdCAgIHUzMiwgYnRmX3B0cl9zaXplLCB1NjQsIGZsYWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDUwLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNTE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MjpcdC5mdW5jXHRcdD0gYnBmX3NucHJpbnRmX2J0Zixcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDUzLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlRGLVJlbGF0ZWQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgcmVsYXRlZCB0byBCVEYgKEJQRiBUeXBlIEZvcm1hdCkuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIHR3byBrZXkgYXJlYXM6IGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4KCkluIGBidGYuY2AsIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgZGlzcGxheSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgYXJlIHRoZSB0YXJnZXRzLiBUaGVzZSBhcmUgKnN0YXRpYyogY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgbm93IGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBhcmUgKnVzZWQqLiBMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBzaG93IHVwIGluIHBsYWNlcyB0aGF0IGZvcm1hdCBhbmQgb3V0cHV0IEJURiBpbmZvcm1hdGlvbjogYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBhbmQsIGNydWNpYWxseSwgZnVuY3Rpb25zIGNhbGxlZCB2aWEgQlBGIHByb2dyYW1zIGxpa2UgYGJwZl9zbnByaW50Zl9idGZgIGFuZCBgYnBmX3NlcV9wcmludGZfYnRmYC4gQWRkaXRpb25hbGx5LCB0aGUgbWFwIGR1bXAgZnVuY3Rpb25zIGluIGJwZmZzLCBzdWNoIGFzIGBtYXBfc2VxX3Nob3dgLCBgYnBmX21hcF9zZXFfc2hvd2AsIGFuZCBgYnBmX29ial9waW5gLCBhcmUgYWxzbyBpbnZvbHZlZC4gU28sIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyByZWZpbmUgdGhlIHdheSBCVEYgZGF0YSBpcyBmb3JtYXR0ZWQgYW5kIHByZXNlbnRlZCB0byB0aGUgdXNlciwgcGFydGljdWxhcmx5IHRocm91Z2ggc2VxdWVuY2UgZmlsZXMgYW5kIHBvdGVudGlhbGx5IHZpYSBCUEYgcHJvZ3JhbXMgdGhlbXNlbHZlcy4KCk5leHQsIGluIGBoYXNodGFiLmNgLCB0aGUgY2hhbmdlcyBhZmZlY3QgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCwgd2hpY2gsIGFnYWluLCBhcmUgc3RhdGljLiBUaGVzZSBhcmUgY2xlYXJseSByZWxhdGVkIHRvICpoYXNoIHRhYmxlKiBtYXBzIGFuZCBCVEYuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cyBmb3IgY3JlYXRpbmcgbWFwcyB3aGVyZSBCVEYgaXMgcmVsZXZhbnQuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29kZSwgYG1hcF9jcmVhdGVgLCBgYnBmX21hcF9uZXdfZmRgLCBhbmQgYGJwZl9tYXBfYWxsb2NfaWRgIGluIGBzeXNjYWxsLmNgIGFsbCBzZWVtIHRvIGJlIGVudHJ5IHBvaW50cyBjYWxsZWQgZnJvbSB0aGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIHdoZW4gYEJQRl9NQVBfQ1JFQVRFYCBpcyBpbnZva2VkLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggY2hlY2tpbmcgb3IgdmFsaWRhdGluZyBCVEYgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBoYXNoIHRhYmxlLWJhc2VkIEJQRiBtYXBzLiBOb3cgSSB3YW50IHRvIHF1aWNrbHkgaW52ZXN0aWdhdGUgd2hlcmUgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgaXMgYmVpbmcgY2FsbGVkIHRvIHNlZSB0aGUgd2hvbGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRhYl9tYXBfY2hlY2tfYnRmfHJodGFiX21hcF9jaGVja19idGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTUwND1zdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6NTI4OnN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTUyOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzNzY6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzctXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIzOTk6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MDAtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTY0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1Nzk6XHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1ODAtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk5LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjAwOlx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjAxLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA5Nj1zdGF0aWMgaW50IHJodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMTE6c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTItXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVx0Lm1hcF9yZWxlYXNlX3VyZWYgPSByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyODpcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjktXHQubWFwX2xvb2t1cF9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgLm1hcF9jaGVja19idGZgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgcGF0dGVybnMgb2YgYC5tYXBfY2hlY2tfYnRmYCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdHJhY2UgZG93biB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJdCYjMzk7cyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJURiAoQlBGIFR5cGUgRm9ybWF0KSB2ZXJpZmljYXRpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCBjb250ZXh0LiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY2FsbCBncmFwaCBoZXJlLiBUaGUgZ29hbCBpcyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBtYXBfY2hlY2tfYnRmYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgdmFsaWRhdGlvbiBpbmZyYXN0cnVjdHVyZSwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHVzZXMsIG9yIHVudXN1YWwgY29kZSBmbG93cyB0aGF0IHJlcXVpcmUgYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgYWxsIGNhbGwgc2l0ZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIG9yIGNvbnRleHQtZGVwZW5kZW50IGNhbGxzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoYXQgZnVuY3Rpb27igJlzIGRlc2lnbiBhZmZlY3RzIHBlcmZvcm1hbmNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBkZXNpZ24gaW1wcm92ZW1lbnRzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NoZWNrX2J0ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTQwNj1zdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY0MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjUzLVx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU1LVx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz01NTc9c3RhdGljIHZvaWQgcGVyY3B1X2FycmF5X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTc5LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU4MDpzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzMtXHQubWFwX3NlcV9zaG93X2VsZW0gPSBhcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc1LVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg4NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OC1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4OTk6XHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAwLVx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTEzODI9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmZfZXZlbnRfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTM5Mi1cdC5tYXBfcmVsZWFzZSA9IHBlcmZfZXZlbnRfZmRfYXJyYXlfcmVsZWFzZSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxMzkzOlx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTEzOTQtXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0MTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDI3LVx0Lm1hcF9mZF9wdXRfcHRyID0gY2dyb3VwX2ZkX2FycmF5X3B1dF9wdHIsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyODpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDI5LVx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTYtXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE3Olx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE1MTgtXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYz0xNzU9c3RhdGljIGxvbmcgYmxvb21fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE4MS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM6MTgyOnN0YXRpYyBpbnQgYmxvb21fbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTIwMz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYmxvb21fZmlsdGVyX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0yMTQtXHQubWFwX2RlbGV0ZV9lbGVtID0gYmxvb21fbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoyMTU6XHQubWFwX2NoZWNrX2J0ZiA9IGJsb29tX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTIxNi1cdC5tYXBfbWVtX3VzYWdlID0gYmxvb21fbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xNjA9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncnBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2OC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfY2dycF9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTY5Olx0Lm1hcF9jaGVja19idGYgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTcwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYz0xOTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGlub2RlX3N0b3JhZ2VfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbm9kZV9zdG9yYWdlLmMtMjA2LVx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9mZF9pbm9kZV9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjIwNzpcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYnBmX2lub2RlX3N0b3JhZ2UuYy0yMDgtXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTEzNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaW5zbl9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xNDMtXHQubWFwX2RlbGV0ZV9lbGVtID0gaW5zbl9hcnJheV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxNDQ6XHQubWFwX2NoZWNrX2J0ZiA9IGluc25fYXJyYXlfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTE0NS1cdC5tYXBfbWVtX3VzYWdlID0gaW5zbl9hcnJheV9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTcwMj1pbnQgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0yMjM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRhc2tfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMS1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfcGlkX3Rhc2tfc3RvcmFnZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jOjIzMjpcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMy1cdC5tYXBfbWVtX3VzYWdlID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTcwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy03MTYtXHQubWFwX2dldF9uZXh0X2tleVx0PSBjcHVfbWFwX2dldF9uZXh0X2tleSxcbmtlcm5lbC9icGYvY3B1bWFwLmM6NzE3Olx0Lm1hcF9jaGVja19idGZcdFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9jcHVtYXAuYy03MTgtXHQubWFwX21lbV91c2FnZVx0XHQ9IGNwdV9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTA4Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgZGV2X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xMDk1LVx0Lm1hcF9kZWxldGVfZWxlbSA9IGRldl9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwOTY6XHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEwOTctXHQubWFwX21lbV91c2FnZSA9IGRldl9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTEwMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgZGV2X21hcF9oYXNoX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExMTAtXHQubWFwX2RlbGV0ZV9lbGVtID0gZGV2X21hcF9oYXNoX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9kZXZtYXAuYzoxMTExOlx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMTEyLVx0Lm1hcF9tZW1fdXNhZ2UgPSBkZXZfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01MDQ9c3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTUyNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjUyODpzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjktXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc1LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc2Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc3LVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM4Mz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzk4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzk5Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDAwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTc4LVx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc5Olx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTgwLVx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Nj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU5OS1cdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYwMDpcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYwMS1cdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3MzI9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfb2ZfbWFwc19tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDItXHQubWFwX2dlbl9sb29rdXAgPSBodGFiX29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MzpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NDQtXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDk2PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTEwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzExMTpzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTIxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjctXHQubWFwX3JlbGVhc2VfdXJlZiA9IHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4Olx0Lm1hcF9jaGVja19idGYgPSByaHRhYl9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyOS1cdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9NDYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ2Ny1cdC5tYXBfZGVsZXRlX2VsZW0gPSBjZ3JvdXBfc3RvcmFnZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2ODpcdC5tYXBfY2hlY2tfYnRmID0gY2dyb3VwX3N0b3JhZ2VfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDY5LVx0Lm1hcF9zZXFfc2hvd19lbGVtID0gY2dyb3VwX3N0b3JhZ2Vfc2VxX3Nob3dfZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9Nzc1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB0cmllX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4NS1cdC5tYXBfZGVsZXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoLFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4NjpcdC5tYXBfY2hlY2tfYnRmID0gdHJpZV9jaGVja19idGYsXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzg3LVx0Lm1hcF9tZW1fdXNhZ2UgPSB0cmllX21lbV91c2FnZSxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MTE0MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc3RhY2tfdHJhY2VfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTE0OS1cdC5tYXBfZGVsZXRlX2VsZW0gPSBzdGFja19tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTE1MDpcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0Zixcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMTUxLVx0Lm1hcF9tZW1fdXNhZ2UgPSBzdGFja19tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX21hcF9vZmZsb2FkX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTctXHQubWFwX2ZyZWUgPSBicGZfbWFwX29mZmxvYWRfbWFwX2ZyZWUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTg6XHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTktXHQubWFwX21lbV91c2FnZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfbWVtX3VzYWdlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNDc9aW50IG1hcF9jaGVja19ub19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI1NTpzdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU2LVx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfa2V5X2lkLCB1MzIgYnRmX3ZhbHVlX2lkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNjgtXHRcdGtleV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmLCAwKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyNjk6XHRcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfY2hlY2tfYnRmKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI3MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzY3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTM2ODpcdGlmIChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9jaGVja19idGYpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzNjk6XHRcdHJldCA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2NoZWNrX2J0ZihtYXAsIGJ0Ziwga2V5X3R5cGUsIHZhbHVlX3R5cGUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTM3MC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU4MS1cdFx0aWYgKGF0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1ODI6XHRcdFx0ZXJyID0gbWFwX2NoZWNrX2J0ZihtYXAsIHRva2VuLCBidGYsIGF0dHItXHUwMDNlYnRmX2tleV90eXBlX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU4My1cdFx0XHRcdFx0ICAgIGF0dHItXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhpcyBwYXRjaCB0YXJnZXRzIHR3byBrZXkgYXJlYXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtOiBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlRGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyIFR5cGUgRm9ybWF0KSBoYW5kbGluZyBhbmQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBmb3Igdm9pZCBrZXkgdHlwZXMgaW4gaGFzaCB0YWJsZXMuCgpGaXJzdCwgdGhlIGBidGYuY2AgY2hhbmdlcyBhcmUgZml4aW5nIHBvdGVudGlhbCBjcmFzaGVzIGR1cmluZyBCVEYgdHlwZSByZXNvbHV0aW9uIGFuZCBkdW1waW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVkZ2UgY2FzZXMg4oCTIHNwZWNpZmljYWxseSwgd2hlbiBhIG1vZGlmaWVyIHJlc29sdmVzIHRvIGEgdm9pZCB0eXBlIG9yIHdoZW4gaGFuZGxpbmcgYEJURl9LSU5EX1ZBUmAgdHlwZXMgaW4gYSBiYXNlIEJURiBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyBgcmVzb2x2ZWRfaWRzYC4gVGhlIGBoYXNodGFiLmNgIGNoYW5nZSByZWplY3RzIHZvaWQga2V5IHR5cGVzIGZvciBCUEYgbWFwcywgcHJldmVudGluZyBsYXRlciBpc3N1ZXMgZHVyaW5nIGJwZmZzIGR1bXBzLgoKTm93LCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBGb2xsb3dpbmcgdGhlIGd1aWRlbGluZXMsIHRoaXMgZGVmaW5pdGVseSAqaXNuJiMzOTt0KiBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjb2RlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyB0aGF0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcy9icGZmcy4gVGhlIEJQRiBzdWJzeXN0ZW0gaXMgYSBrbm93biB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbiwgYW5kIHRoZXNlIHBhdGNoZXMgYXJlIGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIHZvaWQgdHlwZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdGhlc2UgdHlwZXMgb2YgYnVncywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgd2UgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciByZXByb2R1Y2liaWxpdHkuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgbmVjZXNzYXJ5LiBCdXQgQlBGIGFuZCBCVEYgYXJlIGRlZXBseSBpbnRlcnR3aW5lZCwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBmb3IgYW55IGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIG9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgY3JpdGljYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhbmQgcmVwcm9kdWNpbmcgdGhlIHJlcG9ydGVkIGlzc3Vlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIGEgcHJvcGVybHkgY29uZmlndXJlZCBmdXp6aW5nIGVudmlyb25tZW50IHRoYXQgZnVsbHkgZXhwb3NlcyB0aGUgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNzItXG5rZXJuZWwvYnBmL0tjb25maWc6NzM6Y29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RGlzYWJsZSB1bnByaXZpbGVnZWQgQlBGIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzI4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBCUEYgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJQRiBjb21wb25lbnRzIGFyZSBidWlsdC4gRmlyc3QsIEkmIzM5O2xsIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgY29tcGlsZWQuIEkmIzM5O2xsIG9wZW4gdXAgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNoZWNrLgoKQWxyaWdodCwgbG9va2luZyBhdCBMaW5lIDExLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8uLi5gIFNvLCBgaGFzaHRhYi5vYCBpcyBvbmx5IGluY2x1ZGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBBbmQganVzdCBiZWxvdyB0aGF0LCBvbiBsaW5lIDE4LCBpdCBzZWVtcyB0aGUgc2FtZSBydWxlIGlzIGFwcGxpZWQgdG8gYGJ0Zi5vYCAtLSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8uLi5gLiBHb29kLCB0aGF0IG1ha2VzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJlYWxseSBjbGVhci4KCk5vdywgZm9yIHRoYXQgYGJwZl9zbnByaW50Zl9idGZgIGZ1bmN0aW9u4oCmIHdoZXJlJiMzOTtzIHRoYXQgZGVmaW5lZD8gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgaXQgbWlnaHQgbGl2ZSBpbiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3IgcGVyaGFwcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeS4gTGV0JiMzOTtzIGdldCB0byB0aGF0IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIEV2ZW50cyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9FVkVOVFNgIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkLXRpbWUgaW5jbHVzaW9uIGFuZCBzZXR0aW5ncyBvZiBmZWF0dXJlcyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgZXZlbnRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBFdmVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBCUEZfRVZFTlRTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBzcGVjaWZpY2FsbHkgcmVtZW1iZXIgc2VlaW5nIGl0IHdpdGhpbiB0aGUgdHJhY2UgZGlyZWN0b3J5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhcm91bmQgbGluZSA4NTMgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIGlzIHJlY2VudCBlbm91Z2gsIGFuZCBJIGNhbiBxdWlja2x5IGdldCBhbiBpZGVhIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjg3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgRm9jdXM6IEJQRiBCVEYgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gcmVmaW5lIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSByaWdodCBmdW5jdGlvbnMg4oCTIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBleHBvc2UgaW50ZXJlc3RpbmcgYnVncyBhbmQgdGhhdCBhcmUgKmFjdHVhbGx5KiBhY2Nlc3NpYmxlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgRm9jdXNTeW1ib2xzYC4gUmVtZW1iZXIgdGhlIGtleSBndWlkZWxpbmVzOiBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGNydWNpYWwgZm9yIGZ1enppbmcuIEF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBOb24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYXJlIHRoZSBnb2xkIHN0YW5kYXJkLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRob3NlIGdldCBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIsIGFuZCBkb24mIzM5O3QgcHJvdmlkZSBhIHVuaXF1ZSBzeW1ib2wgdG8gdGFyZ2V0IGFueXdheS4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlRGIHNob3cgYW5kIG1hcCBjcmVhdGlvbiBwYXRocy4gSSBrbm93IHRoZXJlJiMzOTtzIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbmluZyBpbiBga2VybmVsL2JwZi9idGYuY2AuIExldCBtZSB0YWtlIGEgbG9vazoKCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB3aGV0aGVyIHRoZXNlIGFyZSBhcHByb3ByaWF0ZS4KSSBuZWVkIHRvIGNoZWNrLCBhbmQgSSB3aWxsLCB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucywgYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgLCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnRmX3R5cGVfaWRfcmVzb2x2ZWAsIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AsIGFuZCBgYnRmX2RmX3Nob3dgIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC4gSSB0aGluayBgYnRmX2RmX3Nob3dgICptaWdodCogYmUgc3RhdGljLCBzbyBJIHdpbGwgY2hlY2sgdGhhdCBvbmUgc3BlY2lmaWNhbGx5LgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgYWRkIHRvIHRoZSBsaXN0IHRoaW5ncyBsaWtlIGBicGZfc25wcmludGZfYnRmYCwgYG1hcF9jaGVja19idGZgLCBgaHRhYl9tYXBfY2hlY2tfYnRmYCDigJMgdGhvc2UgYXJlIGFsbCBrZXkgYXJlYXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kLCB0YXJnZXRlZCBzZXQgb2YgZnVuY3Rpb25zIGZvciB0aGlzIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93fGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzfGJ0Zl9kZl9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjI2OS1cbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbmtlcm5lbC9icGYvYnRmLmMtMjI3MS1cdFx0XHR1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0yOTE5LVx0aWYgKCFidGZfdHlwZV9vcHModCkpXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MjA6XHRcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xua2VybmVsL2JwZi9idGYuYy0yOTIxLVx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MzAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZndkX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXHQubG9nX2RldGFpbHMgPSBidGZfZndkX3R5cGVfbG9nLFxua2VybmVsL2JwZi9idGYuYzozMDIyOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtMzAyMy19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy00ODAwLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxua2VybmVsL2JwZi9idGYuYzo0ODAxOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDg0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy00ODQ5LVx0LmxvZ19kZXRhaWxzID0gYnRmX3JlZl90eXBlX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4NTEtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTUxMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZsb2F0X29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXHQubG9nX2RldGFpbHMgPSBidGZfZmxvYXRfbG9nLFxua2VybmVsL2JwZi9idGYuYzo1MTQxOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNTE0Mi19O1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNTIzOS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjUyNDA6XHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz04MjcwPV9fcHJpbnRmKDIsIDApIHN0YXRpYyB2b2lkIGJ0Zl9zZXFfc2hvdyhzdHJ1Y3QgYnRmX3Nob3cgKnNob3csIGNvbnN0IGNoYXIgKmZtdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzUtXG5rZXJuZWwvYnBmL2J0Zi5jOjgyNzY6aW50IGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzctXHRcdFx0ICAgIHZvaWQgKm9iaiwgc3RydWN0IHNlcV9maWxlICptLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9idGYuYz04MjkwPXZvaWQgYnRmX3R5cGVfc2VxX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODI5Mi17XG5rZXJuZWwvYnBmL2J0Zi5jOjgyOTM6XHQodm9pZCkgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoYnRmLCB0eXBlX2lkLCBvYmosIG0sXG5rZXJuZWwvYnBmL2J0Zi5jLTgyOTQtXHRcdFx0XHQgICAgICAgQlRGX1NIT1dfTk9OQU1FIHwgQlRGX1NIT1dfQ09NUEFDVCB8XG4tLVxua2VybmVsL2JwZi9idGYuYz04MzA0PV9fcHJpbnRmKDIsIDApIHN0YXRpYyB2b2lkIGJ0Zl9zbnByaW50Zl9zaG93KHN0cnVjdCBidGZfc2hvdyAqc2hvdywgY29uc3QgY2hhciAqZm10LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtODMyNS1cbmtlcm5lbC9icGYvYnRmLmM6ODMyNjppbnQgYnRmX3R5cGVfc25wcmludGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMjctXHRcdFx0ICAgY2hhciAqYnVmLCBpbnQgbGVuLCB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQlRGIFR5cGUgUmVzb2x1dGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEJURiB0eXBlIElEcyBhcmUgYWN0dWFsbHkgcmVzb2x2ZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoYXQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRhcmdldHMgYXJlIHRoZSBkZWNsYXJhdGlvbnMgZm9yIGBidGZfdHlwZV9pZF9yZXNvbHZlYCBhbmQgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYC4gSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgd29ya2hvcnNlcyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGEgQlRGIHR5cGUgSUQgKnJlYWxseSogcG9pbnRzIHRvLCBhbmQgcG90ZW50aWFsbHkgY2xlYW5pbmcgdXAgYW55IGV4dHJhbmVvdXMgbW9kaWZpZXJzIHRoYXQgbWlnaHQgYmUgaGFuZ2luZyBhcm91bmQuIEdvdHRhIHVuZGVyc3RhbmQgdGhlaXIgc2lnbmF0dXJlcywgdGhlaXIgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCB0eXBlIHJlc29sdXRpb24gZmxvdy4gS25vd2luZyB0aGUgKndoYXQqIGFuZCB0aGUgKmhvdyogb2YgdGhlc2UgdHdvIHdpbGwgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGUgYnJvYWRlciBzY2hlbWUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX3R5cGVfc2tpcF9tb2RpZmllcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9NzIyPUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9maW5kX2J0Zl9pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTcyMy1cbmtlcm5lbC9icGYvYnRmLmM6NzI0OmNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9idGYuYy03MjUtXHRcdFx0XHRcdCAgICAgICB1MzIgaWQsIHUzMiAqcmVzX2lkKVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NzQwPWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfcmVzb2x2ZV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzQ0LVxua2VybmVsL2JwZi9idGYuYzo3NDU6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBpZCwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc0Ni1cdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzQ4LVxua2VybmVsL2JwZi9idGYuYzo3NDk6XHRyZXR1cm4gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIHJlc19pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc1MC19XG4tLVxua2VybmVsL2JwZi9idGYuYz0xMDE2PWJvb2wgYnRmX21lbWJlcl9pc19yZWdfaW50KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMTA1Mi1cbmtlcm5lbC9icGYvYnRmLmM6MTA1MzovKiBTaW1pbGFyIHRvIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKCkgYnV0IGRvZXMgbm90IHNraXAgdHlwZWRlZnMuICovXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTQtc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MDQ9c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkxMS1cdGVsc2Vcbmtlcm5lbC9icGYvYnRmLmM6MjkxMjpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTMtXG4tLVxua2VybmVsL2JwZi9idGYuYz0yOTI1PXN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzYtXHRlbHNlXG5rZXJuZWwvYnBmL2J0Zi5jOjI5Mzc6XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzgtXG4tLVxua2VybmVsL2JwZi9idGYuYz0zMTgxPXN0YXRpYyB2b2lkIF9fYnRmX2FycmF5X3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zMTkxLVx0ZWxlbV90eXBlX2lkID0gYXJyYXktXHUwMDNldHlwZTtcbmtlcm5lbC9icGYvYnRmLmM6MzE5MjpcdGVsZW1fdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZWxlbV90eXBlX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtMzE5My1cdGlmIChlbGVtX3R5cGUgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2hhc19zaXplKGVsZW1fdHlwZSkpXG4tLVxua2VybmVsL2JwZi9idGYuYz02NjA0PXUzMiBidGZfY3R4X2FyZ19pZHgoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG8sXG4tLVxua2VybmVsL2JwZi9idGYuYy02NjE3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJnczsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvYnRmLmM6NjYxODpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNjYxOS1cdFx0b2Zmc2V0ICYjNDM7PSBidGZfdHlwZV9pc19wdHIodCkgPyA4IDogcm91bmR1cCh0LVx1MDAzZXNpemUsIDgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjYyMy1cbmtlcm5lbC9icGYvYnRmLmM6NjYyNDpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjUtXHRvZmZzZXQgJiM0Mzs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXHUwMDNlc2l6ZSwgOCk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODU4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy02OTMyLVxua2VybmVsL2JwZi9idGYuYzo2OTMzOlx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTY5MzQtXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zbWFsbF9pbnQodCkpIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTcxMjI9c3RhdGljIGludCBidGZfc3RydWN0X3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEzNC1cdGlmIChidGZfdHlwZV9pc19tb2RpZmllcih0KSlcbmtlcm5lbC9icGYvYnRmLmM6NzEzNTpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzEzNi1cdHRuYW1lID0gX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTcxNjMtXHRcdG1lbWJlciA9IGJ0Zl90eXBlX21lbWJlcih0KSAmIzQzOyB2bGVuIC0gMTtcbmtlcm5lbC9icGYvYnRmLmM6NzE2NDpcdFx0bXR5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIG1lbWJlci1cdTAwM2V0eXBlLFxua2VybmVsL2JwZi9idGYuYy03MTY1LVx0XHRcdFx0XHRcdE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzE3Ny1cdFx0LyogYWxsb3cgc3RydWN0dXJlIGFuZCBpbnRlZ2VyICovXG5rZXJuZWwvYnBmL2J0Zi5jOjcxNzg6XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5X2VsZW0tXHUwMDNldHlwZSxcbmtlcm5lbC9icGYvYnRmLmMtNzE3OS1cdFx0XHRcdFx0ICAgIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9NzY0OT1zdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX3R5cGVfbWF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc2ODYtXG5rZXJuZWwvYnBmL2J0Zi5jOjc2ODc6XHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIHQxLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYzo3Njg4Olx0dDIgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYyLCB0Mi1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzY4OS1cdGlmICh0MS1cdTAwM2VpbmZvICE9IHQyLVx1MDAzZWluZm8pIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc3MDMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYXJnczE7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MDQ6XHRcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgYXJnczFbaV0udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MDU6XHRcdHQyID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMiwgYXJnczJbaV0udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc3MDYtXG4tLVxua2VybmVsL2JwZi9idGYuYy03NzMyLVx0XHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MzM6XHRcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgdDEtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jOjc3MzQ6XHRcdHQyID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMiwgdDItXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc3MzUtXHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQxKSkge1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9Nzk0Nj1zdGF0aWMgaW50IGJ0Zl9zY2FuX3R5cGVfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzk1Ny1cdC8qIEZpbmQgdGhlIGZpcnN0IHBvaW50ZXIgdHlwZSBpbiB0aGUgY2hhaW4uICovXG5rZXJuZWwvYnBmL2J0Zi5jOjc5NTg6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtNzk1OS1cbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTc5ODE9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzk5MC1cbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTc5OTItXG4tLVxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4tLVxua2VybmVsL2JwZi9idGYuYy04MTgxLVxua2VybmVsL2JwZi9idGYuYzo4MTgyOlx0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYy04MTgzLVx0XHRcdGlmIChidGZfdHlwZV9pc192b2lkKHJlZl90KSB8fCBidGZfdHlwZV9pc19wcmltaXRpdmUocmVmX3QpKSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy04MjIwLVxua2VybmVsL2JwZi9idGYuYzo4MjIxOlx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTgyMjItXHRcdFx0cmVmX3QgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgdCwgXHUwMDI2bWVtX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODc4MT1pbnQgYnRmX2NoZWNrX2l0ZXJfYXJnKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLCBpbnQgYXJnX2lkeClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTEtXHRhcmcgPSBcdTAwMjZidGZfcGFyYW1zKGZ1bmMpW2FyZ19pZHhdO1xua2VybmVsL2JwZi9idGYuYzo4NzkyOlx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9idGYuYy04NzkzLVx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTQtXHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi9idGYuYzo4Nzk1Olx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZidGZfaWQpO1xua2VybmVsL2JwZi9idGYuYy04Nzk2LVx0aWYgKCF0IHx8ICFfX2J0Zl90eXBlX2lzX3N0cnVjdCh0KSlcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTg4MDY9c3RhdGljIGludCBidGZfY2hlY2tfaXRlcl9rZnVuY3Moc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsXG4tLVxua2VybmVsL2JwZi9idGYuYy04ODU2LVx0XHQvKiBicGZfaXRlcl9cdTAwM2N0eXBlXHUwMDNlX25leHQoKSBzaG91bGQgcmV0dXJuIHBvaW50ZXIgKi9cbmtlcm5lbC9icGYvYnRmLmM6ODg1NzpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuYy1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvYnRmLmMtODg1OC1cdFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXG4tLVxua2VybmVsL2JwZi9idGYuYz05ODIyPWJvb2wgYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk4NTktXG5rZXJuZWwvYnBmL2J0Zi5jOjk4NjA6XHRcdGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbXR5cGUtXHUwMDNldHlwZSwgXHUwMDI2aWQpO1xua2VybmVsL2JwZi9idGYuYy05ODYxLVx0XHQvKiBJZiB3ZSBtYXRjaCBvbiBib3RoIHR5cGUgYW5kIG5hbWUsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHRydXN0ZWQuICovXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0xMzM9c3RhdGljIGludCBjaGVja19idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMTg1LVxua2VybmVsL2JwZi9jaGVja19idGYuYzoxODY6XHRcdHJldF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0xODctXHRcdHNjYWxhcl9yZXR1cm4gPVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zODg9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3VicHJvZ19yZXRfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwMzpcdHJldHVybiBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDA0LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4Mzc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTY5LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE3MDpcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEucmV0X2J0ZiwgbWV0YS5yZXRfYnRmX2lkLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE3MS1cdFx0aWYgKCFidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MDg9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MTM6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTQtXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MjA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MjU6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjYtXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1Mzg9c3RhdGljIGJvb2wgX19pc19rZnVuY19wdHJfYXJnX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0NDpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0NS1cdGlmICghdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NDgtXHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0OTpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cmVzX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU1MC1cdGlmICghdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NTA9Ym9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjY0Olx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjY1LVx0XHRpZiAoYnRmX3R5cGVfaXNfc3RydWN0KG1lbWJlcl90eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY3Ny1cdFx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY3ODpcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NzktXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2NT1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk3Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk3MzpcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc0LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk5My1cdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk5NDpcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5OTUtXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIxMzY9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTg4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMTg5Olx0cmVnX3JlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMocmVnX2J0ZiwgcmVnX3JlZl9pZCwgXHUwMDI2cmVnX3JlZl9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxOTAtXHRyZWdfcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHJlZ19idGYsIHJlZ19yZWZfdC1cdTAwM2VuYW1lX29mZik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNjk4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzQ4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNzQ5Olx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUwLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUxLVx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NTI6XHRcdFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cmVmX2lkKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc1My1cdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTQ5PXM2NCBicGZfa2Z1bmNfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NjgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1Njk6XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NzAtXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1OTItXHQvKiBmaXhlZC1zaXplIHBvaW50ZWQtdG8gdHlwZTogcmVzb2x2ZSB2aWEgQlRGICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1OTM6XHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU5NC1cdGlmICghSVNfRVJSKGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgXHUwMDI2dHlwZV9zaXplKSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM3ODU9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzctXHQvKiBDaGVjayByZXR1cm4gdHlwZSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDM4Olx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBtZXRhLmZ1bmNfcHJvdG8tXHUwMDNldHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzktXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDcwLVx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDA3MTpcdFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZwdHJfdHlwZV9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzItXHRcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcdTAwMjZtZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2MzY9c3RhdGljIGludCBfX2NoZWNrX3BzZXVkb19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2ODktXHR0eXBlID0gdC1cdTAwM2V0eXBlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NjkwOlx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZSwgTlVMTCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2OTEtXHRpZiAocGVyY3B1KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTg5CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIHplcm8gaW4gb24gYG1hcF9jcmVhdGVgLCBwb3RlbnRpYWxseSBpbiBgc3lzY2FsbC5jYCBvciB3aXRoaW4gdGhlIGBtYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSG93ZXZlciwgSSBpbW1lZGlhdGVseSBub3RlIGBtYXBfY2hlY2tfYnRmYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGV4cG9zdXJlLiAgSSYjMzk7bSBzZWVpbmcgYSBzdWl0ZSBvZiBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIHNvLCB0aGVyZWZvcmUsIGFyZSBleHBvcnRlZCBhbmQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zZXFfc2hvd2AsIHRoZSBgaHRhYl9tYXBfb3BzYCBhbmQgYHJodGFiX21hcF9vcHNgIHN0cnVjdHMsIGBicGZfbWFwX2NyZWF0ZWAgb3IgYG1hcF9jcmVhdGVgICh0aGUgcG90ZW50aWFsIHBvaW50IG9mIGVudHJ5ISksIGFuZCBgYnBmX3NucHJpbnRmX2J0ZmAuICBgYnBmX3NucHJpbnRmX2J0ZmAgZXNwZWNpYWxseSBncmFicyBteSBhdHRlbnRpb24gYmVjYXVzZSBpdCBpcyBhIEJQRiBoZWxwZXIgYW5kIGEgbm9uLXN0YXRpYyBCUEZfQ0FMTF81LiBUaGF0IGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gYGJwZl9zbnByaW50Zl9idGZgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXQgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgYEJQRl9DQUxMXzVgIG1hY3JvIGdlbmVyYXRlcyB0aGF0IHN5bWJvbCwgZWl0aGVyIGRpcmVjdGx5IGFzIGBicGZfc25wcmludGZfYnRmYCBvciBwb3RlbnRpYWxseSBhcyBgX19fYnBmX3NucHJpbnRmX2J0ZmAuIEFsc28sIGJvdGggYGJ0Zl90eXBlX3NucHJpbnRmX3Nob3dgIGFuZCBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgIGFyZSBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gVGhhdCBnaXZlcyBtZSBhIHNsaWdodGx5IHdpZGVyIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKTGV0JiMzOTtzIG5vdyBjb25zaWRlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHN5bWJvbHMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0VWRU5UU2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZm9yIGNvbnRleHQsIGJ1dCBub3QgZGlyZWN0bHkgZXhwbG9pdGFibGUgYXQgdGhpcyBzdGFnZS4gTXkgZm9jdXMsIHRob3VnaCwgbmFycm93cyB0byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGFuZCwgYWdhaW4sIGBicGZfc25wcmludGZfYnRmYC4gVGhvc2UgYXJlIHdoYXQgSSYjMzk7bSBob21pbmcgaW4gb24uCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgYSBmaW5hbCwgcXVpY2sgcmV2aWV3LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIHNwZWNpZmljIGFyZWFzOiB0aGUgQlRGIHNob3cgbG9naWMsIHRvIHByZXZlbnQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIHdoZW4gaGFuZGxpbmcgdm9pZCBtb2RpZmllcnMgYW5kIGBCVEZfS0lORF9WQVJgIHdpdGggYSBiYXNlIEJURi4gU3BlY2lmaWNhbGx5LCBpbiBga2VybmVsL2JwZi9idGYuY2Agd2l0aCBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSXQgYWxzbyBpbXBhY3RzIEJURiBtYXAgdmFsaWRhdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB2aWEgdGhlIGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb25zLCB0byByZWplY3Qga2V5bGVzcyBCVEYgbWFwcy4KClRoaXMgaXMgY29yZSBrZXJuZWwgQlBGIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJvdGggc3lzY2FsbHMgYW5kIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcG90ZW50aWFsbHkgc3VidGxlLCBidXQgdGhleSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgdmFsaWRhdGlvbi4gSSYjMzk7bSBub3cgZ29pbmcgdG8gZmxhZyBpdCBhcyAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZS4mIzM0OwoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2J0Zl90eXBlX3NucHJpbnRmX3Nob3cmIzM0OywKICAgICYjMzQ7YnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MmIzM0OywKICAgICYjMzQ7YnBmX3NucHJpbnRmX2J0ZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgQlRGIHNob3cgcm91dGluZXMgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIHdoZW4gZGVhbGluZyB3aXRoIHZvaWQgbW9kaWZpZXJzIGFuZCBiYXNlIEJURnMsIGFuZCBhZGRzIGNoZWNrcyBpbiBodGFiX21hcF9jaGVja19idGYvcmh0YWJfbWFwX2NoZWNrX2J0ZiB0byByZWplY3QgaGFzaCBtYXBzIGNyZWF0ZWQgd2l0aCBrZXktbGVzcyBCVEZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGL0JURiB2YWxpZGF0aW9uIGFuZCBmb3JtYXR0aW5nIHBhdGhzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIEJQRiBoZWxwZXIgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfdHlwZV9zbnByaW50Zl9zaG93JiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX3NlcV9zaG93X2ZsYWdzJiMzNDssCiAgICAmIzM0O2JwZl9zbnByaW50Zl9idGYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gdGhlIEJURiBzaG93IHJvdXRpbmVzIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSB3aGVuIGRlYWxpbmcgd2l0aCB2b2lkIG1vZGlmaWVycyBhbmQgYmFzZSBCVEZzLCBhbmQgYWRkcyBjaGVja3MgaW4gaHRhYl9tYXBfY2hlY2tfYnRmL3JodGFiX21hcF9jaGVja19idGYgdG8gcmVqZWN0IGhhc2ggbWFwcyBjcmVhdGVkIHdpdGgga2V5LWxlc3MgQlRGcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRi9CVEYgdmFsaWRhdGlvbiBhbmQgZm9ybWF0dGluZyBwYXRocyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBCUEYgaGVscGVyIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXG5cblNwZWNpZmljYWxseTpcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXG4yLiBJbiBidGZfdmFyX3Nob3coKSwgaXQgY2hlY2tzIGlmIGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMgaXMgTlVMTCBiZWZvcmUgcmVzb2x2aW5nLCBmYWxsaW5nIGJhY2sgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBvciBleHBvc2Uga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgY3Jhc2hlcyBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTRkNjU4MDhlMGFiYTBmNWY0MDA3MWE0OTExMzVhNjYwYzViOWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTI6NDA6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTI5MTEsMTQgJiM0MzsyOTExLDMwIEBAIHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAllbHNlCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JYnRmX3R5cGVfb3BzKHQpLSZndDtzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwomIzQzOwkvKgomIzQzOwkgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gJiMzNDtjb25zdCB2b2lkJiMzNDspLCB3aGljaAomIzQzOwkgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXIKJiM0MzsJICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJ0Zl90eXBlX29wcyh0KSkKJiM0MzsJCWJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpOwomIzQzOwllbHNlCiYjNDM7CQlidGZfdHlwZV9vcHModCktJmd0O3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwKIAkJCSB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsCiAJCQkgc3RydWN0IGJ0Zl9zaG93ICpzaG93KQogewotCXQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgJmFtcDt0eXBlX2lkKTsKJiM0MzsJLyoKJiM0MzsJICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtJmd0O3Jlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTAomIzQzOwkgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuCiYjNDM7CSAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CWlmIChidGYtJmd0O3Jlc29sdmVkX2lkcykKJiM0MzsJCXQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgJmFtcDt0eXBlX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC0mZ3Q7dHlwZSwgJmFtcDt0eXBlX2lkKTsKIAogCWJ0Zl90eXBlX29wcyh0KS0mZ3Q7c2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTUzMCw2ICYjNDM7NTMwLDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIHsKIAlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAKJiM0MzsJLyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi8KJiM0MzsJaWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpCiAJCXJldHVybiAwOwogCS8qCkBAIC0zMTEwLDYgJiM0MzszMTE0LDEwIEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwogCiYjNDM7CS8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovCiYjNDM7CWlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE3ZDAzN2Y1N2E3ZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYwpAQCAtMCwwICYjNDM7MSw4MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluCiYjNDM7ICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy4KJiM0MzsgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZQomIzQzOyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXMKJiM0MzsgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlcgomIzQzOyAqIHBhbmljX29uX29vcHMpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzKTsKJiM0MzsJY29uc3QgY2hhciAqcGF0aCA9ICYjMzQ7L3N5cy9mcy9icGYva2V5bGVzc19tYXAmIzM0OzsKJiM0MzsJX191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDsKJiM0MzsJY2hhciBidWZbMjU2XTsKJiM0MzsJaW50IG1hcF9mZDsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJb3B0cy5tYXBfZmxhZ3MgPSBtYXBfZmxhZ3M7CiYjNDM7CW9wdHMuYnRmX2ZkID0gYnRmX2ZkOwomIzQzOwlvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQb3NpdGl2ZSBjb250cm9sOiB0aGUgc2FtZSBtYXAgd2l0aCBhIHJlYWwga2V5IHR5cGUgbXVzdCBiZSBhY2NlcHRlZCwKJiM0MzsJICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkCiYjNDM7CSAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS4KJiM0MzsJICovCiYjNDM7CW9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkOwomIzQzOwltYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgJiMzNDtrZXllZF9tYXAmIzM0OywgNCwgNCwgOCwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCAmIzM0O2tleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJY2xvc2UobWFwX2ZkKTsKJiM0MzsKJiM0MzsJLyogQSBrZXktbGVzcyBCVEYgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MzsJb3B0cy5idGZfa2V5X3R5cGVfaWQgPSAwOwomIzQzOwltYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgJiMzNDtrZXlsZXNzX21hcCYjMzQ7LCA0LCA0LCA4LCAmYW1wO29wdHMpOwomIzQzOwomIzQzOwlpZiAobWFwX2ZkICZndDs9IDApIHsKJiM0MzsJCS8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovCiYjNDM7CQkodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKJiM0MzsJCWlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHsKJiM0MzsJCQlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJCWlmIChmKSB7CiYjNDM7CQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkKJiM0MzsJCQkJCTsKJiM0MzsJCQkJZmNsb3NlKGYpOwomIzQzOwkJCX0KJiM0MzsJCQl1bmxpbmsocGF0aCk7CiYjNDM7CQl9CiYjNDM7CQljbG9zZShtYXBfZmQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShtYXBfZmQsIC1FSU5WQUwsICYjMzQ7a2V5LWxlc3MgY3JlYXRlIGlzIHJlamVjdGVkJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21hcF9rZXlsZXNzKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgYnRmX2ZkLCB2YWxfaWQ7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtidGZfX25ld19lbXB0eSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmFsX2lkID0gYnRmX19hZGRfaW50KGJ0ZiwgJiMzNDtpbnQmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpOwomIzQzOwlpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsICYjMzQ7YnRmX19hZGRfaW50JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCAmIzM0O2J0Zl9fbG9hZF9pbnRvX2tlcm5lbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlidGZfZmQgPSBidGZfX2ZkKGJ0Zik7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aGFzaCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyaGFzaCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMKQEAgLTAsMCAmIzQzOzEsODEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2J0Zl9zaG93X3ZvaWQuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGJwZl9zbnByaW50Zl9idGYoKSByZW5kZXJzIGEgdHlwZV9pZCB0YWtlbiBzdHJhaWdodCBmcm9tIHRoZSB2bWxpbnV4IEJURi4KJiM0MzsgKiBUd28gc3VjaCB0eXBlX2lkcyB1c2VkIHRvIE5VTEwtZGVyZWYgaW4gdGhlIEJURiBzaG93IHBhdGg6CiYjNDM7ICogICAtIGEgJiMzNDtjb25zdCB2b2lkJiMzNDsgKGEgbW9kaWZpZXIgcmVzb2x2aW5nIHRvIHZvaWQpIGluIGJ0Zl9tb2RpZmllcl9zaG93KCkKJiM0MzsgKiAgIC0gYSBCVEZfS0lORF9WQVIgaW4gYnRmX3Zhcl9zaG93KCkgKGJhc2UgQlRGIGhhcyBubyByZXNvbHZlZF9pZHMpCiYjNDM7ICogQSBmaXhlZCBrZXJuZWwgcmVuZGVycyBib3RoIHdpdGhvdXQgY3Jhc2hpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGxvbmcgcnVuKHN0cnVjdCBidGZfc2hvd192b2lkICpza2VsLCBfX3UzMiB0eXBlX2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTsKJiM0MzsJY2hhciBjdHhbOF0gPSB7fTsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0eXBlX2lkID0gdHlwZV9pZDsKJiM0MzsJdG9wdHMuY3R4X2luID0gY3R4OwomIzQzOwl0b3B0cy5jdHhfc2l6ZV9pbiA9IHNpemVvZihjdHgpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5kdW1wX3R5cGUpLAomIzQzOwkJCQkJICAgICAgJmFtcDt0b3B0cyksICYjMzQ7dGVzdF9ydW4mIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBza2VsLSZndDtic3MtJmd0O3JldDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDsKJiM0MzsJc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWw7CiYjNDM7CWludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19wYXJzZSgmIzM0Oy9zeXMva2VybmVsL2J0Zi92bWxpbnV4JiMzNDssIE5VTEwpOwomIzQzOwlpZiAoIWJ0ZikgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2J0ZjsKJiM0MzsKJiM0MzsJbiA9IGJ0Zl9fdHlwZV9jbnQoYnRmKTsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7IG4gJmFtcDsmYW1wOyAhKGN2ICZhbXA7JmFtcDsgdmFyKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXQgPSBidGZfX3R5cGVfYnlfaWQoYnRmLCBpKTsKJiM0MzsJCWlmICghY3YgJmFtcDsmYW1wOyBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCAmYW1wOyZhbXA7IHQtJmd0O3R5cGUgPT0gMCkKJiM0MzsJCQljdiA9IGk7CiYjNDM7CQkvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSYjMzk7cyBidWZmZXIuICovCiYjNDM7CQlpZiAoIXZhciAmYW1wOyZhbXA7IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikgewomIzQzOwkJCWxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtJmd0O3R5cGUpOwomIzQzOwomIzQzOwkJCWlmIChzeiAmZ3Q7IDAgJmFtcDsmYW1wOyBzeiAmbHQ7PSAobG9uZylzaXplb2Yoc2tlbC0mZ3Q7YnNzLSZndDtvYmopKQomIzQzOwkJCQl2YXIgPSBpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qICYjMzQ7Y29uc3Qgdm9pZCYjMzQ7IHJlbmRlcnMgdGhlICYjMzQ7Jmx0O3Vuc3VwcG9ydGVkIGtpbmQ6MCZndDsmIzM0OyBwbGFjZWhvbGRlci4gKi8KJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtjb25zdF92b2lkJiMzNDspKSB7CiYjNDM7CQlpZiAoY3YpIHsKJiM0MzsJCQlBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSwKJiM0MzsJCQkJICBzaXplb2YoJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7KSAtIDEsICYjMzQ7cmV0JiMzNDspOwomIzQzOwkJCUFTU0VSVF9TVFJFUShza2VsLSZndDtic3MtJmd0O291dCwgJiMzNDsmbHQ7dW5zdXBwb3J0ZWQga2luZDowJmd0OyYjMzQ7LAomIzQzOwkJCQkgICAgICYjMzQ7cGxhY2Vob2xkZXImIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIEJURl9LSU5EX1ZBUiBtdXN0IHJlc29sdmUgYW5kIHJlbmRlciB3aXRob3V0IGVycm9yLiAqLwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3ZhciYjMzQ7KSkgewomIzQzOwkJaWYgKHZhcikKJiM0MzsJCQlBU1NFUlRfR1QocnVuKHNrZWwsIHZhciksIDAsICYjMzQ7cmV0JiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpOwomIzQzO291dF9idGY6CiYjNDM7CWJ0Zl9fZnJlZShidGYpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0YWY4MGZiYmI4MDgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jCkBAIC0wLDAgJiM0MzsxLDI0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2J0Zl9wdHIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO19fdTMyIHR5cGVfaWQ7CiYjNDM7LyogQSBidWZmZXIgd2Ugb3duIHRvIHJlbmRlciB0aGUgc2VsZWN0ZWQgdHlwZSBmcm9tLCBrZXB0IGluIGJvdW5kcy4gKi8KJiM0MztjaGFyIG9ialsyNTZdOwomIzQzO2NoYXIgb3V0WzY0XTsKJiM0Mztsb25nIHJldDsKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IGR1bXBfdHlwZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX3B0ciBwdHIgPSB7CiYjNDM7CQkucHRyID0gb2JqLAomIzQzOwkJLnR5cGVfaWQgPSB0eXBlX2lkLAomIzQzOwkJLmZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCAmYW1wO3B0ciwgc2l6ZW9mKHB0ciksIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSByZWxldmFudCBhcmVhcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgd2hpbGUgcG90ZW50aWFsbHkgY29tcGxleCBpbiB0aGVpciBsb2dpYywgbWlnaHQgYmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRvb2xzLgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvYnRmLmNgIGFyZSBkZWZpbml0ZWx5IHRoZSBtb3N0IGludGVyZXN0aW5nLiBXZSYjMzk7dmUgZ290IHR3byBzcGVjaWZpYyBhcmVhcyBvZiBmb2N1cyB3aXRoaW4gdGhhdCBmaWxlOiBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSW4gYGJ0Zl9tb2RpZmllcl9zaG93YCwgdGhlIGNvZGUgaXMgbm93IGhhbmRsaW5nIGNhc2VzIHdoZXJlIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSBgdm9pZGAgdHlwZSwgd2hpY2ggbGFja3MgYSBzaG93IG9wZXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBudWxsIGNoZWNrIHRvIGd1YXJkIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciBhbmQgdXRpbGl6ZXMgYGJ0Zl9kZl9zaG93YCBhcyBhIGZhbGxiYWNrLiBgYnRmX3Zhcl9zaG93YCBhZGp1c3RzIHRoZSByZXNvbHV0aW9uIGxvZ2ljIGZvciB2YXJpYWJsZSB0eXBlcywgcGFydGljdWxhcmx5IGFkZHJlc3NpbmcgY2FzZXMgd2l0aCBiYXNlIEJURnMgd2hlcmUgYGJ0Zi0mZ3Q7cmVzb2x2ZWRfaWRzYCBpcyBOVUxMLiBUaGlzIGRpcmVjdCByZXNvbHZlIHVzaW5nIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AgbG9va3MgbGlrZSBhIGZpeCB0byBhdm9pZCBOVUxMIGRlcmVmZXJlbmNlcyBpbiBzcGVjaWZpYyBjb250ZXh0cy4gQm90aCBhcHBlYXIgdG8gYmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYSBjbGFzc2ljIEtBU0FOIHRhcmdldC4KCkluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIHRoZSBuZXcgY29kZSBpbiBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgIGV4cGxpY2l0bHkgZGlzYWxsb3dzIGhhc2ggbWFwcyB3aXRoIGtleS1sZXNzIEJURnMgdXNpbmcgYGJ0Zl90eXBlX2lzX3ZvaWRgLiBUaGlzIGlzIGEgdHlwZSBzYWZldHkgY2hlY2suIFRoZSBpbnRlcmVzdGluZyBjYXNlIGlzIGBidGZfdHlwZV9pc192b2lkYCwgd2hpY2ggbWlnaHQgb3BlbiB1cCBuZXcgY29kZSBwYXRocy4KCkZpbmFsbHksIHRoZSBhZGRlZCBzZWxmdGVzdHMgZm9yIGBidGZfbWFwX2tleWxlc3NgIGFuZCBgYnRmX3Nob3dfdm9pZGAgYXJlIGdvb2QgdG8gc2VlLiBUaGVzZSB3aWxsIG9mZmVyIHNvbWUgaW5pdGlhbCBjb3ZlcmFnZSBhbmQgdmFsaWRhdGlvbiwgYnV0IHRoZXkgbWlnaHQgbm90IGJlIGNvbXByZWhlbnNpdmUuCgpOb3csIEkmIzM5O2xsIGRpZyBpbnRvIGBidGZfZGZfc2hvd2AgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRob3NlIG51bGwgY2hlY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGRhdGEgZmxvd3MgYW5kIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIHRob3NlIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBob3cgZWZmZWN0aXZlIEtBU0FOIGlzIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEdpdmVuIHRoZSBjaGFuZ2VzIHByaW1hcmlseSB0YXJnZXQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdHlwZSBjaGVja3MsIEtBU0FOIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgdG9vbCBmb3IgdmFsaWRhdGlvbiBoZXJlLiBXaGlsZSBJJiMzOTtsbCBrZWVwIEtNU0FOIGluIG1pbmQsIGl0IHNlZW1zIGxlc3MgbGlrZWx5IHRvIHVuY292ZXIgc2lnbmlmaWNhbnQgbmV3IGlzc3VlcyBpbiB0aGlzIHNwZWNpZmljIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfZGZfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYz0yMjYzPXN0YXRpYyBpbnQgYnRmX2RmX3Jlc29sdmUoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNjktXG5rZXJuZWwvYnBmL2J0Zi5jOjIyNzA6c3RhdGljIHZvaWQgYnRmX2RmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXHRcdFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MDQ9c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtMjkxOS1cdGlmICghYnRmX3R5cGVfb3BzKHQpKVxua2VybmVsL2JwZi9idGYuYzoyOTIwOlx0XHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy0zMDIxLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6MzAyMjpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQ3ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ1bmNfcHJvdG9fb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDgwMC1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9mdW5jX3Byb3RvX2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDItfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTQ4NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ1bmNfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cdC5sb2dfZGV0YWlscyA9IGJ0Zl9yZWZfdHlwZV9sb2csXG5rZXJuZWwvYnBmL2J0Zi5jOjQ4NTA6XHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxua2VybmVsL2JwZi9idGYuYy00ODUxLX07XG4tLVxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy01MTQwLVx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcbmtlcm5lbC9icGYvYnRmLmM6NTE0MTpcdC5zaG93ID0gYnRmX2RmX3Nob3csXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTUyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGRlY2xfdGFnX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTUyMzktXHQubG9nX2RldGFpbHMgPSBidGZfZGVjbF90YWdfbG9nLFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlx0LnNob3cgPSBidGZfZGZfc2hvdyxcbmtlcm5lbC9icGYvYnRmLmMtNTI0MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOgoKKipBbmFseXppbmcgYGtlcm5lbC9icGYvYnRmLmNgLCBMaW5lcyAyMjY1LTIyODAqKgoKUmlnaHQsIGxldCBtZSBwdWxsIHVwIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyAyMjY1LTIyODAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0LCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBkZWNvZGluZyBvciBwcm9jZXNzaW5nIHNvbWUgYXNwZWN0IG9mIHRoZW0uIEJhc2VkIG9uIHRoZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSB3aXRoaW4gYSBsYXJnZXIgZnVuY3Rpb24sIGxpa2VseSBhIGNvcmUgZnVuY3Rpb24gZm9yIHJlYWRpbmcsIHBhcnNpbmcsIG9yIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uLgoKSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgc29ydCBvZiBwb2ludGVyIG1hbmlwdWxhdGlvbiBvciBzdHJ1Y3R1cmUgbWVtYmVyIGFjY2VzcyBhdCB0aGlzIHJhbmdlLCBwZXJoYXBzIGRlYWxpbmcgd2l0aCBleHRyYWN0aW5nIHR5cGUgaW5mb3JtYXRpb24sIHJlc29sdmluZyByZWZlcmVuY2VzIGJldHdlZW4gdHlwZXMsIG9yIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuIElmIGl0JiMzOTtzIG5lYXIgdGhlIGVuZCBvZiBhIGJsb2NrLCBpdCBjb3VsZCBiZSB0aGUgZmluYWwgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgYmUgYW55IG9mIHRoZSBgYnRmX2AgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgZnJlcXVlbnRseSB1c2VkIGluIHRoZSBgYnBmL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc2NvcGUsIGl0IG1pZ2h0IGJlIGFib3V0IHRoZSBgYnRmX3R5cGVgIHN0cnVjdHVyZSwgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQlRGIGluZm9ybWF0aW9uLgoKSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgQlRGIGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQsIHBlcmhhcHMgY2FzdGluZyBzb21lIHNvcnQgb2YgZ2VuZXJpYyBkYXRhIGJ1ZmZlciBpbnRvIHNwZWNpZmljIEJURiBzdHJ1Y3R1cmVzLCBvciBtYXliZSB2ZXJpZnlpbmcgc29tZSBmaWVsZCB2YWx1ZXMgYWdhaW5zdCBleHBlY3RlZCByYW5nZXMuIEl0IGNvdWxkIGludm9sdmUgY2hlY2tpbmcgdHlwZSBJRHMsIG1lbWJlciBvZmZzZXRzLCBvciBhbnkgb3RoZXIgc3RydWN0dXJhbCBlbGVtZW50IHJlbGV2YW50IHRvIHRoZSBCVEYgZm9ybWF0LiBLbm93aW5nIHRoZSBleGFjdCBmdW5jdGlvbiBzdXJyb3VuZGluZyB0aGlzIGNvZGUgYmxvY2sgd291bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQsIGJ1dCBqdXN0IGZyb20gdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBCVEYtcmVsYXRlZCBvcGVyYXRpb24gdG8gb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9idGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NTpcdHtcbjIyNjY6XHRcdGJ0Zl92ZXJpZmllcl9sb2dfYmFzaWMoZW52LCB2LVx1MDAzZXQsIFwmIzM0O1Vuc3VwcG9ydGVkIHJlc29sdmVcJiMzNDspO1xuMjI2NzpcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjY4Olx0fVxuMjI2OTpcdFxuMjI3MDpcdHN0YXRpYyB2b2lkIGJ0Zl9kZl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuMjI3MTpcdFx0XHRcdHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldHMsXG4yMjcyOlx0XHRcdFx0c3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjI3MzpcdHtcbjIyNzQ6XHRcdGJ0Zl9zaG93KHNob3csIFwmIzM0O1x1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6JXVcdTAwM2VcJiMzNDssIEJURl9JTkZPX0tJTkQodC1cdTAwM2VpbmZvKSk7XG4yMjc1Olx0fVxuMjI3NjpcdFxuMjI3NzpcdHN0YXRpYyBpbnQgYnRmX2ludF9jaGVja19tZW1iZXIoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcbjIyNzg6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3RydWN0X3R5cGUsXG4yMjc5Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuMjI4MDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZSlcbjIyODE6XHR7XG4yMjgyOlx0XHR1MzIgaW50X2RhdGEgPSBidGZfdHlwZV9pbnQobWVtYmVyX3R5cGUpO1xuMjI4MzpcdFx0dTMyIHN0cnVjdF9iaXRzX29mZiA9IG1lbWJlci1cdTAwM2VvZmZzZXQ7XG4yMjg0Olx0XHR1MzIgc3RydWN0X3NpemUgPSBzdHJ1Y3RfdHlwZS1cdTAwM2VzaXplO1xuMjI4NTpcdFx0dTMyIG5yX2NvcHlfYml0cztcbjIyODY6XHRcdHUzMiBieXRlc19vZmZzZXQ7XG4yMjg3Olx0XG4yMjg4Olx0XHRpZiAoVTMyX01BWCAtIHN0cnVjdF9iaXRzX29mZiBcdTAwM2MgQlRGX0lOVF9PRkZTRVQoaW50X2RhdGEpKSB7XG4yMjg5Olx0XHRcdGJ0Zl92ZXJpZmllcl9sb2dfbWVtYmVyKGVudiwgc3RydWN0X3R5cGUsIG1lbWJlcixcbjIyOTA6XHRcdFx0XHRcdFx0XCYjMzQ7Yml0c19vZmZzZXQgZXhjZWVkcyBVMzJfTUFYXCYjMzQ7KTtcbjIyOTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjkyOlx0XHR9XG4yMjkzOlx0XG4yMjk0Olx0XHRzdHJ1Y3RfYml0c19vZmYgJiM0Mzs9IEJURl9JTlRfT0ZGU0VUKGludF9kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIEJURiBJbnNwZWN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5zcGVjdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGJlaW5nIGRpc3BsYXllZCwgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB2YXJpYWJsZSBwcmVzZW50YXRpb24gd2l0aGluIHRoZSBCVEYgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBkaWRuJiMzOTt0IGZ1bGx5IHNhdGlzZnkgbXkgbmVlZCBmb3IgYSBkZWVwIHVuZGVyc3RhbmRpbmcuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgZnVuY3Rpb25zIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmVzIDI5MDAgdG8gMjk0MC4gVGhpcyByYW5nZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgaW50ZWdyYXRlZCBhbmQgcmVuZGVyZWQgaW4gdGhlIG91dHB1dC4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBmdXJ0aGVyIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uIGNvdWxkIGJlIG5lZWRlZC4gVGhpcyBmb2N1c2VkIGludmVzdGlnYXRpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmUgZGV0YWlsIEkgYW0gc2Vla2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTAwOlx0XG4yOTAxOlx0XHRyZXR1cm4gMDtcbjI5MDI6XHR9XG4yOTAzOlx0XG4yOTA0Olx0c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuMjkwNTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbjI5MDY6XHRcdFx0XHQgICAgICB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSxcbjI5MDc6XHRcdFx0XHQgICAgICB1OCBiaXRzX29mZnNldCwgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjkwODpcdHtcbjI5MDk6XHRcdGlmIChidGYtXHUwMDNlcmVzb2x2ZWRfaWRzKVxuMjkxMDpcdFx0XHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFx1MDAyNnR5cGVfaWQpO1xuMjkxMTpcdFx0ZWxzZVxuMjkxMjpcdFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbjI5MTM6XHRcbjI5MTQ6XHRcdC8qXG4yOTE1Olx0XHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXCYjMzQ7Y29uc3Qgdm9pZFwmIzM0OyksIHdoaWNoXG4yOTE2Olx0XHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbjI5MTc6XHRcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuMjkxODpcdFx0ICovXG4yOTE5Olx0XHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbjI5MjA6XHRcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4yOTIxOlx0XHRlbHNlXG4yOTIyOlx0XHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuMjkyMzpcdH1cbjI5MjQ6XHRcbjI5MjU6XHRzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4yOTI2Olx0XHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbjI5Mjc6XHRcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuMjkyODpcdHtcbjI5Mjk6XHRcdC8qXG4yOTMwOlx0XHQgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcbjI5MzE6XHRcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cbjI5MzI6XHRcdCAqIFJlc29sdmUgdGhlIHZhciYjMzk7cyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbjI5MzM6XHRcdCAqL1xuMjkzNDpcdFx0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4yOTM1Olx0XHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4yOTM2Olx0XHRlbHNlXG4yOTM3Olx0XHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4yOTM4Olx0XG4yOTM5Olx0XHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbjI5NDA6XHR9XG4yOTQxOlx0XG4yOTQyOlx0c3RhdGljIHZvaWQgYnRmX3B0cl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuMjk0MzpcdFx0XHRcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXG4yOTQ0Olx0XHRcdFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEJQRiBoYXNodGFibGUgdmVyaWZpY2F0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbnMgbG9jYXRlZCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zLCBwcmVzdW1hYmx5LCB2YWxpZGF0ZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgcmVndWxhciBhbmQgcmUtaGFzaGVkIGhhc2h0YWJsZXMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBjb25jZXJuLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIG1lbnRhbGx5IHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hlY2tzIHBlcmZvcm1lZCBmb3IgcHJvZ3JhbSBzZWN1cml0eSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjU6XHRcdHJldHVybiAwO1xuIDUyNjpcdH1cbiA1Mjc6XHRcbiA1Mjg6XHRzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gNTI5Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuIDUzMDpcdHtcbiA1MzE6XHRcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiA1MzI6XHRcbiA1MzM6XHRcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4gNTM0Olx0XHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4gNTM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUzNjpcdFxuIDUzNzpcdFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gNTM4Olx0XHRcdHJldHVybiAwO1xuIDUzOTpcdFx0LypcbiA1NDA6XHRcdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCYjMzk7cyBCVEYgcmVjb3JkIGlzIG5vdFxuIDU0MTpcdFx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxuIDU0MjpcdFx0ICovXG4gNTQzOlx0XHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXG4gNTQ0Olx0XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvcik7XG4gNTQ1Olx0XHRlbHNlXG4gNTQ2Olx0XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbiA1NDc6XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaXRzIHJvbGUgYW5kIGVuc3VyZSBpdCYjMzk7cyBub3QgdGhlIHNvdXJjZSBvciBhIGNvbnRyaWJ1dGluZyBmYWN0b3IgdG8gd2hhdGV2ZXIgcHJvYmxlbSB3ZSYjMzk7cmUgdHJhY2tpbmcgZG93bi4gR290dGEgYmUgbWV0aG9kaWNhbCBhbmQgY292ZXIgYWxsIHRoZSBiYXNlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0by4uLiB3ZWxsLCBJJiMzOTtsbCBuZWVkIG1vcmUgY29udGV4dCB0byBrbm93IHdoYXQgaXQgaXMgcmVsYXRlZCB0bywgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgbWFrZSBzdXJlIGl0IGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTA1Olx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbjMxMDY6XHRcdFx0XHRcdG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSAmIzQzOyByb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbjMxMDc6XHRcbjMxMDg6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4zMTA5Olx0fVxuMzExMDpcdFxuMzExMTpcdHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4zMTEyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4zMTEzOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbjMxMTQ6XHR7XG4zMTE1Olx0XHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4zMTE2Olx0XG4zMTE3Olx0XHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuMzExODpcdFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuMzExOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMjA6XHRcbjMxMjE6XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuMzEyMjpcdH1cbjMxMjM6XHRcbjMxMjQ6XHRzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI2CgkJCQkJCQlvdXRwdXQ6IDI4NAoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gRGVjaXNpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCB0aGUgS01TQU4gZnV6emluZy4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBjaGFuZ2VzLiBJbiBga2VybmVsL2JwZi9idGYuY2AsIHdlJiMzOTtyZSBoYXJkZW5pbmcgYWdhaW5zdCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBTcGVjaWZpY2FsbHksIGBidGZfbW9kaWZpZXJfc2hvd2AgaXMgYmVpbmcgcGF0Y2hlZCB0byBoYW5kbGUgdGhlIGB2b2lkYCBtb2RpZmllciBncmFjZWZ1bGx5IGFuZCBgYnRmX3Zhcl9zaG93YCBpcyBoYW5kbGluZyBhIHBvdGVudGlhbCBOVUxMIGByZXNvbHZlZF9pZHNgIHBvaW50ZXIgaW4gYmFzZSBCVEYgc2NlbmFyaW9zLiBHb29kLCBkZWZlbnNpdmUgY29kaW5nLiBUaGVuLCB3ZSBzZWUgdGhhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gcmVqZWN0IGtleS1sZXNzIEJURiBtYXBzLCBhZ2FpbiwgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGxhdGVyIGluIHRoZSBgYnBmZnNgIGR1bXAgb3BlcmF0aW9uLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyB0aGUgYWRkaXRpb24gb2Ygc2VsZnRlc3RzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEFyZSB3ZSBzZW5kaW5nIGtlcm5lbCBzdHJ1Y3R1cmVzIHdpdGggZ2FyYmFnZSBkYXRhIHRvIHVzZXJzcGFjZT8gTm9wZS4gQXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZW0/IE5vdCBoYXBwZW5pbmcgaGVyZS4gTmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzIGludHJvZHVjZWQ/IE5vLiBBcmUgYm91bmRzIGNoZWNrcyBiZWluZyByZWxheGVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGJ1Z3MgYmVpbmcgZml4ZWQgYXJlIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggS0FTQU4sIGFuZCB0aGUga2VybmVsJiMzOTtzIG5vcm1hbCBvb3BzIHN5c3RlbSBzaG91bGQgY2F0Y2guIFNvLCBub3QgS01TQU4gbWF0ZXJpYWwuCgpUaGF0IHRha2VzIGNhcmUgb2YgdGhlIHRlY2huaWNhbCByZXZpZXcsIGJ1dCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZyBLTVNBTi4KCk15IHJ1bGUgb2YgdGh1bWIgaXM6IGlmIGEgYnVnIGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIExPQ0tERVAsIG9yIHNpbWlsYXIsIHdlICpkb24mIzM5O3QqIHJ1biBhIEtNU0FOIHNlc3Npb24uIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZTsgd2UgdXNlIGl0IG9ubHkgd2hlbiB3ZSBoYXZlIHRvLiBUaGUgY29kZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IEtNU0FOIGFsb25lIGNhbiBkZXRlY3QuCgpUaGVyZWZvcmUsIHRoaXMgaXMgY2xlYXI6IEkmIzM5O2xsIGludm9rZSBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcgSSBqdXN0IGxhaWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgQlRGIHR5cGUgZm9ybWF0dGluZyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgYW5kIEJQRiBoYXNoIG1hcCBCVEYgdmFsaWRhdGlvbiAoaHRhYl9tYXBfY2hlY2tfYnRmIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKS5cblxuU3BlY2lmaWNhbGx5OlxuMS4gSW4gYnRmX21vZGlmaWVyX3Nob3coKSwgaXQgYWRkcyBhIGNoZWNrIGZvciBOVUxMIGJ0Zl90eXBlX29wcyh0KSB3aGVuIG1vZGlmaWVycyByZXNvbHZlIHRvIHZvaWQsIGZhbGxpbmcgYmFjayB0byBidGZfZGZfc2hvdygpIHRvIGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuMy4gSW4gaHRhYl9tYXBfY2hlY2tfYnRmKCkgYW5kIHJodGFiX21hcF9jaGVja19idGYoKSwgaXQgcmVqZWN0cyBrZXktbGVzcyBCVEYgZGVmaW5pdGlvbnMgd2l0aCAtRUlOVkFMIHRvIGF2b2lkIGNyYXNoZXMgZHVyaW5nIG1hcCBkdW1waW5nLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQwOjMzLjA4NzIxOTc5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA0MzA0OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gdGhlIEJURiBzaG93IHJvdXRpbmVzIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSB3aGVuIGRlYWxpbmcgd2l0aCB2b2lkIG1vZGlmaWVycyBhbmQgYmFzZSBCVEZzLCBhbmQgYWRkcyBjaGVja3MgaW4gaHRhYl9tYXBfY2hlY2tfYnRmL3JodGFiX21hcF9jaGVja19idGYgdG8gcmVqZWN0IGhhc2ggbWFwcyBjcmVhdGVkIHdpdGgga2V5LWxlc3MgQlRGcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRi9CVEYgdmFsaWRhdGlvbiBhbmQgZm9ybWF0dGluZyBwYXRocyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBCUEYgaGVscGVyIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MDozMy4wODcyMjM3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzI0NTc2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTRkNjU4MDhlMGFiYTBmNWY0MDA3MWE0OTExMzVhNjYwYzViOWJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEyOjQwOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuaW5kZXggOTFiOGNlNzdmNjk5YS4uM2NmMzVlZTQ5YzEwMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXFxuKysrIGIva2VybmVsL2JwZi9idGYuY1xcbkBAIC0yOTExLDE0ICsyOTExLDMwIEBAIHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG4gXFxuLVxcdGJ0Zl90eXBlX29wcyh0KS1cXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcXG4rXFx0LypcXG4rXFx0ICogQSBtb2RpZmllciBjYW4gcmVzb2x2ZSB0byB0aGUgdm9pZCB0eXBlIChlLmcuIFxcXCJjb25zdCB2b2lkXFxcIiksIHdoaWNoXFxuK1xcdCAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlclxcbitcXHQgKiBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgTlVMTC5cXG4rXFx0ICovXFxuK1xcdGlmICghYnRmX3R5cGVfb3BzKHQpKVxcbitcXHRcXHRidGZfZGZfc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4gXFx0XFx0XFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4ge1xcbi1cXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4rXFx0LypcXG4rXFx0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXFx1MDAzZXJlc29sdmVkX2lkcywgd2hpY2ggaXMgTlVMTFxcbitcXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXFxuK1xcdCAqIFJlc29sdmUgdGhlIHZhcidzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJ0Zi1cXHUwMDNlcmVzb2x2ZWRfaWRzKVxcbitcXHRcXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2dHlwZV9pZCk7XFxuIFxcbiBcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLjQzMTIzNDI0MTgzYzcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC01MzAsNiArNTMwLDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcbitcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuIFxcbitcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuY1xcbkBAIC0wLDAgKzEsODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIEEgaGFzaCBtYXAgd2l0aCBhIGtleS1sZXNzIEJURiAoYnRmX2tleV90eXBlX2lkID09IDApIHVzZWQgdG8gTlVMTC1kZXJlZiBpblxcbisgKiBidGZfdHlwZV9zaG93KCkgd2hlbiBkdW1wZWQgdmlhIGJwZmZzLlxcbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxcbisgKiBwaW4tYW5kLXJlYWQgYmVsb3cgZGVsaWJlcmF0ZWx5IHdhbGtzIHRoYXQgYnBmZnMgZHVtcCBwYXRoLCBzbyBpdCBkb3VibGVzXFxuKyAqIGFzIGEgcmVwcm9kdWNlcjogaXQgb29wc2VzIGFuIHVuZml4ZWQga2VybmVsIChhbmQgcGFuaWNzIGl0IHVuZGVyXFxuKyAqIHBhbmljX29uX29vcHMpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hlY2tfa2V5bGVzcyhpbnQgbWFwX3R5cGUsIF9fdTMyIG1hcF9mbGFncywgaW50IGJ0Zl9mZCwgaW50IHZhbF9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzKTtcXG4rXFx0Y29uc3QgY2hhciAqcGF0aCA9IFxcXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFxcXCI7XFxuK1xcdF9fdTMyIGtleSA9IDEsIHZhbCA9IDB4NDE0MjQzNDQ7XFxuK1xcdGNoYXIgYnVmWzI1Nl07XFxuK1xcdGludCBtYXBfZmQ7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRvcHRzLm1hcF9mbGFncyA9IG1hcF9mbGFncztcXG4rXFx0b3B0cy5idGZfZmQgPSBidGZfZmQ7XFxuK1xcdG9wdHMuYnRmX3ZhbHVlX3R5cGVfaWQgPSB2YWxfaWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQb3NpdGl2ZSBjb250cm9sOiB0aGUgc2FtZSBtYXAgd2l0aCBhIHJlYWwga2V5IHR5cGUgbXVzdCBiZSBhY2NlcHRlZCxcXG4rXFx0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXFxuK1xcdCAqIHJlamVjdGlvbiAoZS5nLiBhbiB1bmtub3duIG1hcCB0eXBlKS5cXG4rXFx0ICovXFxuK1xcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xcbitcXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXFxcImtleWVkX21hcFxcXCIsIDQsIDQsIDgsIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcXFwia2V5ZWQgY3JlYXRlIGlzIGFjY2VwdGVkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rXFxuK1xcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXFxuK1xcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gMDtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFxcXCJrZXlsZXNzX21hcFxcXCIsIDQsIDQsIDgsIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmIChtYXBfZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHQvKiBVbmZpeGVkIGtlcm5lbDogcmVwcm9kdWNlIHRoZSBvb3BzIHZpYSB0aGUgYnBmZnMgZHVtcCBwYXRoLiAqL1xcbitcXHRcXHQodm9pZClicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgMCk7XFxuK1xcdFxcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcXG4rXFx0XFx0XFx0ZiA9IGZvcGVuKHBhdGgsIFxcXCJyXFxcIik7XFxuK1xcdFxcdFxcdGlmIChmKSB7XFxuK1xcdFxcdFxcdFxcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSlcXG4rXFx0XFx0XFx0XFx0XFx0O1xcbitcXHRcXHRcXHRcXHRmY2xvc2UoZik7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dW5saW5rKHBhdGgpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNsb3NlKG1hcF9mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdEFTU0VSVF9FUShtYXBfZmQsIC1FSU5WQUwsIFxcXCJrZXktbGVzcyBjcmVhdGUgaXMgcmVqZWN0ZWRcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxcbit7XFxuK1xcdGludCBidGZfZmQsIHZhbF9pZDtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXG4rXFx0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXFxcImJ0Zl9fbmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZhbF9pZCA9IGJ0Zl9fYWRkX2ludChidGYsIFxcXCJpbnRcXFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XFxuK1xcdGlmICghQVNTRVJUX0dUKHZhbF9pZCwgMCwgXFxcImJ0Zl9fYWRkX2ludFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcXFwiYnRmX19sb2FkX2ludG9fa2VybmVsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaGFzaFxcXCIpKVxcbitcXHRcXHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9IQVNILCAwLCBidGZfZmQsIHZhbF9pZCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJyaGFzaFxcXCIpKVxcbitcXHRcXHRjaGVja19rZXlsZXNzKEJQRl9NQVBfVFlQRV9SSEFTSCwgQlBGX0ZfTk9fUFJFQUxMT0MsIGJ0Zl9mZCwgdmFsX2lkKTtcXG4rb3V0OlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ3MzIzMmRjMmEwNDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX3Nob3dfdm9pZC5jXFxuQEAgLTAsMCArMSw4MSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcXFwiXFxuK1xcbisvKlxcbisgKiBicGZfc25wcmludGZfYnRmKCkgcmVuZGVycyBhIHR5cGVfaWQgdGFrZW4gc3RyYWlnaHQgZnJvbSB0aGUgdm1saW51eCBCVEYuXFxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcXG4rICogICAtIGEgXFxcImNvbnN0IHZvaWRcXFwiIChhIG1vZGlmaWVyIHJlc29sdmluZyB0byB2b2lkKSBpbiBidGZfbW9kaWZpZXJfc2hvdygpXFxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcXG4rICogQSBmaXhlZCBrZXJuZWwgcmVuZGVycyBib3RoIHdpdGhvdXQgY3Jhc2hpbmcuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0Y2hhciBjdHhbOF0gPSB7fTtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldHlwZV9pZCA9IHR5cGVfaWQ7XFxuK1xcdHRvcHRzLmN0eF9pbiA9IGN0eDtcXG4rXFx0dG9wdHMuY3R4X3NpemVfaW4gPSBzaXplb2YoY3R4KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZHVtcF90eXBlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRvcHRzKSwgXFxcInRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmV0O1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX3Nob3dfdm9pZCh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcXG4rXFx0c3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWw7XFxuK1xcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZjtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fcGFyc2UoXFxcIi9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFxcIiwgTlVMTCk7XFxuK1xcdGlmICghYnRmKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gYnRmX3Nob3dfdm9pZF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9idGY7XFxuK1xcbitcXHRuID0gYnRmX190eXBlX2NudChidGYpO1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbiBcXHUwMDI2XFx1MDAyNiAhKGN2IFxcdTAwMjZcXHUwMDI2IHZhcik7IGkrKykge1xcbitcXHRcXHR0ID0gYnRmX190eXBlX2J5X2lkKGJ0ZiwgaSk7XFxuK1xcdFxcdGlmICghY3YgXFx1MDAyNlxcdTAwMjYgYnRmX2tpbmQodCkgPT0gQlRGX0tJTkRfQ09OU1QgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNldHlwZSA9PSAwKVxcbitcXHRcXHRcXHRjdiA9IGk7XFxuK1xcdFxcdC8qIFBpY2sgYSBWQVIgc21hbGwgZW5vdWdoIHRvIHJlbmRlciBmcm9tIHRoZSBwcm9ncmFtJ3MgYnVmZmVyLiAqL1xcbitcXHRcXHRpZiAoIXZhciBcXHUwMDI2XFx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9WQVIpIHtcXG4rXFx0XFx0XFx0bG9uZyBzeiA9IGJ0Zl9fcmVzb2x2ZV9zaXplKGJ0ZiwgdC1cXHUwMDNldHlwZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoc3ogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHN6IFxcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW9iaikpXFxuK1xcdFxcdFxcdFxcdHZhciA9IGk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogXFxcImNvbnN0IHZvaWRcXFwiIHJlbmRlcnMgdGhlIFxcXCJcXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXFx1MDAzZVxcXCIgcGxhY2Vob2xkZXIuICovXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjb25zdF92b2lkXFxcIikpIHtcXG4rXFx0XFx0aWYgKGN2KSB7XFxuK1xcdFxcdFxcdEFTU0VSVF9FUShydW4oc2tlbCwgY3YpLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFxcdTAwM2VcXFwiKSAtIDEsIFxcXCJyZXRcXFwiKTtcXG4rXFx0XFx0XFx0QVNTRVJUX1NUUkVRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlb3V0LCBcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6MFxcdTAwM2VcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJwbGFjZWhvbGRlclxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQSBCVEZfS0lORF9WQVIgbXVzdCByZXNvbHZlIGFuZCByZW5kZXIgd2l0aG91dCBlcnJvci4gKi9cXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInZhclxcXCIpKSB7XFxuK1xcdFxcdGlmICh2YXIpXFxuK1xcdFxcdFxcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXFxcInJldFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0fVxcbitcXG4rXFx0YnRmX3Nob3dfdm9pZF9fZGVzdHJveShza2VsKTtcXG4rb3V0X2J0ZjpcXG4rXFx0YnRmX19mcmVlKGJ0Zik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0YWY4MGZiYmI4MDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuY1xcbkBAIC0wLDAgKzEsMjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFxcImJ0Zl9wdHIuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rX191MzIgdHlwZV9pZDtcXG4rLyogQSBidWZmZXIgd2Ugb3duIHRvIHJlbmRlciB0aGUgc2VsZWN0ZWQgdHlwZSBmcm9tLCBrZXB0IGluIGJvdW5kcy4gKi9cXG4rY2hhciBvYmpbMjU2XTtcXG4rY2hhciBvdXRbNjRdO1xcbitsb25nIHJldDtcXG4rXFxuK1NFQyhcXFwicmF3X3RwL3N5c19lbnRlclxcXCIpXFxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcXG4rXFx0XFx0LnB0ciA9IG9iaixcXG4rXFx0XFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxcbitcXHRcXHQuZmxhZ3MgPSAwLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0ID0gYnBmX3NucHJpbnRmX2J0ZihvdXQsIHNpemVvZihvdXQpLCBcXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6MzQuNDYwMjc5NzY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjM2MDg0NjE3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3R5cGVfc25wcmludGZfc2hvd1wiLFxuICAgIFwiYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NcIixcbiAgICBcImJwZl9zbnByaW50Zl9idGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgQlRGIHNob3cgcm91dGluZXMgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIHdoZW4gZGVhbGluZyB3aXRoIHZvaWQgbW9kaWZpZXJzIGFuZCBiYXNlIEJURnMsIGFuZCBhZGRzIGNoZWNrcyBpbiBodGFiX21hcF9jaGVja19idGYvcmh0YWJfbWFwX2NoZWNrX2J0ZiB0byByZWplY3QgaGFzaCBtYXBzIGNyZWF0ZWQgd2l0aCBrZXktbGVzcyBCVEZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGL0JURiB2YWxpZGF0aW9uIGFuZCBmb3JtYXR0aW5nIHBhdGhzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIEJQRiBoZWxwZXIgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI5MTEsMTQgKzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ZWxzZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuK1x0LypcbitcdCAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiBcImNvbnN0IHZvaWRcIiksIHdoaWNoXG4rXHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbitcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuK1x0ICovXG4rXHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbitcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4rXHRlbHNlXG4rXHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuIHtcbi1cdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHQvKlxuK1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4rXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXG4rXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4rXHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHRlbHNlXG4rXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4gXG4gXHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTUzMCw2ICs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbitcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4rXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4rXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuK1x0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgKzEsODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuK1xuKy8qXG4rICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluXG4rICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy5cbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuKyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXNcbisgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlclxuKyAqIHBhbmljX29uX29vcHMpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyk7XG4rXHRjb25zdCBjaGFyICpwYXRoID0gXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwiO1xuK1x0X191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRpbnQgbWFwX2ZkO1xuK1x0RklMRSAqZjtcbitcbitcdG9wdHMubWFwX2ZsYWdzID0gbWFwX2ZsYWdzO1xuK1x0b3B0cy5idGZfZmQgPSBidGZfZmQ7XG4rXHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuK1xuK1x0LypcbitcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuK1x0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXG4rXHQgKiByZWplY3Rpb24gKGUuZy4gYW4gdW5rbm93biBtYXAgdHlwZSkuXG4rXHQgKi9cbitcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwia2V5ZWRfbWFwXCIsIDQsIDQsIDgsIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImtleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbitcbitcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4rXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCJrZXlsZXNzX21hcFwiLCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbitcbitcdGlmIChtYXBfZmQgXHUwMDNlPSAwKSB7XG4rXHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4rXHRcdCh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcbitcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0XHRcdGlmIChmKSB7XG4rXHRcdFx0XHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpXG4rXHRcdFx0XHRcdDtcbitcdFx0XHRcdGZjbG9zZShmKTtcbitcdFx0XHR9XG4rXHRcdFx0dW5saW5rKHBhdGgpO1xuK1x0XHR9XG4rXHRcdGNsb3NlKG1hcF9mZCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobWFwX2ZkLCAtRUlOVkFMLCBcImtleS1sZXNzIGNyZWF0ZSBpcyByZWplY3RlZFwiKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuK3tcbitcdGludCBidGZfZmQsIHZhbF9pZDtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9fbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsIFwiYnRmX19hZGRfaW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcImJ0Zl9fbG9hZF9pbnRvX2tlcm5lbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpO1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNzMyMzJkYzJhMDQ1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbkBAIC0wLDAgKzEsODEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcIlxuK1xuKy8qXG4rICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcbisgKiAgIC0gYSBcImNvbnN0IHZvaWRcIiAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKVxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcbisgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbisgKi9cbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdGNoYXIgY3R4WzhdID0ge307XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0eXBlX2lkID0gdHlwZV9pZDtcbitcdHRvcHRzLmN0eF9pbiA9IGN0eDtcbitcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmR1bXBfdHlwZSksXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbitcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX3BhcnNlKFwiL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcIiwgTlVMTCk7XG4rXHRpZiAoIWJ0Zikge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0X2J0ZjtcbitcbitcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiAhKGN2IFx1MDAyNlx1MDAyNiB2YXIpOyBpKyspIHtcbitcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpO1xuK1x0XHRpZiAoIWN2IFx1MDAyNlx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCBcdTAwMjZcdTAwMjYgdC1cdTAwM2V0eXBlID09IDApXG4rXHRcdFx0Y3YgPSBpO1xuK1x0XHQvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSdzIGJ1ZmZlci4gKi9cbitcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuK1x0XHRcdGxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtXHUwMDNldHlwZSk7XG4rXG4rXHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuK1x0XHRcdFx0dmFyID0gaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogXCJjb25zdCB2b2lkXCIgcmVuZGVycyB0aGUgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIiBwbGFjZWhvbGRlci4gKi9cbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29uc3Rfdm9pZFwiKSkge1xuK1x0XHRpZiAoY3YpIHtcbitcdFx0XHRBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSxcbitcdFx0XHRcdCAgc2l6ZW9mKFwiXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXHUwMDNlXCIpIC0gMSwgXCJyZXRcIik7XG4rXHRcdFx0QVNTRVJUX1NUUkVRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW91dCwgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIixcbitcdFx0XHRcdCAgICAgXCJwbGFjZWhvbGRlclwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInZhclwiKSkge1xuK1x0XHRpZiAodmFyKVxuK1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCJyZXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpO1xuK291dF9idGY6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40NGFmODBmYmJiODA4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcImJ0Zl9wdHIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitfX3UzMiB0eXBlX2lkO1xuKy8qIEEgYnVmZmVyIHdlIG93biB0byByZW5kZXIgdGhlIHNlbGVjdGVkIHR5cGUgZnJvbSwga2VwdCBpbiBib3VuZHMuICovXG4rY2hhciBvYmpbMjU2XTtcbitjaGFyIG91dFs2NF07XG4rbG9uZyByZXQ7XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcbitcdFx0LnB0ciA9IG9iaixcbitcdFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHJldCA9IGJwZl9zbnByaW50Zl9idGYob3V0LCBzaXplb2Yob3V0KSwgXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6MzQuNDYwMjgwOTg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM5NDE5OTcwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBiaXQgb2YgYSBudWFuY2VkIGFyZWEsIGJ1dCB0aGUgY29yZSBvZiBpdCBpcyB3aGV0aGVyIHRoZXNlIGNvZGUgbW9kaWZpY2F0aW9ucyBjb3VsZCBpbnRyb2R1Y2UgbmV3IHBhdGhzIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGZ1enppbmcgY291bGQgcG90ZW50aWFsbHkgdW5jb3Zlci5cblxuRmlyc3QsIGxldCBtZSBhbmFseXplIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIEkgc2VlIGFkanVzdG1lbnRzIHRvIGBidGZfbW9kaWZpZXJfc2hvd2Agd2l0aGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5IGFyZSBhZGRpbmcgbnVsbCBjaGVja3MgYGlmICghYnRmX3R5cGVfb3BzKHQpKWAgd2hlbiBza2lwcGluZyBtb2RpZmllcnMgcmVzb2x2ZXMgdG8gdm9pZCB0eXBlLiBUaGlzIGxvZ2ljIGNoYW5nZSBtaWdodCBiZSBpbnRlcmVzdGluZy4gVGhlIGFkZGVkIGNhbGwgdG8gYGJ0Zl9kZl9zaG93KClgIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBTaW1pbGFybHksIHRoZSBjaGVjayBpbiBgYnRmX3Zhcl9zaG93YCB3aXRoIGBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzYCB2ZXJzdXMgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBpcyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuVGhlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAsIG5vdyBleHBsaWNpdGx5IHJlamVjdCB2b2lkIGtleSB0eXBlcyB3aXRoIGBpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgbGlrZWx5IGEgaGFyZGVuaW5nIG1lYXN1cmUsIGJ1dCBhbnl0aW1lIHRoZXJlIGFyZSBuZXcgZXJyb3IgY2hlY2tzLCB0aGVyZSdzIGEgY2hhbmNlIHRoZSBlcnJvciBoYW5kbGluZyBpdHNlbGYgY291bGQgYmUgZmxhd2VkLiBUaGVzZSBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgZXJyb3IgcmV0dXJucyB0by5cblxuRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBuZXcgc2VsZnRlc3RzLCBgYnRmX21hcF9rZXlsZXNzLmNgLCBgYnRmX3Nob3dfdm9pZC5jYCwgYW5kIGBidGZfc2hvd192b2lkLmNgIGluZGljYXRlcyB0aGUgZGV2ZWxvcGVycyBhcmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgYXJlIGFjdGl2ZWx5IHRlc3RpbmcgdGhlbSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEhvd2V2ZXIsIHRoZXkgbWlnaHQgbm90IGJlIHRlc3RpbmcgdGhlIGZ1bGwgc3RhdGUgc3BhY2UuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgdGVzdHMsIGFuZCB0aGVuIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGggYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGFmZmVjdGVkIGNvZGUgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHRlc3RzIGFyZSBjb21wcmVoZW5zaXZlIGVub3VnaC4gVGhlbiBJIGNhbiBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB0cnVseSBuZWNlc3NhcnksIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgdGFyZ2V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDA6NDguNDAyMjgwMzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjE0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3Nob3d8YnRmX21vZGlmaWVyX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTM1MD1jb25zdCBjaGFyICpidGZfdHlwZV9zdHIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zNzgtICogdGhlaXIgb3duIGRhdGEgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHN0cnVjdCBidGZfc2hvdyBhbmQgY29uc3VsdCBpdFxcbmtlcm5lbC9icGYvYnRmLmM6Mzc5OiAqIGluIHRoZSBzaG93IGNhbGxiYWNrLiAgU2VlIGJ0Zl90eXBlX3Nob3coKSBiZWxvdy5cXG5rZXJuZWwvYnBmL2J0Zi5jLTM4MC0gKlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0xMDc3PXN0YXRpYyBjb25zdCBjaGFyICpidGZfc2hvd19uYW1lKHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMTExMy1cXHQgKiBTdGFydCB3aXRoIHR5cGVfaWQsIGFzIHdlIGhhdmUgcmVzb2x2ZWQgdGhlIHN0cnVjdCBidGZfdHlwZSAqXFxua2VybmVsL2JwZi9idGYuYzoxMTE0OlxcdCAqIHZpYSBidGZfbW9kaWZpZXJfc2hvdygpIHBhc3QgdGhlIHBhcmVudCB0eXBlZGVmIHRvIHRoZSBjaGlsZFxcbmtlcm5lbC9icGYvYnRmLmMtMTExNS1cXHQgKiBzdHJ1Y3QsIGludCBldGMgaXQgaXMgZGVmaW5lZCBhcy4gIEluIHN1Y2ggY2FzZXMsIHRoZSB0eXBlX2lkXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI4NDc9c3RhdGljIGludCBidGZfcHRyX3Jlc29sdmUoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjkwMy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MDQ6c3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbmtlcm5lbC9icGYvYnRmLmMtMjkwNS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI5NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIG1vZGlmaWVyX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjk3MS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6Mjk3MjpcXHQuc2hvdyA9IGJ0Zl9tb2RpZmllcl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtMjk3My19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz04MDI5PWludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNTctXFxua2VybmVsL2JwZi9idGYuYzo4MjU4OnN0YXRpYyB2b2lkIGJ0Zl90eXBlX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxcbmtlcm5lbC9icGYvYnRmLmMtODI1OS1cXHRcXHRcXHQgIHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODI3Nj1pbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODI4NC1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgyODU6XFx0YnRmX3R5cGVfc2hvdyhidGYsIHR5cGVfaWQsIG9iaiwgXFx1MDAyNnNzZXEpO1xcbmtlcm5lbC9icGYvYnRmLmMtODI4Ni1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODMyNj1pbnQgYnRmX3R5cGVfc25wcmludGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMzYtXFxua2VybmVsL2JwZi9idGYuYzo4MzM3OlxcdGJ0Zl90eXBlX3Nob3coYnRmLCB0eXBlX2lkLCBvYmosIChzdHJ1Y3QgYnRmX3Nob3cgKilcXHUwMDI2c3NucHJpbnRmKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgzMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQwOjQ4LjQ0ODg5ODE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzYyMDc5Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBhbmQgQlRGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGFuZCBCVEYgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCBhIGxpc3Qgb2YgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCB0aGluayBoYXNodGFibGVzLCBldGMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSB3aGF0J3MgYmVpbmcgZG9uZS4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHdoYXQgSSBuZWVkIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6MDAuMjEwOTc5NDUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDkwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0ZlxcXFwub3xoYXNodGFiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTowMC4yNTk0NzUxMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDczNjEzODE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIFN5c2NhbGwgYW5kIEJURiBDb25maWd1cmF0aW9uIElzc3VlcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYXMgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBCUEYgcHJvZ3JhbSBleGVjdXRpb24gdmlhIHN5c2NhbGxzLiBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbmQgY2hlY2tpbmcgYERFQlVHX0lORk9fQlRGYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBCVEYuIEknbSB0aGlua2luZyBwZXJoYXBzIHJlbGF0ZWQgY29uZmlncyBjYW4gc2hlZCBsaWdodCBvbiBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHdoZW4gaXQgY29tZXMgdG8gQlRGIGFuZCBzeXNjYWxscyByZWxhdGVkIHRvIEJQRi4gSSdtIGFzc3VtaW5nIHRoYXQgcHJvcGVyIGNvbmZpZ3VyYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6MzAuOTk1NjE3OTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTE2NjE0OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMfGNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWd8a2VybmVsL2JwZi9LY29uZmlnfGxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTozMS4xNTA3OTMwNjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Mzk2NzI0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQlBGX1NZU0NBTExgIE1hY3JvKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYEJQRl9TWVNDQUxMYCBtYWNybyBkZWZpbmVkP1wiIEl0J3MgYSBrZXkgcGllY2UgaW4gdGhpcyB3aG9sZSBCUEYgcHV6emxlLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgdGFzayBhdCBoYW5kICh3aGljaCBpcyBhc3N1bWVkIGZyb20gdGhlIGNvbnRleHQsIGFzIHRoZSBwcm9tcHQgbGFja3MgaXQpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhwYW5zaW9uLCBpdHMgYXJndW1lbnRzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBpbmZyYXN0cnVjdHVyZS4gSSdtIHRoaW5raW5nIG9mIHF1aWNrbHkgdXNpbmcgYSBncmVwIG9yIGFuIElERSdzIHNlYXJjaCBmdW5jdGlvbiB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBmaWxlLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gY2FsbHMgaW50ZXJmYWNlIHdpdGggZUJQRi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQxOjQwLjU0NzUyMDc4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDk4ODcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MTo0Mi42Nzg1MTY4MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4ODM0OTI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgREVCVUdfSU5GT19CVEZgIGluIEtjb25maWcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBsb29rIGF0IGBERUJVR19JTkZPX0JURmAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgYmVoYXZpbmcuIEkgc2hvdWxkIHRoaW5rIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc3VjaCBhcyBgREVCVUdfSU5GT2AsIGBERUJVR19JTkZPX0RXQVJGYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIEJURiBpbmZyYXN0cnVjdHVyZSBlbmFibGVtZW50LiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIGluIGhvdyB0aGlzIGlzIHNldCBvciB1c2VkLiBJIHdpbGwgcmV2aWV3IHRoZSBhc3NvY2lhdGVkIGhlbHAgdGV4dCBhbmQgcGVyaGFwcyBzZWFyY2ggdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjb25maWcgb3B0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgZWZmb3J0cy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBhYm91dCBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiBidWlsZCB0aW1lcywga2VybmVsIHNpemUsIGFuZCBydW50aW1lIHBlcmZvcm1hbmNlLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBvZiByZWxldmFudCBkZWZjb25maWdzIHdvdWxkIGFsc28gYmUgd2lzZS4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3Mgd2hldGhlciBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlIGlzIHRoZSByaWdodCBhcHByb2FjaCBmb3IgbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDE6NTMuNTYyMDExNjYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE1NTc4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQxOjU2LjY3NzU5NDg0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Nzc2MjU1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGxpYi9LY29uZmlnLmRlYnVnYC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHplcm8gaW4gb24gbGluZSAzOTguIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNldHRpbmcsIG9yIGEgcmVsYXRlZCBncm91cGluZywgdGVuZHMgdG8gYmUuIEkndmUgZ290IGEgZmVlbGluZyB0aGUgc29sdXRpb24gSSdtIHNlZWtpbmcgaXMgZ29pbmcgdG8gYmUgbmVhcmJ5LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MjowMy40NTM4NTQyMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5NTpcXHRcXHQgIHRvIGtub3cgYWJvdXQgdGhlIC5kd28gZmlsZXMgYW5kIGluY2x1ZGUgdGhlbS5cXG4gMzk2OlxcdFxcdCAgSW5jb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY2NhY2hlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfSU5GT19TUExJVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXFxuIDQwMTpcXHRcXHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXFxuIDQwMjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbiA0MDQ6XFx0XFx0IyBwYWhvbGUgdXNlcyBlbGZ1dGlscywgd2hpY2ggZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBIZXhhZ29uIHJlbG9jYXRpb25zXFxuIDQwNTpcXHRcXHRkZXBlbmRzIG9uICFIRVhBR09OXFxuIDQwNjpcXHRcXHRoZWxwXFxuIDQwNzpcXHRcXHQgIEdlbmVyYXRlIGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIERXQVJGIGRlYnVnIGluZm8uXFxuIDQwODpcXHRcXHQgIFR1cm5pbmcgdGhpcyBvbiByZXF1aXJlcyBwYWhvbGUgdjEuMjIgb3IgbGF0ZXIsIHdoaWNoIHdpbGwgY29udmVydFxcbiA0MDk6XFx0XFx0ICBEV0FSRiB0eXBlIGluZm8gaW50byBlcXVpdmFsZW50IGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvLlxcbiA0MTA6XFx0XFxuIDQxMTpcXHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXFxuIDQxMjpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjNcXG4gNDEzOlxcdFxcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcXG4gNDE0OlxcdFxcdGhlbHBcXG4gNDE1OlxcdFxcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxcbiA0MTY6XFx0XFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xcbiA0MTc6XFx0XFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxcbiA0MTg6XFx0XFxuIDQxOTpcXHRjb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcXG4gNDIwOlxcdFxcdGRlZl9ib29sIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyNFxcbiA0MjE6XFx0XFx0aGVscFxcbiA0MjI6XFx0XFx0ICBTdXBwb3J0IGZvciB0aGUgLS1sYW5nX2V4Y2x1ZGUgZmxhZyB3aGljaCBtYWtlcyBwYWhvbGUgZXhjbHVkZVxcbiA0MjM6XFx0XFx0ICBjb21waWxhdGlvbiB1bml0cyBmcm9tIHRoZSBzdXBwbGllZCBsYW5ndWFnZS4gVXNlZCBpbiBLYnVpbGQgdG9cXG4gNDI0OlxcdFxcdCAgb21pdCBSdXN0IENVcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDEuMjQgb2YgcGFob2xlLFxcbiA0MjU6XFx0XFx0ICBvdGhlcndpc2UgaXQgd291bGQgZW1pdCBtYWxmb3JtZWQga2VybmVsIGFuZCBtb2R1bGUgYmluYXJpZXMgd2hlblxcbiA0MjY6XFx0XFx0ICB1c2luZyBERUJVR19JTkZPX0JURl9NT0RVTEVTLlxcbiA0Mjc6XFx0XFxuIDQyODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbiA0Mjk6XFx0XFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MjowMy40NTQwNjEyOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NzgwNjIyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCVEYgRGlzcGxheSBhbmQgTWFwIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlRGIHNob3cgZnVuY3Rpb25zIGFuZCB0aGUgbWFwIGNyZWF0aW9uIGNoZWNrIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGRpdmUgaW4uIExldCdzIHNlZSwgaW4gYGtlcm5lbC9icGYvYnRmLmNgIHNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBicGZfc25wcmludGZfYnRmYCAod2hpY2ggSSBhc3N1bWUgaXMgYSBoZWxwZXIpLCBhbmQgYWxzbyBmdW5jdGlvbnMgbGlrZSBgbWFwX2NoZWNrX2J0ZmAgYW5kIGBodGFiX21hcF9jaGVja19idGZgIGFyZSBrZXkgcGxheWVycyBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhvc2UuIFJpZ2h0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgcGF0aHMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYW5kIGBicGZfc25wcmludGZfYnRmYCBhcmUgYWN0dWFsbHkgYmVpbmcgaW52b2tlZCwgYXMgd2VsbCBhcyB0aG9zZSBtYXAgY2hlY2sgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDI6MjkuMjMyMTI2NDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjgzOTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz0yOTI1PXN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMjkzMC1cXHQgKiBidGZfdHlwZV9pZF9yZXNvbHZlKCkgZGVyZWZlcmVuY2VzIGJ0Zi1cXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXFxua2VybmVsL2JwZi9idGYuYzoyOTMxOlxcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MzItXFx0ICogUmVzb2x2ZSB0aGUgdmFyJ3MgdHlwZSBkaXJlY3RseSBpbiB0aGF0IGNhc2UuXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMTcyPWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gX193ZWFrO1xcbmtlcm5lbC9icGYvY29yZS5jOjMxNzM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xcbmtlcm5lbC9icGYvY29yZS5jLTMxNzQtY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjE4LVxcdGNhc2UgQlBGX0ZVTkNfc25wcmludGZfYnRmOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIyMTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc25wcmludGZfYnRmX3Byb3RvO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMjAtXFx0Y2FzZSBCUEZfRlVOQ19zbnByaW50ZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDI6MjkuMzI4OTcyNDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzQwMzY2NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc25wcmludGZfYnRmYCBpbiBga2VybmVsL2JwZi9idGYuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJURiBpbmZvcm1hdGlvbiBpcyBiZWluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBicGZfc25wcmludGZfYnRmYCB3b3Jrcy4gVGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgY3JpdGljYWwgZm9yIHRoZSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBCVEYgZGF0YSwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5c2lzLCBhbmQgcG9zc2libHkgZXZlbiBkeW5hbWljIGluc3RydW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdHJhdmVyc2luZyB0aGUgQlRGIHR5cGUgaW5mb3JtYXRpb24sIGRlY29kaW5nIHRoZSB2YXJpb3VzIHR5cGUgZGVzY3JpcHRvcnMsIGFuZCBnZW5lcmF0aW5nIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHN1aXRhYmxlIGZvciBsb2dnaW5nIG9yIHVzZXIgZGlzcGxheS4gVGhlIGZvcm1hdHRpbmcgbGlrZWx5IGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgQlRGIGVudHJ5IGl0J3MgZW5jb3VudGVyaW5nLCBhbmQgSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFuYWdlcyByZWN1cnNpdmUgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBjb21wbGV4IGRhdGEgdHlwZXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFzIHdlbGwuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIGZvcm1hdCBzcGVjaWZpZXJzIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXQsIGFuZCBob3BlZnVsbHksIEknbGwgc2VlIHNvbWUgZ29vZCBleGFtcGxlcyBvZiBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscy4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDM6MDIuMDY5MzQxNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA3NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzE3Mj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9uc19jdXJyZW50X3BpZF90Z2lkX3Byb3RvIF9fd2VhaztcXG5rZXJuZWwvYnBmL2NvcmUuYzozMTczOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfYnRmX3Byb3RvIF9fd2VhaztcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMTc0LWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gX193ZWFrO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIxOC1cXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmX2J0ZjpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMjE5OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NucHJpbnRmX2J0Zl9wcm90bztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMjIwLVxcdGNhc2UgQlBGX0ZVTkNfc25wcmludGY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjAyLjE2ODQyODAwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTUzNzczMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfc25wcmludGZfYnRmX3Byb3RvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJwZl9zbnByaW50Zl9idGZfcHJvdG9gIGlzIHJlYWxseSBkb2luZy4gR2l2ZW4gaXRzIG5hbWUsIGl0J3MgcHJldHR5IGxpa2VseSBpdCdzIHJlbGF0ZWQgdG8gcHJpbnRpbmcgb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBkYXRhLCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0byBwcm90b3R5cGVzIG9yIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIE15IGltbWVkaWF0ZSBtb3ZlIGlzIHRvIHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIEtlcm5lbCBjb2RlIGJlaW5nIGtlcm5lbCBjb2RlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZmlyc3QgaXMgd2l0aGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBvciBhIGZpbGUgc2ltaWxhcmx5IG5hbWVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoxMS4zMjIyMDUwOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTAwMjQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc25wcmludGZfYnRmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yOTMwLVxcdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcXG5rZXJuZWwvYnBmL2J0Zi5jOjI5MzE6XFx0ICogZm9yIGEgYmFzZSBCVEYgKGUuZy4gdGhlIHZtbGludXggQlRGIHRoYXQgYnBmX3NucHJpbnRmX2J0ZigpIHVzZXMpLlxcbmtlcm5lbC9icGYvYnRmLmMtMjkzMi1cXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMxNzI9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byBfX3dlYWs7XFxua2VybmVsL2JwZi9jb3JlLmM6MzE3Mzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byBfX3dlYWs7XFxua2VybmVsL2JwZi9jb3JlLmMtMzE3NC1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfYnRmX3Byb3RvIF9fd2VhaztcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIyMTgtXFx0Y2FzZSBCUEZfRlVOQ19zbnByaW50Zl9idGY6XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjIxOTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zbnByaW50Zl9idGZfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjIyMC1cXHRjYXNlIEJQRl9GVU5DX3NucHJpbnRmOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwMDY9c3RhdGljIGludCBicGZfYnRmX3ByaW50Zl9wcmVwYXJlKHN0cnVjdCBidGZfcHRyICpwdHIsIHUzMiBidGZfcHRyX3NpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTAzNS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTAzNjpCUEZfQ0FMTF81KGJwZl9zbnByaW50Zl9idGYsIGNoYXIgKiwgc3RyLCB1MzIsIHN0cl9zaXplLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwMzctXFx0ICAgdTMyLCBidGZfcHRyX3NpemUsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA1MC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA1MjpcXHQuZnVuY1xcdFxcdD0gYnBmX3NucHJpbnRmX2J0ZixcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA1My1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoxMS40MzMyMTMyMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY0MjgyNzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlRGLVJlbGF0ZWQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gQlRGIChCUEYgVHlwZSBGb3JtYXQpLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSB0d28ga2V5IGFyZWFzOiBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuXG5cbkluIGBidGYuY2AsIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgZGlzcGxheSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AgYXJlIHRoZSB0YXJnZXRzLiBUaGVzZSBhcmUgKnN0YXRpYyogY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGV5J3JlIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhlIGltcG9ydGFudCB0aGluZyBub3cgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSAqdXNlZCouIExvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHNob3cgdXAgaW4gcGxhY2VzIHRoYXQgZm9ybWF0IGFuZCBvdXRwdXQgQlRGIGluZm9ybWF0aW9uOiBgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3NgLCBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGFuZCwgY3J1Y2lhbGx5LCBmdW5jdGlvbnMgY2FsbGVkIHZpYSBCUEYgcHJvZ3JhbXMgbGlrZSBgYnBmX3NucHJpbnRmX2J0ZmAgYW5kIGBicGZfc2VxX3ByaW50Zl9idGZgLiBBZGRpdGlvbmFsbHksIHRoZSBtYXAgZHVtcCBmdW5jdGlvbnMgaW4gYnBmZnMsIHN1Y2ggYXMgYG1hcF9zZXFfc2hvd2AsIGBicGZfbWFwX3NlcV9zaG93YCwgYW5kIGBicGZfb2JqX3BpbmAsIGFyZSBhbHNvIGludm9sdmVkLiBTbywgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIHJlZmluZSB0aGUgd2F5IEJURiBkYXRhIGlzIGZvcm1hdHRlZCBhbmQgcHJlc2VudGVkIHRvIHRoZSB1c2VyLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBzZXF1ZW5jZSBmaWxlcyBhbmQgcG90ZW50aWFsbHkgdmlhIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLlxuXG5OZXh0LCBpbiBgaGFzaHRhYi5jYCwgdGhlIGNoYW5nZXMgYWZmZWN0IGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAsIHdoaWNoLCBhZ2FpbiwgYXJlIHN0YXRpYy4gVGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byAqaGFzaCB0YWJsZSogbWFwcyBhbmQgQlRGLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIG1hcHMgd2hlcmUgQlRGIGlzIHJlbGV2YW50LiBMb29raW5nIGF0IHRoZSBicm9hZGVyIGNvZGUsIGBtYXBfY3JlYXRlYCwgYGJwZl9tYXBfbmV3X2ZkYCwgYW5kIGBicGZfbWFwX2FsbG9jX2lkYCBpbiBgc3lzY2FsbC5jYCBhbGwgc2VlbSB0byBiZSBlbnRyeSBwb2ludHMgY2FsbGVkIGZyb20gdGhlIGBzeXNfYnBmYCBzeXN0ZW0gY2FsbCB3aGVuIGBCUEZfTUFQX0NSRUFURWAgaXMgaW52b2tlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGNoZWNraW5nIG9yIHZhbGlkYXRpbmcgQlRGIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgaGFzaCB0YWJsZS1iYXNlZCBCUEYgbWFwcy4gTm93IEkgd2FudCB0byBxdWlja2x5IGludmVzdGlnYXRlIHdoZXJlIGBodGFiX21hcF9jaGVja19idGZgIGlzIGJlaW5nIGNhbGxlZCB0byBzZWUgdGhlIHdob2xlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjIxLjA3NjA0NDU1NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NDY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHRhYl9tYXBfY2hlY2tfYnRmfHJodGFiX21hcF9jaGVja19idGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz01MDQ9c3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjUyODpzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTI5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIzNjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzUtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM3NjpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzc3LVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM4Mz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzOTgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjM5OTpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDAwLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU2ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1NzgtXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjU3OTpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTgwLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjU4Nj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTk5LVxcdC5tYXBfZm9yX2VhY2hfY2FsbGJhY2sgPSBicGZfZm9yX2VhY2hfaGFzaF9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2MDA6XFx0Lm1hcF9jaGVja19idGYgPSBodGFiX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYwMS1cXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwOTY9c3RhdGljIGludCByaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTExOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4OlxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI5LVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjIxLjE2OTk5NTg2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODIyNjYwMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYC5tYXBfY2hlY2tfYnRmYCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgLm1hcF9jaGVja19idGZgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmFjZSBkb3duIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCouIEl0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgdmVyaWZpY2F0aW9uIGlzIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwgY29udGV4dC4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGggaGVyZS4gVGhlIGdvYWwgaXMgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgbWFwX2NoZWNrX2J0ZmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHZhbGlkYXRpb24gaW5mcmFzdHJ1Y3R1cmUsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSB1c2VzLCBvciB1bnVzdWFsIGNvZGUgZmxvd3MgdGhhdCByZXF1aXJlIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgYWxsIGNhbGwgc2l0ZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIG9yIGNvbnRleHQtZGVwZW5kZW50IGNhbGxzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoYXQgZnVuY3Rpb27igJlzIGRlc2lnbiBhZmZlY3RzIHBlcmZvcm1hbmNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBvciBkZXNpZ24gaW1wcm92ZW1lbnRzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0MzoyOS45OTI2NTg5NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjIwMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9jaGVja19idGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDA2PXN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjQwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1My1cXHQubWFwX2RlbGV0ZV9lbGVtID0gYXJlbmFfbWFwX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XFx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTUtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTU1Nz1zdGF0aWMgdm9pZCBwZXJjcHVfYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU3OS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTgwOnN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODczLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzQ6XFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzUtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTgtXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gcGVyY3B1X2FycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4OTk6XFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDAtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTM4Mj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyZl9ldmVudF9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTEzOTItXFx0Lm1hcF9yZWxlYXNlID0gcGVyZl9ldmVudF9mZF9hcnJheV9yZWxlYXNlLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxMzkzOlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTM5NC1cXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTQxOD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dyb3VwX2FycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQyNy1cXHQubWFwX2ZkX3B1dF9wdHIgPSBjZ3JvdXBfZmRfYXJyYXlfcHV0X3B0cixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyODpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MjktXFx0Lm1hcF9tZW1fdXNhZ2UgPSBhcnJheV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE3OlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxOC1cXHQubWFwX21lbV91c2FnZSA9IGFycmF5X21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTE3NT1zdGF0aWMgbG9uZyBibG9vbV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODEtXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxODI6c3RhdGljIGludCBibG9vbV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xODMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9MjAzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBibG9vbV9maWx0ZXJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMjE0LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBibG9vbV9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoyMTU6XFx0Lm1hcF9jaGVja19idGYgPSBibG9vbV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMjE2LVxcdC5tYXBfbWVtX3VzYWdlID0gYmxvb21fbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE2MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dycF9zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNjgtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTY5OlxcdC5tYXBfY2hlY2tfYnRmID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNzAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jPTE5OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaW5vZGVfc3RvcmFnZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTIwNi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gYnBmX2ZkX2lub2RlX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jOjIwNzpcXHQubWFwX2NoZWNrX2J0ZiA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9icGZfaW5vZGVfc3RvcmFnZS5jLTIwOC1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9MTM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBpbnNuX2FycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTQzLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBpbnNuX2FycmF5X2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxNDQ6XFx0Lm1hcF9jaGVja19idGYgPSBpbnNuX2FycmF5X2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTQ1LVxcdC5tYXBfbWVtX3VzYWdlID0gaW5zbl9hcnJheV9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzAyPWludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE3LVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3MTg6aW50IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYz0yMjM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRhc2tfc3RvcmFnZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfdGFza19zdG9yYWdlLmMtMjMxLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfcGlkX3Rhc2tfc3RvcmFnZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl90YXNrX3N0b3JhZ2UuYzoyMzI6XFx0Lm1hcF9jaGVja19idGYgPSBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYnBmX3Rhc2tfc3RvcmFnZS5jLTIzMy1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTcwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY3B1X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTcxNi1cXHQubWFwX2dldF9uZXh0X2tleVxcdD0gY3B1X21hcF9nZXRfbmV4dF9rZXksXFxua2VybmVsL2JwZi9jcHVtYXAuYzo3MTc6XFx0Lm1hcF9jaGVja19idGZcXHRcXHQ9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9jcHVtYXAuYy03MTgtXFx0Lm1hcF9tZW1fdXNhZ2VcXHRcXHQ9IGNwdV9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMDg3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBkZXZfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTA5NS1cXHQubWFwX2RlbGV0ZV9lbGVtID0gZGV2X21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjEwOTY6XFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTA5Ny1cXHQubWFwX21lbV91c2FnZSA9IGRldl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMTAyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBkZXZfbWFwX2hhc2hfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMTEwLVxcdC5tYXBfZGVsZXRlX2VsZW0gPSBkZXZfbWFwX2hhc2hfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9kZXZtYXAuYzoxMTExOlxcdC5tYXBfY2hlY2tfYnRmID0gbWFwX2NoZWNrX25vX2J0ZixcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExMTItXFx0Lm1hcF9tZW1fdXNhZ2UgPSBkZXZfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTUwND1zdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NTI4OnN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01MjktXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjM2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM3NS1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzc2OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzNzctXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMzgzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM5OC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzk5OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MDAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTY0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjU3OC1cXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNTc5OlxcdC5tYXBfY2hlY2tfYnRmID0gaHRhYl9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1ODAtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBodGFiX21hcF9tZW1fdXNhZ2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNTg2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9wZXJjcHVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1OTktXFx0Lm1hcF9mb3JfZWFjaF9jYWxsYmFjayA9IGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYwMDpcXHQubWFwX2NoZWNrX2J0ZiA9IGh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjAxLVxcdC5tYXBfbWVtX3VzYWdlID0gaHRhYl9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzQyLVxcdC5tYXBfZ2VuX2xvb2t1cCA9IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc0MzpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc0NC1cXHQubWFwX21lbV91c2FnZSA9IGh0YWJfbWFwX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwOTY9c3RhdGljIGludCByaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTExOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzExMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI3LVxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI4OlxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI5LVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz00NjE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NjctXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2ODpcXHQubWFwX2NoZWNrX2J0ZiA9IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NjktXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gY2dyb3VwX3N0b3JhZ2Vfc2VxX3Nob3dfZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODUtXFx0Lm1hcF9kZWxldGVfYmF0Y2ggPSBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4NjpcXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODctXFx0Lm1hcF9tZW1fdXNhZ2UgPSB0cmllX21lbV91c2FnZSxcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0xMTQxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzdGFja190cmFjZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTExNDktXFx0Lm1hcF9kZWxldGVfZWxlbSA9IHN0YWNrX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTE1MDpcXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTExNTEtXFx0Lm1hcF9tZW1fdXNhZ2UgPSBzdGFja19tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfbWFwX29mZmxvYWRfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE3LVxcdC5tYXBfZnJlZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfZnJlZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTg6XFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExOS1cXHQubWFwX21lbV91c2FnZSA9IGJwZl9tYXBfb2ZmbG9hZF9tYXBfbWVtX3VzYWdlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0Nz1pbnQgbWFwX2NoZWNrX25vX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI1NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjU1OnN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjU2LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfa2V5X2lkLCB1MzIgYnRmX3ZhbHVlX2lkKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI2OC1cXHRcXHRrZXlfdHlwZSA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgMCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI2OTpcXHRcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfY2hlY2tfYnRmKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNzAtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzY3LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzNjg6XFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfY2hlY2tfYnRmKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTM2OTpcXHRcXHRyZXQgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2NoZWNrX2J0ZihtYXAsIGJ0Ziwga2V5X3R5cGUsIHZhbHVlX3R5cGUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzNzAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTgxLVxcdFxcdGlmIChhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1ODI6XFx0XFx0XFx0ZXJyID0gbWFwX2NoZWNrX2J0ZihtYXAsIHRva2VuLCBidGYsIGF0dHItXFx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTgzLVxcdFxcdFxcdFxcdFxcdCAgICBhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQzOjMwLjA3Nzg4MzI4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAxNzYzNjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggdGFyZ2V0cyB0d28ga2V5IGFyZWFzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbTogYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFkZHJlc3NlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJURiAoQmVya2VsZXkgUGFja2V0IEZpbHRlciBUeXBlIEZvcm1hdCkgaGFuZGxpbmcgYW5kIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgZm9yIHZvaWQga2V5IHR5cGVzIGluIGhhc2ggdGFibGVzLlxuXG5GaXJzdCwgdGhlIGBidGYuY2AgY2hhbmdlcyBhcmUgZml4aW5nIHBvdGVudGlhbCBjcmFzaGVzIGR1cmluZyBCVEYgdHlwZSByZXNvbHV0aW9uIGFuZCBkdW1waW5nLiBXZSdyZSBkZWFsaW5nIHdpdGggZWRnZSBjYXNlcyDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSB2b2lkIHR5cGUgb3Igd2hlbiBoYW5kbGluZyBgQlRGX0tJTkRfVkFSYCB0eXBlcyBpbiBhIGJhc2UgQlRGIHN0cnVjdHVyZSB0aGF0IGxhY2tzIGByZXNvbHZlZF9pZHNgLiBUaGUgYGhhc2h0YWIuY2AgY2hhbmdlIHJlamVjdHMgdm9pZCBrZXkgdHlwZXMgZm9yIEJQRiBtYXBzLCBwcmV2ZW50aW5nIGxhdGVyIGlzc3VlcyBkdXJpbmcgYnBmZnMgZHVtcHMuXG5cbk5vdywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gRm9sbG93aW5nIHRoZSBndWlkZWxpbmVzLCB0aGlzIGRlZmluaXRlbHkgKmlzbid0KiBkb2N1bWVudGF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjb2RlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIEJQRiBsb2dpYyB0aGF0J3MgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgQlBGIHByb2dyYW1zL2JwZmZzLiBUaGUgQlBGIHN1YnN5c3RlbSBpcyBhIGtub3duIHRhcmdldCBmb3IgZXhwbG9pdGF0aW9uLCBhbmQgdGhlc2UgcGF0Y2hlcyBhcmUgZml4aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggdm9pZCB0eXBlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBtb2RpZmllZCBjb2RlIGFuZCB0aGUgcG90ZW50aWFsIGZvciB0aGVzZSB0eXBlcyBvZiBidWdzLCBJJ20gY29uY2x1ZGluZyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgd2UgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciByZXByb2R1Y2liaWxpdHkuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgbmVjZXNzYXJ5LiBCdXQgQlBGIGFuZCBCVEYgYXJlIGRlZXBseSBpbnRlcnR3aW5lZCwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc3VidGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9mIGBCUEZfU1lTQ0FMTGAgb3IgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCByZXByb2R1Y2luZyB0aGUgcmVwb3J0ZWQgaXNzdWVzLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgYSBwcm9wZXJseSBjb25maWd1cmVkIGZ1enppbmcgZW52aXJvbm1lbnQgdGhhdCBmdWxseSBleHBvc2VzIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NDowNS4wOTU1MjM5OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTEwNDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NDowNS4xNjY0Mzg5MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwOTE1NzQ2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJQRiBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCUEYgY29tcG9uZW50cyBhcmUgYnVpbHQuIEZpcnN0LCBJJ2xsIGRpdmUgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc2VlIGhvdyBga2VybmVsL2JwZi9idGYuY2AgYW5kIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYXJlIGNvbXBpbGVkLiBJJ2xsIG9wZW4gdXAgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNoZWNrLlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IExpbmUgMTEsIGl0J3MgcHJldHR5IGNsZWFyOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8uLi5gIFNvLCBgaGFzaHRhYi5vYCBpcyBvbmx5IGluY2x1ZGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBBbmQganVzdCBiZWxvdyB0aGF0LCBvbiBsaW5lIDE4LCBpdCBzZWVtcyB0aGUgc2FtZSBydWxlIGlzIGFwcGxpZWQgdG8gYGJ0Zi5vYCAtLSBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYuby4uLmAuIEdvb2QsIHRoYXQgbWFrZXMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVhbGx5IGNsZWFyLlxuXG5Ob3csIGZvciB0aGF0IGBicGZfc25wcmludGZfYnRmYCBmdW5jdGlvbuKApiB3aGVyZSdzIHRoYXQgZGVmaW5lZD8gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgaXQgbWlnaHQgbGl2ZSBpbiB0aGUgdHJhY2luZyBzdWJzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agb3IgcGVyaGFwcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeS4gTGV0J3MgZ2V0IHRvIHRoYXQgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6MjIuMjU4NzYzODY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyMjUyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGU9NTQ9S0NPVl9JTlNUUlVNRU5UX3RyYWNlX2lycXNvZmYubyA6PSBuXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTctXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgKz0gdHJhY2VfZXZlbnRzX3VzZXIub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICs9IGJwZl90cmFjZS5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgKz0gdHJhY2Vfa3Byb2JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6MjIuMzc2OTk1MjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTUwMTExNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIEV2ZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQlBGX0VWRU5UU2AgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkLXRpbWUgaW5jbHVzaW9uIGFuZCBzZXR0aW5ncyBvZiBmZWF0dXJlcyByZWxhdGVkIHRvIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgKEJQRikgZXZlbnRzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjM1LjUyNzExMDk2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjMyOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjM1LjY0MjM0OTA0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjMzMTkwNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYEJQRl9FVkVOVFNgIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBzcGVjaWZpY2FsbHkgcmVtZW1iZXIgc2VlaW5nIGl0IHdpdGhpbiB0aGUgdHJhY2UgZGlyZWN0b3J5LiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIGxvb2sgYXJvdW5kIGxpbmUgODUzIGluIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhhdCBsb2NhdGlvbiBpcyByZWNlbnQgZW5vdWdoLCBhbmQgSSBjYW4gcXVpY2tseSBnZXQgYW4gaWRlYSBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NDcuOTc0MjU3NzU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXFxuIDg1MTpcXHRcXHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cXG4gODUyOlxcdFxcbiA4NTM6XFx0Y29uZmlnIEJQRl9FVkVOVFNcXG4gODU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gODU1OlxcdFxcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgUEVSRl9FVkVOVFNcXG4gODU2OlxcdFxcdGJvb2xcXG4gODU3OlxcdFxcdGRlZmF1bHQgeVxcbiA4NTg6XFx0XFx0aGVscFxcbiA4NTk6XFx0XFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcXG4gODYwOlxcdFxcdCAgdHJhY2Vwb2ludCBldmVudHMuXFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xcbiA4NjM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgUFJPQkVfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZWZfYm9vbCBuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuIDg2OTpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NDcuOTc0MzQ1MDk1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTkwMzQ5MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgRm9jdXM6IEJQRiBCVEYgRnVuY3Rpb25zKipcblxuT2theSwgdGltZSB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZnVuY3Rpb25zIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIGludGVyZXN0aW5nIGJ1Z3MgYW5kIHRoYXQgYXJlICphY3R1YWxseSogYWNjZXNzaWJsZS4gTGV0J3Mgc3RhcnQgd2l0aCBgRm9jdXNTeW1ib2xzYC4gUmVtZW1iZXIgdGhlIGtleSBndWlkZWxpbmVzOiBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGNydWNpYWwgZm9yIGZ1enppbmcuIEF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBOb24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgYXJlIHRoZSBnb2xkIHN0YW5kYXJkLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRob3NlIGdldCBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIsIGFuZCBkb24ndCBwcm92aWRlIGEgdW5pcXVlIHN5bWJvbCB0byB0YXJnZXQgYW55d2F5LlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQlRGIHNob3cgYW5kIG1hcCBjcmVhdGlvbiBwYXRocy4gSSBrbm93IHRoZXJlJ3MgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVuaW5nIGluIGBrZXJuZWwvYnBmL2J0Zi5jYC4gTGV0IG1lIHRha2UgYSBsb29rOlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSB3aGV0aGVyIHRoZXNlIGFyZSBhcHByb3ByaWF0ZS5cbkkgbmVlZCB0byBjaGVjaywgYW5kIEkgd2lsbCwgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMsIGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX2lkX3Jlc29sdmVgLCBgYnRmX3R5cGVfc2tpcF9tb2RpZmllcnNgLCBhbmQgYGJ0Zl9kZl9zaG93YCBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQuIEkgdGhpbmsgYGJ0Zl9kZl9zaG93YCAqbWlnaHQqIGJlIHN0YXRpYywgc28gSSB3aWxsIGNoZWNrIHRoYXQgb25lIHNwZWNpZmljYWxseS5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgYWRkIHRvIHRoZSBsaXN0IHRoaW5ncyBsaWtlIGBicGZfc25wcmludGZfYnRmYCwgYG1hcF9jaGVja19idGZgLCBgaHRhYl9tYXBfY2hlY2tfYnRmYCDigJMgdGhvc2UgYXJlIGFsbCBrZXkgYXJlYXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBnb29kLCB0YXJnZXRlZCBzZXQgb2YgZnVuY3Rpb25zIGZvciB0aGlzIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ0OjU5LjU2NDY5NjEyMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTk3MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3NucHJpbnRmX3Nob3d8YnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3N8YnRmX2RmX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yMjY5LVxcbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXFx0XFx0XFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTktXFx0aWYgKCFidGZfdHlwZV9vcHModCkpXFxua2VybmVsL2JwZi9idGYuYzoyOTIwOlxcdFxcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjMwMjI6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz00ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmdW5jX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDg1MS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjUxNDE6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy01MjM5LVxcdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlxcdC5zaG93ID0gYnRmX2RmX3Nob3csXFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgyNzA9X19wcmludGYoMiwgMCkgc3RhdGljIHZvaWQgYnRmX3NlcV9zaG93KHN0cnVjdCBidGZfc2hvdyAqc2hvdywgY29uc3QgY2hhciAqZm10LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04Mjc1LVxcbmtlcm5lbC9icGYvYnRmLmM6ODI3NjppbnQgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTgyNzctXFx0XFx0XFx0ICAgIHZvaWQgKm9iaiwgc3RydWN0IHNlcV9maWxlICptLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgyOTA9dm9pZCBidGZfdHlwZV9zZXFfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLCB2b2lkICpvYmosXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTgyOTIte1xcbmtlcm5lbC9icGYvYnRmLmM6ODI5MzpcXHQodm9pZCkgYnRmX3R5cGVfc2VxX3Nob3dfZmxhZ3MoYnRmLCB0eXBlX2lkLCBvYmosIG0sXFxua2VybmVsL2JwZi9idGYuYy04Mjk0LVxcdFxcdFxcdFxcdCAgICAgICBCVEZfU0hPV19OT05BTUUgfCBCVEZfU0hPV19DT01QQUNUIHxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODMwND1fX3ByaW50ZigyLCAwKSBzdGF0aWMgdm9pZCBidGZfc25wcmludGZfc2hvdyhzdHJ1Y3QgYnRmX3Nob3cgKnNob3csIGNvbnN0IGNoYXIgKmZtdCxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODMyNS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgzMjY6aW50IGJ0Zl90eXBlX3NucHJpbnRmX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdm9pZCAqb2JqLFxcbmtlcm5lbC9icGYvYnRmLmMtODMyNy1cXHRcXHRcXHQgICBjaGFyICpidWYsIGludCBsZW4sIHU2NCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDQ6NTkuNjcwNzAwMDk5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NjA1NDExNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBCVEYgVHlwZSBSZXNvbHV0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBCVEYgdHlwZSBJRHMgYXJlIGFjdHVhbGx5IHJlc29sdmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGF0IHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0YXJnZXRzIGFyZSB0aGUgZGVjbGFyYXRpb25zIGZvciBgYnRmX3R5cGVfaWRfcmVzb2x2ZWAgYW5kIGBidGZfdHlwZV9za2lwX21vZGlmaWVyc2AuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGUgd29ya2hvcnNlcyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIGZpZ3VyaW5nIG91dCB3aGF0IGEgQlRGIHR5cGUgSUQgKnJlYWxseSogcG9pbnRzIHRvLCBhbmQgcG90ZW50aWFsbHkgY2xlYW5pbmcgdXAgYW55IGV4dHJhbmVvdXMgbW9kaWZpZXJzIHRoYXQgbWlnaHQgYmUgaGFuZ2luZyBhcm91bmQuIEdvdHRhIHVuZGVyc3RhbmQgdGhlaXIgc2lnbmF0dXJlcywgdGhlaXIgaW50ZXJhY3Rpb25zLCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCB0eXBlIHJlc29sdXRpb24gZmxvdy4gS25vd2luZyB0aGUgKndoYXQqIGFuZCB0aGUgKmhvdyogb2YgdGhlc2UgdHdvIHdpbGwgbGF5IHRoZSBncm91bmR3b3JrIGZvciB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGUgYnJvYWRlciBzY2hlbWUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ1OjE1LjI3NjExNDkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNDkxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9idGYuYz03MjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX2ZpbmRfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTcyMy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcyNDpjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2J0Zi5jLTcyNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGlkLCB1MzIgKnJlc19pZClcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NzQwPWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfcmVzb2x2ZV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NDQtXFxua2VybmVsL2JwZi9idGYuYzo3NDU6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgaWQsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzQ2LVxcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NDgtXFxua2VybmVsL2JwZi9idGYuYzo3NDk6XFx0cmV0dXJuIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgcmVzX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc1MC19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTEwMTY9Ym9vbCBidGZfbWVtYmVyX2lzX3JlZ19pbnQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTItXFxua2VybmVsL2JwZi9idGYuYzoxMDUzOi8qIFNpbWlsYXIgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSBidXQgZG9lcyBub3Qgc2tpcCB0eXBlZGVmcy4gKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTEwNTQtc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfc2tpcF9xdWFsaWZpZXJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTEtXFx0ZWxzZVxcbmtlcm5lbC9icGYvYnRmLmM6MjkxMjpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTMtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTI5MjU9c3RhdGljIHZvaWQgYnRmX3Zhcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yOTM2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2J0Zi5jOjI5Mzc6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnR5cGVfaWQpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkzOC1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MzE4MT1zdGF0aWMgdm9pZCBfX2J0Zl9hcnJheV9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zMTkxLVxcdGVsZW1fdHlwZV9pZCA9IGFycmF5LVxcdTAwM2V0eXBlO1xcbmtlcm5lbC9icGYvYnRmLmM6MzE5MjpcXHRlbGVtX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGVsZW1fdHlwZV9pZCwgTlVMTCk7XFxua2VybmVsL2JwZi9idGYuYy0zMTkzLVxcdGlmIChlbGVtX3R5cGUgXFx1MDAyNlxcdTAwMjYgYnRmX3R5cGVfaGFzX3NpemUoZWxlbV90eXBlKSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjYwND11MzIgYnRmX2N0eF9hcmdfaWR4KHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjE3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9hcmdzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2J0Zi5jOjY2MTg6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MTktXFx0XFx0b2Zmc2V0ICs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXFx1MDAzZXNpemUsIDgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NjIzLVxcbmtlcm5lbC9icGYvYnRmLmM6NjYyNDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTY2MjUtXFx0b2Zmc2V0ICs9IGJ0Zl90eXBlX2lzX3B0cih0KSA/IDggOiByb3VuZHVwKHQtXFx1MDAzZXNpemUsIDgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODU4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTY5MzItXFxua2VybmVsL2JwZi9idGYuYzo2OTMzOlxcdFxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNjkzNC1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NtYWxsX2ludCh0KSkge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz03MTIyPXN0YXRpYyBpbnQgYnRmX3N0cnVjdF93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzEzNC1cXHRpZiAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXFxua2VybmVsL2JwZi9idGYuYzo3MTM1OlxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEzNi1cXHR0bmFtZSA9IF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTYzLVxcdFxcdG1lbWJlciA9IGJ0Zl90eXBlX21lbWJlcih0KSArIHZsZW4gLSAxO1xcbmtlcm5lbC9icGYvYnRmLmM6NzE2NDpcXHRcXHRtdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNzE2NS1cXHRcXHRcXHRcXHRcXHRcXHROVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzE3Ny1cXHRcXHQvKiBhbGxvdyBzdHJ1Y3R1cmUgYW5kIGludGVnZXIgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxNzg6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXlfZWxlbS1cXHUwMDNldHlwZSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTcxNzktXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz03NjQ5PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfdHlwZV9tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03Njg2LVxcbmtlcm5lbC9icGYvYnRmLmM6NzY4NzpcXHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIHQxLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjc2ODg6XFx0dDIgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYyLCB0Mi1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi9idGYuYy03Njg5LVxcdGlmICh0MS1cXHUwMDNlaW5mbyAhPSB0Mi1cXHUwMDNlaW5mbykge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy03NzAzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYXJnczE7IGkrKykge1xcbmtlcm5lbC9icGYvYnRmLmM6NzcwNDpcXHRcXHR0MSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjEsIGFyZ3MxW2ldLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmM6NzcwNTpcXHRcXHR0MiA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjIsIGFyZ3MyW2ldLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzcwNi1cXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzczMi1cXHRcXHR9XFxua2VybmVsL2JwZi9idGYuYzo3NzMzOlxcdFxcdHQxID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmMSwgdDEtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmM6NzczNDpcXHRcXHR0MiA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZjIsIHQyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc3MzUtXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zdHJ1Y3QodDEpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NDY9c3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNzk1Ny1cXHQvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqL1xcbmtlcm5lbC9icGYvYnRmLmM6Nzk1ODpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTktXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5ODE9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTkwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5OTItXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTgwMjk9aW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODE4MS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjgxODI6XFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvYnRmLmMtODE4My1cXHRcXHRcXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgfHwgYnRmX3R5cGVfaXNfcHJpbWl0aXZlKHJlZl90KSkge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy04MjIwLVxcbmtlcm5lbC9icGYvYnRmLmM6ODIyMTpcXHRcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTgyMjItXFx0XFx0XFx0cmVmX3QgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgdCwgXFx1MDAyNm1lbV9zaXplKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODc4MT1pbnQgYnRmX2NoZWNrX2l0ZXJfYXJnKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLCBpbnQgYXJnX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODc5MS1cXHRhcmcgPSBcXHUwMDI2YnRmX3BhcmFtcyhmdW5jKVthcmdfaWR4XTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg3OTI6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTMtXFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXFxua2VybmVsL2JwZi9idGYuYy04Nzk0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYnRmLmM6ODc5NTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2YnRmX2lkKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg3OTYtXFx0aWYgKCF0IHx8ICFfX2J0Zl90eXBlX2lzX3N0cnVjdCh0KSlcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODgwNj1zdGF0aWMgaW50IGJ0Zl9jaGVja19pdGVyX2tmdW5jcyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODg1Ni1cXHRcXHQvKiBicGZfaXRlcl9cXHUwMDNjdHlwZVxcdTAwM2VfbmV4dCgpIHNob3VsZCByZXR1cm4gcG9pbnRlciAqL1xcbmtlcm5lbC9icGYvYnRmLmM6ODg1NzpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBmdW5jLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4NTgtXFx0XFx0aWYgKCF0IHx8ICFidGZfdHlwZV9pc19wdHIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk4MjI9Ym9vbCBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05ODU5LVxcbmtlcm5lbC9icGYvYnRmLmM6OTg2MDpcXHRcXHRidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIG10eXBlLVxcdTAwM2V0eXBlLCBcXHUwMDI2aWQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTg2MS1cXHRcXHQvKiBJZiB3ZSBtYXRjaCBvbiBib3RoIHR5cGUgYW5kIG5hbWUsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHRydXN0ZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTEzMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTE4NS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjE4NjpcXHRcXHRyZXRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0xODctXFx0XFx0c2NhbGFyX3JldHVybiA9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN1YnByb2dfcmV0X3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDM6XFx0cmV0dXJuIGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgZnVuY19wcm90by1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwNC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4Mzc9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNjktXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTcwOlxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLnJldF9idGYsIG1ldGEucmV0X2J0Zl9pZCwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTcxLVxcdFxcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHQpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MDg9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQxMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MTM6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MTQtXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0MjA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0MjU6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MjYtXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1Mzg9c3RhdGljIGJvb2wgX19pc19rZnVuY19wdHJfYXJnX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTQzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0NDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTU0NS1cXHRpZiAoIXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NDgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU0OTpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2cmVzX2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NTAtXFx0aWYgKCF0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjUwPWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY2NDpcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjUtXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY3Ny1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjc4OlxcdFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcnJheS1cXHUwMDNldHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjc5LVxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTk2NT1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTcyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTk3MzpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cXHUwMDNlYnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTc0LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTkzLVxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5OTQ6XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVxcdTAwM2VidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTk5NS1cXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cXHUwMDNlYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMTM2PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTg4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjE4OTpcXHRyZWdfcmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhyZWdfYnRmLCByZWdfcmVmX2lkLCBcXHUwMDI2cmVnX3JlZl9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTkwLVxcdHJlZ19yZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQocmVnX2J0ZiwgcmVnX3JlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2OTg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc0OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NDk6XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI3NTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNzUxLVxcdFxcdGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI3NTI6XFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZyZWZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjc1My1cXHRcXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTQ5PXM2NCBicGZfa2Z1bmNfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1Njk6XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU3MC1cXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU5Mi1cXHQvKiBmaXhlZC1zaXplIHBvaW50ZWQtdG8gdHlwZTogcmVzb2x2ZSB2aWEgQlRGICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNTkzOlxcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1OTQtXFx0aWYgKCFJU19FUlIoYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcXHUwMDI2dHlwZV9zaXplKSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzc4NT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0MDM3LVxcdC8qIENoZWNrIHJldHVybiB0eXBlICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0MDM4OlxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgbWV0YS5mdW5jX3Byb3RvLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwMzktXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzAtXFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19wdHIodCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQwNzE6XFx0XFx0cHRyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnB0cl90eXBlX2lkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQwNzItXFx0XFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFxcdTAwMjZtZXRhLCByZWdzLCBpbnNuX2F1eCwgcHRyX3R5cGUsIGRlc2NfYnRmKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODYzNj1zdGF0aWMgaW50IF9fY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Njg5LVxcdHR5cGUgPSB0LVxcdTAwM2V0eXBlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODY5MDpcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg2OTEtXFx0aWYgKHBlcmNwdSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NToxNi41Njk2MTA5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTM3MzkyMDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byB6ZXJvIGluIG9uIGBtYXBfY3JlYXRlYCwgcG90ZW50aWFsbHkgaW4gYHN5c2NhbGwuY2Agb3Igd2l0aGluIHRoZSBgbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb24uIEhvd2V2ZXIsIEkgaW1tZWRpYXRlbHkgbm90ZSBgbWFwX2NoZWNrX2J0ZmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBleHBvc3VyZS4gIEknbSBzZWVpbmcgYSBzdWl0ZSBvZiBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIHNvLCB0aGVyZWZvcmUsIGFyZSBleHBvcnRlZCBhbmQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2U6IGBidGZfdHlwZV9zbnByaW50Zl9zaG93YCwgYGJ0Zl90eXBlX3NlcV9zaG93X2ZsYWdzYCwgYGJ0Zl90eXBlX3NlcV9zaG93YCwgdGhlIGBodGFiX21hcF9vcHNgIGFuZCBgcmh0YWJfbWFwX29wc2Agc3RydWN0cywgYGJwZl9tYXBfY3JlYXRlYCBvciBgbWFwX2NyZWF0ZWAgKHRoZSBwb3RlbnRpYWwgcG9pbnQgb2YgZW50cnkhKSwgYW5kIGBicGZfc25wcmludGZfYnRmYC4gIGBicGZfc25wcmludGZfYnRmYCBlc3BlY2lhbGx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGlzIGEgQlBGIGhlbHBlciBhbmQgYSBub24tc3RhdGljIEJQRl9DQUxMXzUuIFRoYXQgaXMgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYGJwZl9zbnByaW50Zl9idGZgLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdCB3aXRoaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoZSBgQlBGX0NBTExfNWAgbWFjcm8gZ2VuZXJhdGVzIHRoYXQgc3ltYm9sLCBlaXRoZXIgZGlyZWN0bHkgYXMgYGJwZl9zbnByaW50Zl9idGZgIG9yIHBvdGVudGlhbGx5IGFzIGBfX19icGZfc25wcmludGZfYnRmYC4gQWxzbywgYm90aCBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AgYW5kIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AgYXJlIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvYnRmLmNgLiBUaGF0IGdpdmVzIG1lIGEgc2xpZ2h0bHkgd2lkZXIgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCdzIG5vdyBjb25zaWRlciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHN5bWJvbHMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0VWRU5UU2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgZm9yIGNvbnRleHQsIGJ1dCBub3QgZGlyZWN0bHkgZXhwbG9pdGFibGUgYXQgdGhpcyBzdGFnZS4gTXkgZm9jdXMsIHRob3VnaCwgbmFycm93cyB0byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgYnRmX3R5cGVfc25wcmludGZfc2hvd2AsIGBidGZfdHlwZV9zZXFfc2hvd19mbGFnc2AsIGFuZCwgYWdhaW4sIGBicGZfc25wcmludGZfYnRmYC4gVGhvc2UgYXJlIHdoYXQgSSdtIGhvbWluZyBpbiBvbi5cblxuQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIGEgZmluYWwsIHF1aWNrIHJldmlldy4gVGhlIHBhdGNoIG1vZGlmaWVzIHR3byBzcGVjaWZpYyBhcmVhczogdGhlIEJURiBzaG93IGxvZ2ljLCB0byBwcmV2ZW50IHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlcyB3aGVuIGhhbmRsaW5nIHZvaWQgbW9kaWZpZXJzIGFuZCBgQlRGX0tJTkRfVkFSYCB3aXRoIGEgYmFzZSBCVEYuIFNwZWNpZmljYWxseSwgaW4gYGtlcm5lbC9icGYvYnRmLmNgIHdpdGggYGJ0Zl9tb2RpZmllcl9zaG93YCBhbmQgYGJ0Zl92YXJfc2hvd2AuIEl0IGFsc28gaW1wYWN0cyBCVEYgbWFwIHZhbGlkYXRpb24gd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgdmlhIHRoZSBgaHRhYl9tYXBfY2hlY2tfYnRmYCBhbmQgYHJodGFiX21hcF9jaGVja19idGZgIGZ1bmN0aW9ucywgdG8gcmVqZWN0IGtleWxlc3MgQlRGIG1hcHMuXG5cblRoaXMgaXMgY29yZSBrZXJuZWwgQlBGIGZ1bmN0aW9uYWxpdHkg4oCTIGFuZCBpdCdzIHJlYWNoYWJsZSB2aWEgYm90aCBzeXNjYWxscyBhbmQgQlBGIHByb2dyYW1zIHRoZW1zZWx2ZXMuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBwb3RlbnRpYWxseSBzdWJ0bGUsIGJ1dCB0aGV5J3JlIGRlYWxpbmcgd2l0aCBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIHZhbGlkYXRpb24uIEknbSBub3cgZ29pbmcgdG8gZmxhZyBpdCBhcyBcIldvcnRoRnV6emluZzogdHJ1ZS5cIlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODksIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ1OjU3Ljk0MzUzNTA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjAzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfdHlwZV9zbnByaW50Zl9zaG93XCIsXG4gICAgXCJidGZfdHlwZV9zZXFfc2hvd19mbGFnc1wiLFxuICAgIFwiYnBmX3NucHJpbnRmX2J0ZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBCVEYgc2hvdyByb3V0aW5lcyAoYnRmX21vZGlmaWVyX3Nob3cgYW5kIGJ0Zl92YXJfc2hvdykgd2hlbiBkZWFsaW5nIHdpdGggdm9pZCBtb2RpZmllcnMgYW5kIGJhc2UgQlRGcywgYW5kIGFkZHMgY2hlY2tzIGluIGh0YWJfbWFwX2NoZWNrX2J0Zi9yaHRhYl9tYXBfY2hlY2tfYnRmIHRvIHJlamVjdCBoYXNoIG1hcHMgY3JlYXRlZCB3aXRoIGtleS1sZXNzIEJURnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYvQlRGIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcgcGF0aHMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgQlBGIGhlbHBlciBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDU6NTguMDY4NzQ1MTk4WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNjE1MTA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NTo1OC4wNjkxOTIyNDhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTkwNjEwNTc2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBCVEYgdHlwZSBmb3JtYXR0aW5nIChidGZfbW9kaWZpZXJfc2hvdyBhbmQgYnRmX3Zhcl9zaG93KSBhbmQgQlBGIGhhc2ggbWFwIEJURiB2YWxpZGF0aW9uIChodGFiX21hcF9jaGVja19idGYgYW5kIHJodGFiX21hcF9jaGVja19idGYpLlxcblxcblNwZWNpZmljYWxseTpcXG4xLiBJbiBidGZfbW9kaWZpZXJfc2hvdygpLCBpdCBhZGRzIGEgY2hlY2sgZm9yIE5VTEwgYnRmX3R5cGVfb3BzKHQpIHdoZW4gbW9kaWZpZXJzIHJlc29sdmUgdG8gdm9pZCwgZmFsbGluZyBiYWNrIHRvIGJ0Zl9kZl9zaG93KCkgdG8gYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjIuIEluIGJ0Zl92YXJfc2hvdygpLCBpdCBjaGVja3MgaWYgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMgaXMgTlVMTCBiZWZvcmUgcmVzb2x2aW5nLCBmYWxsaW5nIGJhY2sgdG8gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoKSB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cXG4zLiBJbiBodGFiX21hcF9jaGVja19idGYoKSBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZigpLCBpdCByZWplY3RzIGtleS1sZXNzIEJURiBkZWZpbml0aW9ucyB3aXRoIC1FSU5WQUwgdG8gYXZvaWQgY3Jhc2hlcyBkdXJpbmcgbWFwIGR1bXBpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBvciBleHBvc2Uga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgc3RhbmRhcmQgY3Jhc2hlcyBkZXRlY3RlZCB3aXRob3V0IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1NGQ2NTgwOGUwYWJhMGY1ZjQwMDcxYTQ5MTEzNWE2NjBjNWI5YmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjo0MDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi4zY2YzNWVlNDljMTAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI5MTEsMTQgKzI5MTEsMzAgQEAgc3RhdGljIHZvaWQgYnRmX21vZGlmaWVyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0ZWxzZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuK1x0LypcbitcdCAqIEEgbW9kaWZpZXIgY2FuIHJlc29sdmUgdG8gdGhlIHZvaWQgdHlwZSAoZS5nLiBcImNvbnN0IHZvaWRcIiksIHdoaWNoXG4rXHQgKiBoYXMgbm8gc2hvdyBvcCAoa2luZF9vcHNbQlRGX0tJTkRfVU5LTl0gaXMgTlVMTCkuIFByaW50IGEgcGxhY2Vob2xkZXJcbitcdCAqIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBOVUxMLlxuK1x0ICovXG4rXHRpZiAoIWJ0Zl90eXBlX29wcyh0KSlcbitcdFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XG4rXHRlbHNlXG4rXHRcdGJ0Zl90eXBlX29wcyh0KS1cdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGZfdmFyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdFx0XHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxuIHtcbi1cdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHQvKlxuK1x0ICogYnRmX3R5cGVfaWRfcmVzb2x2ZSgpIGRlcmVmZXJlbmNlcyBidGYtXHUwMDNlcmVzb2x2ZWRfaWRzLCB3aGljaCBpcyBOVUxMXG4rXHQgKiBmb3IgYSBiYXNlIEJURiAoZS5nLiB0aGUgdm1saW51eCBCVEYgdGhhdCBicGZfc25wcmludGZfYnRmKCkgdXNlcykuXG4rXHQgKiBSZXNvbHZlIHRoZSB2YXIncyB0eXBlIGRpcmVjdGx5IGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0aWYgKGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHMpXG4rXHRcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXHUwMDI2dHlwZV9pZCk7XG4rXHRlbHNlXG4rXHRcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dHlwZV9pZCk7XG4gXG4gXHRidGZfdHlwZV9vcHModCktXHUwMDNlc2hvdyhidGYsIHQsIHR5cGVfaWQsIGRhdGEsIGJpdHNfb2Zmc2V0LCBzaG93KTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uNDMxMjM0MjQxODNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTUzMCw2ICs1MzAsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcbitcdC8qIEhhc2ggbWFwcyBoYXZlIG5vIHVzZSBmb3IgYSBrZXktbGVzcyBCVEYuICovXG4rXHRpZiAoYnRmX3R5cGVfaXNfdm9pZChrZXlfdHlwZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0zMTEwLDYgKzMxMTQsMTAgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4rXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xuK1x0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbWFwX2tleWxlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tYXBfa2V5bGVzcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTdkMDM3ZjU3YTdlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21hcF9rZXlsZXNzLmNcbkBAIC0wLDAgKzEsODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuK1xuKy8qXG4rICogQSBoYXNoIG1hcCB3aXRoIGEga2V5LWxlc3MgQlRGIChidGZfa2V5X3R5cGVfaWQgPT0gMCkgdXNlZCB0byBOVUxMLWRlcmVmIGluXG4rICogYnRmX3R5cGVfc2hvdygpIHdoZW4gZHVtcGVkIHZpYSBicGZmcy5cbisgKiBBIGZpeGVkIGtlcm5lbCByZWplY3RzIHN1Y2ggYSBtYXAgYXQgY3JlYXRpb247IG9uIGFuIHVuZml4ZWQga2VybmVsIHRoZVxuKyAqIHBpbi1hbmQtcmVhZCBiZWxvdyBkZWxpYmVyYXRlbHkgd2Fsa3MgdGhhdCBicGZmcyBkdW1wIHBhdGgsIHNvIGl0IGRvdWJsZXNcbisgKiBhcyBhIHJlcHJvZHVjZXI6IGl0IG9vcHNlcyBhbiB1bmZpeGVkIGtlcm5lbCAoYW5kIHBhbmljcyBpdCB1bmRlclxuKyAqIHBhbmljX29uX29vcHMpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2tleWxlc3MoaW50IG1hcF90eXBlLCBfX3UzMiBtYXBfZmxhZ3MsIGludCBidGZfZmQsIGludCB2YWxfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyk7XG4rXHRjb25zdCBjaGFyICpwYXRoID0gXCIvc3lzL2ZzL2JwZi9rZXlsZXNzX21hcFwiO1xuK1x0X191MzIga2V5ID0gMSwgdmFsID0gMHg0MTQyNDM0NDtcbitcdGNoYXIgYnVmWzI1Nl07XG4rXHRpbnQgbWFwX2ZkO1xuK1x0RklMRSAqZjtcbitcbitcdG9wdHMubWFwX2ZsYWdzID0gbWFwX2ZsYWdzO1xuK1x0b3B0cy5idGZfZmQgPSBidGZfZmQ7XG4rXHRvcHRzLmJ0Zl92YWx1ZV90eXBlX2lkID0gdmFsX2lkO1xuK1xuK1x0LypcbitcdCAqIFBvc2l0aXZlIGNvbnRyb2w6IHRoZSBzYW1lIG1hcCB3aXRoIGEgcmVhbCBrZXkgdHlwZSBtdXN0IGJlIGFjY2VwdGVkLFxuK1x0ICogc28gdGhlIC1FSU5WQUwgYmVsb3cgaXMgYWJvdXQgdGhlIGtleS1sZXNzIEJURiBhbmQgbm90IHNvbWUgdW5yZWxhdGVkXG4rXHQgKiByZWplY3Rpb24gKGUuZy4gYW4gdW5rbm93biBtYXAgdHlwZSkuXG4rXHQgKi9cbitcdG9wdHMuYnRmX2tleV90eXBlX2lkID0gdmFsX2lkO1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUobWFwX3R5cGUsIFwia2V5ZWRfbWFwXCIsIDQsIDQsIDgsIFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImtleWVkIGNyZWF0ZSBpcyBhY2NlcHRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbitcbitcdC8qIEEga2V5LWxlc3MgQlRGIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRvcHRzLmJ0Zl9rZXlfdHlwZV9pZCA9IDA7XG4rXHRtYXBfZmQgPSBicGZfbWFwX2NyZWF0ZShtYXBfdHlwZSwgXCJrZXlsZXNzX21hcFwiLCA0LCA0LCA4LCBcdTAwMjZvcHRzKTtcbitcbitcdGlmIChtYXBfZmQgXHUwMDNlPSAwKSB7XG4rXHRcdC8qIFVuZml4ZWQga2VybmVsOiByZXByb2R1Y2UgdGhlIG9vcHMgdmlhIHRoZSBicGZmcyBkdW1wIHBhdGguICovXG4rXHRcdCh2b2lkKWJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRcdGlmIChicGZfb2JqX3BpbihtYXBfZmQsIHBhdGgpID09IDApIHtcbitcdFx0XHRmID0gZm9wZW4ocGF0aCwgXCJyXCIpO1xuK1x0XHRcdGlmIChmKSB7XG4rXHRcdFx0XHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpXG4rXHRcdFx0XHRcdDtcbitcdFx0XHRcdGZjbG9zZShmKTtcbitcdFx0XHR9XG4rXHRcdFx0dW5saW5rKHBhdGgpO1xuK1x0XHR9XG4rXHRcdGNsb3NlKG1hcF9mZCk7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEobWFwX2ZkLCAtRUlOVkFMLCBcImtleS1sZXNzIGNyZWF0ZSBpcyByZWplY3RlZFwiKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9tYXBfa2V5bGVzcyh2b2lkKVxuK3tcbitcdGludCBidGZfZmQsIHZhbF9pZDtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcImJ0Zl9fbmV3X2VtcHR5XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2YWxfaWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXHRpZiAoIUFTU0VSVF9HVCh2YWxfaWQsIDAsIFwiYnRmX19hZGRfaW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKGJ0Zl9fbG9hZF9pbnRvX2tlcm5lbChidGYpLCBcImJ0Zl9fbG9hZF9pbnRvX2tlcm5lbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRidGZfZmQgPSBidGZfX2ZkKGJ0Zik7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX0hBU0gsIDAsIGJ0Zl9mZCwgdmFsX2lkKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmhhc2hcIikpXG4rXHRcdGNoZWNrX2tleWxlc3MoQlBGX01BUF9UWVBFX1JIQVNILCBCUEZfRl9OT19QUkVBTExPQywgYnRmX2ZkLCB2YWxfaWQpO1xuK291dDpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNzMyMzJkYzJhMDQ1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfc2hvd192b2lkLmNcbkBAIC0wLDAgKzEsODEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX3Nob3dfdm9pZC5za2VsLmhcIlxuK1xuKy8qXG4rICogYnBmX3NucHJpbnRmX2J0ZigpIHJlbmRlcnMgYSB0eXBlX2lkIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhlIHZtbGludXggQlRGLlxuKyAqIFR3byBzdWNoIHR5cGVfaWRzIHVzZWQgdG8gTlVMTC1kZXJlZiBpbiB0aGUgQlRGIHNob3cgcGF0aDpcbisgKiAgIC0gYSBcImNvbnN0IHZvaWRcIiAoYSBtb2RpZmllciByZXNvbHZpbmcgdG8gdm9pZCkgaW4gYnRmX21vZGlmaWVyX3Nob3coKVxuKyAqICAgLSBhIEJURl9LSU5EX1ZBUiBpbiBidGZfdmFyX3Nob3coKSAoYmFzZSBCVEYgaGFzIG5vIHJlc29sdmVkX2lkcylcbisgKiBBIGZpeGVkIGtlcm5lbCByZW5kZXJzIGJvdGggd2l0aG91dCBjcmFzaGluZy5cbisgKi9cbitzdGF0aWMgbG9uZyBydW4oc3RydWN0IGJ0Zl9zaG93X3ZvaWQgKnNrZWwsIF9fdTMyIHR5cGVfaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdGNoYXIgY3R4WzhdID0ge307XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0eXBlX2lkID0gdHlwZV9pZDtcbitcdHRvcHRzLmN0eF9pbiA9IGN0eDtcbitcdHRvcHRzLmN0eF9zaXplX2luID0gc2l6ZW9mKGN0eCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmR1bXBfdHlwZSksXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJldDtcbit9XG4rXG4rdm9pZCB0ZXN0X2J0Zl9zaG93X3ZvaWQodm9pZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRzdHJ1Y3QgYnRmX3Nob3dfdm9pZCAqc2tlbDtcbitcdGludCBpLCBuLCBjdiA9IDAsIHZhciA9IDA7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX3BhcnNlKFwiL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcIiwgTlVMTCk7XG4rXHRpZiAoIWJ0Zikge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBidGZfc2hvd192b2lkX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0X2J0ZjtcbitcbitcdG4gPSBidGZfX3R5cGVfY250KGJ0Zik7XG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiAhKGN2IFx1MDAyNlx1MDAyNiB2YXIpOyBpKyspIHtcbitcdFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChidGYsIGkpO1xuK1x0XHRpZiAoIWN2IFx1MDAyNlx1MDAyNiBidGZfa2luZCh0KSA9PSBCVEZfS0lORF9DT05TVCBcdTAwMjZcdTAwMjYgdC1cdTAwM2V0eXBlID09IDApXG4rXHRcdFx0Y3YgPSBpO1xuK1x0XHQvKiBQaWNrIGEgVkFSIHNtYWxsIGVub3VnaCB0byByZW5kZXIgZnJvbSB0aGUgcHJvZ3JhbSdzIGJ1ZmZlci4gKi9cbitcdFx0aWYgKCF2YXIgXHUwMDI2XHUwMDI2IGJ0Zl9raW5kKHQpID09IEJURl9LSU5EX1ZBUikge1xuK1x0XHRcdGxvbmcgc3ogPSBidGZfX3Jlc29sdmVfc2l6ZShidGYsIHQtXHUwMDNldHlwZSk7XG4rXG4rXHRcdFx0aWYgKHN6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzeiBcdTAwM2M9IChsb25nKXNpemVvZihza2VsLVx1MDAzZWJzcy1cdTAwM2VvYmopKVxuK1x0XHRcdFx0dmFyID0gaTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogXCJjb25zdCB2b2lkXCIgcmVuZGVycyB0aGUgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIiBwbGFjZWhvbGRlci4gKi9cbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29uc3Rfdm9pZFwiKSkge1xuK1x0XHRpZiAoY3YpIHtcbitcdFx0XHRBU1NFUlRfRVEocnVuKHNrZWwsIGN2KSxcbitcdFx0XHRcdCAgc2l6ZW9mKFwiXHUwMDNjdW5zdXBwb3J0ZWQga2luZDowXHUwMDNlXCIpIC0gMSwgXCJyZXRcIik7XG4rXHRcdFx0QVNTRVJUX1NUUkVRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW91dCwgXCJcdTAwM2N1bnN1cHBvcnRlZCBraW5kOjBcdTAwM2VcIixcbitcdFx0XHRcdCAgICAgXCJwbGFjZWhvbGRlclwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEEgQlRGX0tJTkRfVkFSIG11c3QgcmVzb2x2ZSBhbmQgcmVuZGVyIHdpdGhvdXQgZXJyb3IuICovXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInZhclwiKSkge1xuK1x0XHRpZiAodmFyKVxuK1x0XHRcdEFTU0VSVF9HVChydW4oc2tlbCwgdmFyKSwgMCwgXCJyZXRcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRidGZfc2hvd192b2lkX19kZXN0cm95KHNrZWwpO1xuK291dF9idGY6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9zaG93X3ZvaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfc2hvd192b2lkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40NGFmODBmYmJiODA4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX3Nob3dfdm9pZC5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcImJ0Zl9wdHIuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitfX3UzMiB0eXBlX2lkO1xuKy8qIEEgYnVmZmVyIHdlIG93biB0byByZW5kZXIgdGhlIHNlbGVjdGVkIHR5cGUgZnJvbSwga2VwdCBpbiBib3VuZHMuICovXG4rY2hhciBvYmpbMjU2XTtcbitjaGFyIG91dFs2NF07XG4rbG9uZyByZXQ7XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBkdW1wX3R5cGUodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBidGZfcHRyIHB0ciA9IHtcbitcdFx0LnB0ciA9IG9iaixcbitcdFx0LnR5cGVfaWQgPSB0eXBlX2lkLFxuK1x0XHQuZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHJldCA9IGJwZl9zbnByaW50Zl9idGYob3V0LCBzaXplb2Yob3V0KSwgXHUwMDI2cHRyLCBzaXplb2YocHRyKSwgMCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDU6NTguMDY5MTkzMTE4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTA5NTA5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBtZXJpdHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSByZWxldmFudCBhcmVhcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcywgd2hpbGUgcG90ZW50aWFsbHkgY29tcGxleCBpbiB0aGVpciBsb2dpYywgbWlnaHQgYmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRvb2xzLlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBhcmUgZGVmaW5pdGVseSB0aGUgbW9zdCBpbnRlcmVzdGluZy4gV2UndmUgZ290IHR3byBzcGVjaWZpYyBhcmVhcyBvZiBmb2N1cyB3aXRoaW4gdGhhdCBmaWxlOiBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YC4gSW4gYGJ0Zl9tb2RpZmllcl9zaG93YCwgdGhlIGNvZGUgaXMgbm93IGhhbmRsaW5nIGNhc2VzIHdoZXJlIGEgbW9kaWZpZXIgcmVzb2x2ZXMgdG8gYSBgdm9pZGAgdHlwZSwgd2hpY2ggbGFja3MgYSBzaG93IG9wZXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBudWxsIGNoZWNrIHRvIGd1YXJkIGFnYWluc3QgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciBhbmQgdXRpbGl6ZXMgYGJ0Zl9kZl9zaG93YCBhcyBhIGZhbGxiYWNrLiBgYnRmX3Zhcl9zaG93YCBhZGp1c3RzIHRoZSByZXNvbHV0aW9uIGxvZ2ljIGZvciB2YXJpYWJsZSB0eXBlcywgcGFydGljdWxhcmx5IGFkZHJlc3NpbmcgY2FzZXMgd2l0aCBiYXNlIEJURnMgd2hlcmUgYGJ0Zi1cdTAwM2VyZXNvbHZlZF9pZHNgIGlzIE5VTEwuIFRoaXMgZGlyZWN0IHJlc29sdmUgdXNpbmcgYGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzYCBsb29rcyBsaWtlIGEgZml4IHRvIGF2b2lkIE5VTEwgZGVyZWZlcmVuY2VzIGluIHNwZWNpZmljIGNvbnRleHRzLiBCb3RoIGFwcGVhciB0byBiZSBhZGRyZXNzaW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhIGNsYXNzaWMgS0FTQU4gdGFyZ2V0LlxuXG5JbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCB0aGUgbmV3IGNvZGUgaW4gYGh0YWJfbWFwX2NoZWNrX2J0ZmAgYW5kIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBleHBsaWNpdGx5IGRpc2FsbG93cyBoYXNoIG1hcHMgd2l0aCBrZXktbGVzcyBCVEZzIHVzaW5nIGBidGZfdHlwZV9pc192b2lkYC4gVGhpcyBpcyBhIHR5cGUgc2FmZXR5IGNoZWNrLiBUaGUgaW50ZXJlc3RpbmcgY2FzZSBpcyBgYnRmX3R5cGVfaXNfdm9pZGAsIHdoaWNoIG1pZ2h0IG9wZW4gdXAgbmV3IGNvZGUgcGF0aHMuXG5cbkZpbmFsbHksIHRoZSBhZGRlZCBzZWxmdGVzdHMgZm9yIGBidGZfbWFwX2tleWxlc3NgIGFuZCBgYnRmX3Nob3dfdm9pZGAgYXJlIGdvb2QgdG8gc2VlLiBUaGVzZSB3aWxsIG9mZmVyIHNvbWUgaW5pdGlhbCBjb3ZlcmFnZSBhbmQgdmFsaWRhdGlvbiwgYnV0IHRoZXkgbWlnaHQgbm90IGJlIGNvbXByZWhlbnNpdmUuXG5cbk5vdywgSSdsbCBkaWcgaW50byBgYnRmX2RmX3Nob3dgIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aG9zZSBudWxsIGNoZWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBkYXRhIGZsb3dzIGFuZCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgdHJpZ2dlciB0aG9zZSBjb25kaXRpb25zLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IGVmZmVjdGl2ZSBLQVNBTiBpcyBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBHaXZlbiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgdGFyZ2V0IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHR5cGUgY2hlY2tzLCBLQVNBTiBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IHRvb2wgZm9yIHZhbGlkYXRpb24gaGVyZS4gV2hpbGUgSSdsbCBrZWVwIEtNU0FOIGluIG1pbmQsIGl0IHNlZW1zIGxlc3MgbGlrZWx5IHRvIHVuY292ZXIgc2lnbmlmaWNhbnQgbmV3IGlzc3VlcyBpbiB0aGlzIHNwZWNpZmljIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDY6MTguOTc4NzA0NTk4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNzIwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2RmX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9idGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTIyNjM9c3RhdGljIGludCBidGZfZGZfcmVzb2x2ZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0yMjY5LVxcbmtlcm5lbC9icGYvYnRmLmM6MjI3MDpzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG5rZXJuZWwvYnBmL2J0Zi5jLTIyNzEtXFx0XFx0XFx0dTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0cyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MjkwND1zdGF0aWMgdm9pZCBidGZfbW9kaWZpZXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTI5MTktXFx0aWYgKCFidGZfdHlwZV9vcHModCkpXFxua2VybmVsL2JwZi9idGYuYzoyOTIwOlxcdFxcdGJ0Zl9kZl9zaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbmtlcm5lbC9icGYvYnRmLmMtMjkyMS1cXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTMwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2luZF9vcGVyYXRpb25zIGZ3ZF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjEtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z3ZF90eXBlX2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjMwMjI6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTMwMjMtfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NDc4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZnVuY19wcm90b19vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQ4MDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Z1bmNfcHJvdG9fbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDgwMTpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDgwMi19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz00ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmdW5jX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDg0OS1cXHQubG9nX2RldGFpbHMgPSBidGZfcmVmX3R5cGVfbG9nLFxcbmtlcm5lbC9icGYvYnRmLmM6NDg1MDpcXHQuc2hvdyA9IGJ0Zl9kZl9zaG93LFxcbmtlcm5lbC9icGYvYnRmLmMtNDg1MS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz01MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tpbmRfb3BlcmF0aW9ucyBmbG9hdF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDAtXFx0LmxvZ19kZXRhaWxzID0gYnRmX2Zsb2F0X2xvZyxcXG5rZXJuZWwvYnBmL2J0Zi5jOjUxNDE6XFx0LnNob3cgPSBidGZfZGZfc2hvdyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTUxNDItfTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NTIzND1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9raW5kX29wZXJhdGlvbnMgZGVjbF90YWdfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy01MjM5LVxcdC5sb2dfZGV0YWlscyA9IGJ0Zl9kZWNsX3RhZ19sb2csXFxua2VybmVsL2JwZi9idGYuYzo1MjQwOlxcdC5zaG93ID0gYnRmX2RmX3Nob3csXFxua2VybmVsL2JwZi9idGYuYy01MjQxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjE5Ljc3Mjk4MzYxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzY5NjQwMjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzOlxuXG4qKkFuYWx5emluZyBga2VybmVsL2JwZi9idGYuY2AsIExpbmVzIDIyNjUtMjI4MCoqXG5cblJpZ2h0LCBsZXQgbWUgcHVsbCB1cCBga2VybmVsL2JwZi9idGYuY2AgYW5kIHplcm8gaW4gb24gbGluZXMgMjI2NS0yMjgwLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIEJURiAoQlBGIFR5cGUgRm9ybWF0KSBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgZGVjb2Rpbmcgb3IgcHJvY2Vzc2luZyBzb21lIGFzcGVjdCBvZiB0aGVtLiBCYXNlZCBvbiB0aGUgbGluZSBudW1iZXJzLCBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSB3aXRoaW4gYSBsYXJnZXIgZnVuY3Rpb24sIGxpa2VseSBhIGNvcmUgZnVuY3Rpb24gZm9yIHJlYWRpbmcsIHBhcnNpbmcsIG9yIHZhbGlkYXRpbmcgQlRGIGluZm9ybWF0aW9uLlxuXG5JJ2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgcG9pbnRlciBtYW5pcHVsYXRpb24gb3Igc3RydWN0dXJlIG1lbWJlciBhY2Nlc3MgYXQgdGhpcyByYW5nZSwgcGVyaGFwcyBkZWFsaW5nIHdpdGggZXh0cmFjdGluZyB0eXBlIGluZm9ybWF0aW9uLCByZXNvbHZpbmcgcmVmZXJlbmNlcyBiZXR3ZWVuIHR5cGVzLCBvciBoYW5kbGluZyBlcnJvciBjb25kaXRpb25zIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzLiBJZiBpdCdzIG5lYXIgdGhlIGVuZCBvZiBhIGJsb2NrLCBpdCBjb3VsZCBiZSB0aGUgZmluYWwgY2xlYW51cCBvciBlcnJvciBoYW5kbGluZy4gQ291bGQgYmUgYW55IG9mIHRoZSBgYnRmX2AgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgZnJlcXVlbnRseSB1c2VkIGluIHRoZSBgYnBmL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgc2NvcGUsIGl0IG1pZ2h0IGJlIGFib3V0IHRoZSBgYnRmX3R5cGVgIHN0cnVjdHVyZSwgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQlRGIGluZm9ybWF0aW9uLlxuXG5JJ20gaG9waW5nIHRvIHNlZSBob3cgdGhlIEJURiBkYXRhIGlzIGJlaW5nIGFjY2Vzc2VkLCBwZXJoYXBzIGNhc3Rpbmcgc29tZSBzb3J0IG9mIGdlbmVyaWMgZGF0YSBidWZmZXIgaW50byBzcGVjaWZpYyBCVEYgc3RydWN0dXJlcywgb3IgbWF5YmUgdmVyaWZ5aW5nIHNvbWUgZmllbGQgdmFsdWVzIGFnYWluc3QgZXhwZWN0ZWQgcmFuZ2VzLiBJdCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHR5cGUgSURzLCBtZW1iZXIgb2Zmc2V0cywgb3IgYW55IG90aGVyIHN0cnVjdHVyYWwgZWxlbWVudCByZWxldmFudCB0byB0aGUgQlRGIGZvcm1hdC4gS25vd2luZyB0aGUgZXhhY3QgZnVuY3Rpb24gc3Vycm91bmRpbmcgdGhpcyBjb2RlIGJsb2NrIHdvdWxkIGdpdmUgbWUgbW9yZSBjb250ZXh0LCBidXQganVzdCBmcm9tIHRoZSBsaW5lIG51bWJlcnMsIEknbSBleHBlY3Rpbmcgc29tZSBjcml0aWNhbCBCVEYtcmVsYXRlZCBvcGVyYXRpb24gdG8gb2NjdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NjozNy40NjkzODkyMDVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI2NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI2NTpcXHR7XFxuMjI2NjpcXHRcXHRidGZfdmVyaWZpZXJfbG9nX2Jhc2ljKGVudiwgdi1cXHUwMDNldCwgXFxcIlVuc3VwcG9ydGVkIHJlc29sdmVcXFwiKTtcXG4yMjY3OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNjg6XFx0fVxcbjIyNjk6XFx0XFxuMjI3MDpcXHRzdGF0aWMgdm9pZCBidGZfZGZfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yMjcxOlxcdFxcdFxcdFxcdHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldHMsXFxuMjI3MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmX3Nob3cgKnNob3cpXFxuMjI3MzpcXHR7XFxuMjI3NDpcXHRcXHRidGZfc2hvdyhzaG93LCBcXFwiXFx1MDAzY3Vuc3VwcG9ydGVkIGtpbmQ6JXVcXHUwMDNlXFxcIiwgQlRGX0lORk9fS0lORCh0LVxcdTAwM2VpbmZvKSk7XFxuMjI3NTpcXHR9XFxuMjI3NjpcXHRcXG4yMjc3OlxcdHN0YXRpYyBpbnQgYnRmX2ludF9jaGVja19tZW1iZXIoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudixcXG4yMjc4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3RydWN0X3R5cGUsXFxuMjI3OTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxcbjIyODA6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZSlcXG4yMjgxOlxcdHtcXG4yMjgyOlxcdFxcdHUzMiBpbnRfZGF0YSA9IGJ0Zl90eXBlX2ludChtZW1iZXJfdHlwZSk7XFxuMjI4MzpcXHRcXHR1MzIgc3RydWN0X2JpdHNfb2ZmID0gbWVtYmVyLVxcdTAwM2VvZmZzZXQ7XFxuMjI4NDpcXHRcXHR1MzIgc3RydWN0X3NpemUgPSBzdHJ1Y3RfdHlwZS1cXHUwMDNlc2l6ZTtcXG4yMjg1OlxcdFxcdHUzMiBucl9jb3B5X2JpdHM7XFxuMjI4NjpcXHRcXHR1MzIgYnl0ZXNfb2Zmc2V0O1xcbjIyODc6XFx0XFxuMjI4ODpcXHRcXHRpZiAoVTMyX01BWCAtIHN0cnVjdF9iaXRzX29mZiBcXHUwMDNjIEJURl9JTlRfT0ZGU0VUKGludF9kYXRhKSkge1xcbjIyODk6XFx0XFx0XFx0YnRmX3ZlcmlmaWVyX2xvZ19tZW1iZXIoZW52LCBzdHJ1Y3RfdHlwZSwgbWVtYmVyLFxcbjIyOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFxcImJpdHNfb2Zmc2V0IGV4Y2VlZHMgVTMyX01BWFxcXCIpO1xcbjIyOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI5MjpcXHRcXHR9XFxuMjI5MzpcXHRcXG4yMjk0OlxcdFxcdHN0cnVjdF9iaXRzX29mZiArPSBCVEZfSU5UX09GRlNFVChpbnRfZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjM3LjQ3MDA3NTQzNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzcxNjI0NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQlRGIEluc3BlY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5zcGVjdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGJlaW5nIGRpc3BsYXllZCwgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB2YXJpYWJsZSBwcmVzZW50YXRpb24gd2l0aGluIHRoZSBCVEYgaW5mb3JtYXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBkaWRuJ3QgZnVsbHkgc2F0aXNmeSBteSBuZWVkIGZvciBhIGRlZXAgdW5kZXJzdGFuZGluZy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgYnRmX21vZGlmaWVyX3Nob3dgIGFuZCBgYnRmX3Zhcl9zaG93YCBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZXMgMjkwMCB0byAyOTQwLiBUaGlzIHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBpbnRlZ3JhdGVkIGFuZCByZW5kZXJlZCBpbiB0aGUgb3V0cHV0LiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgY2xhcmlmaWNhdGlvbiBjb3VsZCBiZSBuZWVkZWQuIFRoaXMgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIHNob3VsZCBnaXZlIG1lIHRoZSBmaW5lIGRldGFpbCBJIGFtIHNlZWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ2OjU1LjE4NjMyNDU0NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9idGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTAwOlxcdFxcbjI5MDE6XFx0XFx0cmV0dXJuIDA7XFxuMjkwMjpcXHR9XFxuMjkwMzpcXHRcXG4yOTA0OlxcdHN0YXRpYyB2b2lkIGJ0Zl9tb2RpZmllcl9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4yOTA1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yOTA2OlxcdFxcdFxcdFxcdCAgICAgIHUzMiB0eXBlX2lkLCB2b2lkICpkYXRhLFxcbjI5MDc6XFx0XFx0XFx0XFx0ICAgICAgdTggYml0c19vZmZzZXQsIHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG4yOTA4OlxcdHtcXG4yOTA5OlxcdFxcdGlmIChidGYtXFx1MDAzZXJlc29sdmVkX2lkcylcXG4yOTEwOlxcdFxcdFxcdHQgPSBidGZfdHlwZV9pZF9yZXNvbHZlKGJ0ZiwgXFx1MDAyNnR5cGVfaWQpO1xcbjI5MTE6XFx0XFx0ZWxzZVxcbjI5MTI6XFx0XFx0XFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuMjkxMzpcXHRcXG4yOTE0OlxcdFxcdC8qXFxuMjkxNTpcXHRcXHQgKiBBIG1vZGlmaWVyIGNhbiByZXNvbHZlIHRvIHRoZSB2b2lkIHR5cGUgKGUuZy4gXFxcImNvbnN0IHZvaWRcXFwiKSwgd2hpY2hcXG4yOTE2OlxcdFxcdCAqIGhhcyBubyBzaG93IG9wIChraW5kX29wc1tCVEZfS0lORF9VTktOXSBpcyBOVUxMKS4gUHJpbnQgYSBwbGFjZWhvbGRlclxcbjI5MTc6XFx0XFx0ICogaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIE5VTEwuXFxuMjkxODpcXHRcXHQgKi9cXG4yOTE5OlxcdFxcdGlmICghYnRmX3R5cGVfb3BzKHQpKVxcbjI5MjA6XFx0XFx0XFx0YnRmX2RmX3Nob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuMjkyMTpcXHRcXHRlbHNlXFxuMjkyMjpcXHRcXHRcXHRidGZfdHlwZV9vcHModCktXFx1MDAzZXNob3coYnRmLCB0LCB0eXBlX2lkLCBkYXRhLCBiaXRzX29mZnNldCwgc2hvdyk7XFxuMjkyMzpcXHR9XFxuMjkyNDpcXHRcXG4yOTI1OlxcdHN0YXRpYyB2b2lkIGJ0Zl92YXJfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4yOTI2OlxcdFxcdFxcdFxcdCB1MzIgdHlwZV9pZCwgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXFxuMjkyNzpcXHRcXHRcXHRcXHQgc3RydWN0IGJ0Zl9zaG93ICpzaG93KVxcbjI5Mjg6XFx0e1xcbjI5Mjk6XFx0XFx0LypcXG4yOTMwOlxcdFxcdCAqIGJ0Zl90eXBlX2lkX3Jlc29sdmUoKSBkZXJlZmVyZW5jZXMgYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMsIHdoaWNoIGlzIE5VTExcXG4yOTMxOlxcdFxcdCAqIGZvciBhIGJhc2UgQlRGIChlLmcuIHRoZSB2bWxpbnV4IEJURiB0aGF0IGJwZl9zbnByaW50Zl9idGYoKSB1c2VzKS5cXG4yOTMyOlxcdFxcdCAqIFJlc29sdmUgdGhlIHZhcidzIHR5cGUgZGlyZWN0bHkgaW4gdGhhdCBjYXNlLlxcbjI5MzM6XFx0XFx0ICovXFxuMjkzNDpcXHRcXHRpZiAoYnRmLVxcdTAwM2VyZXNvbHZlZF9pZHMpXFxuMjkzNTpcXHRcXHRcXHR0ID0gYnRmX3R5cGVfaWRfcmVzb2x2ZShidGYsIFxcdTAwMjZ0eXBlX2lkKTtcXG4yOTM2OlxcdFxcdGVsc2VcXG4yOTM3OlxcdFxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZ0eXBlX2lkKTtcXG4yOTM4OlxcdFxcbjI5Mzk6XFx0XFx0YnRmX3R5cGVfb3BzKHQpLVxcdTAwM2VzaG93KGJ0ZiwgdCwgdHlwZV9pZCwgZGF0YSwgYml0c19vZmZzZXQsIHNob3cpO1xcbjI5NDA6XFx0fVxcbjI5NDE6XFx0XFxuMjk0MjpcXHRzdGF0aWMgdm9pZCBidGZfcHRyX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuMjk0MzpcXHRcXHRcXHRcXHQgdTMyIHR5cGVfaWQsIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxcbjI5NDQ6XFx0XFx0XFx0XFx0IHN0cnVjdCBidGZfc2hvdyAqc2hvdylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDY6NTUuMTg3MDYyMjU1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODA0OTc4MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQlBGIGhhc2h0YWJsZSB2ZXJpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBodGFiX21hcF9jaGVja19idGZgIGFuZCBgcmh0YWJfbWFwX2NoZWNrX2J0ZmAgZnVuY3Rpb25zIGxvY2F0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucywgcHJlc3VtYWJseSwgdmFsaWRhdGUgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGluZm9ybWF0aW9uIGluIHRoZSBjb250ZXh0IG9mIHJlZ3VsYXIgYW5kIHJlLWhhc2hlZCBoYXNodGFibGVzLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBjb25jZXJuLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gcGF0aHMsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MsIGFuZCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGVja3MgcGVyZm9ybWVkIGZvciBwcm9ncmFtIHNlY3VyaXR5IGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjo0NzoxOC45OTIwNDMzMDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHRcXHRyZXR1cm4gMDtcXG4gNTI2OlxcdH1cXG4gNTI3OlxcdFxcbiA1Mjg6XFx0c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiA1Mjk6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbiA1MzA6XFx0e1xcbiA1MzE6XFx0XFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQvKiBIYXNoIG1hcHMgaGF2ZSBubyB1c2UgZm9yIGEga2V5LWxlc3MgQlRGLiAqL1xcbiA1MzQ6XFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKVxcbiA1MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxcbiA1Mzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUzOTpcXHRcXHQvKlxcbiA1NDA6XFx0XFx0ICogV2UgbXVzdCBzZXQgdGhlIGR0b3IgdXNpbmcgdGhpcyBjYWxsYmFjaywgYXMgbWFwJ3MgQlRGIHJlY29yZCBpcyBub3RcXG4gNTQxOlxcdFxcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cXG4gNTQyOlxcdFxcdCAqL1xcbiA1NDM6XFx0XFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKVxcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpO1xcbiA1NDU6XFx0XFx0ZWxzZVxcbiA1NDY6XFx0XFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VtYSwgaHRhYl9tZW1fZHRvcik7XFxuIDU0NzpcXHR9XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ3OjE4Ljk5MjM5MDM2OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTA2MTQwODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSXNzdWUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgaW4gdGhlIGByaHRhYl9tYXBfY2hlY2tfYnRmYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaXRzIHJvbGUgYW5kIGVuc3VyZSBpdCdzIG5vdCB0aGUgc291cmNlIG9yIGEgY29udHJpYnV0aW5nIGZhY3RvciB0byB3aGF0ZXZlciBwcm9ibGVtIHdlJ3JlIHRyYWNraW5nIGRvd24uIEdvdHRhIGJlIG1ldGhvZGljYWwgYW5kIGNvdmVyIGFsbCB0aGUgYmFzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8uLi4gd2VsbCwgSSdsbCBuZWVkIG1vcmUgY29udGV4dCB0byBrbm93IHdoYXQgaXQgaXMgcmVsYXRlZCB0bywgYnV0IHRoaXMgaXMgYSBzb2xpZCBwbGFjZSB0byBzdGFydCBhbmQgbWFrZSBzdXJlIGl0IGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6NDc6MjQuMDk4NTM0Mjg4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTA1OlxcdFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4zMTA2OlxcdFxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSArIHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4zMTA3OlxcdFxcbjMxMDg6XFx0XFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4zMTA5OlxcdH1cXG4zMTEwOlxcdFxcbjMxMTE6XFx0c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4zMTEyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLFxcbjMxMTM6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4zMTE0OlxcdHtcXG4zMTE1OlxcdFxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG4zMTE2OlxcdFxcbjMxMTc6XFx0XFx0LyogSGFzaCBtYXBzIGhhdmUgbm8gdXNlIGZvciBhIGtleS1sZXNzIEJURi4gKi9cXG4zMTE4OlxcdFxcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSlcXG4zMTE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMjA6XFx0XFxuMzEyMTpcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xcbjMxMjI6XFx0fVxcbjMxMjM6XFx0XFxuMzEyNDpcXHRzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ3OjI0LjA5ODg2MDU3OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzAzMTM1OTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gRGVjaXNpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgdGhlIEtNU0FOIGZ1enppbmcuIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzLiBJbiBga2VybmVsL2JwZi9idGYuY2AsIHdlJ3JlIGhhcmRlbmluZyBhZ2FpbnN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFNwZWNpZmljYWxseSwgYGJ0Zl9tb2RpZmllcl9zaG93YCBpcyBiZWluZyBwYXRjaGVkIHRvIGhhbmRsZSB0aGUgYHZvaWRgIG1vZGlmaWVyIGdyYWNlZnVsbHkgYW5kIGBidGZfdmFyX3Nob3dgIGlzIGhhbmRsaW5nIGEgcG90ZW50aWFsIE5VTEwgYHJlc29sdmVkX2lkc2AgcG9pbnRlciBpbiBiYXNlIEJURiBzY2VuYXJpb3MuIEdvb2QsIGRlZmVuc2l2ZSBjb2RpbmcuIFRoZW4sIHdlIHNlZSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgYmVpbmcgdHdlYWtlZCB0byByZWplY3Qga2V5LWxlc3MgQlRGIG1hcHMsIGFnYWluLCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgbGF0ZXIgaW4gdGhlIGBicGZmc2AgZHVtcCBvcGVyYXRpb24uIEZpbmFsbHksIHRoZXJlJ3MgdGhlIGFkZGl0aW9uIG9mIHNlbGZ0ZXN0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gQXJlIHdlIHNlbmRpbmcga2VybmVsIHN0cnVjdHVyZXMgd2l0aCBnYXJiYWdlIGRhdGEgdG8gdXNlcnNwYWNlPyBOb3BlLiBBcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBvciBicmFuY2hpbmcgYmFzZWQgb24gdGhlbT8gTm90IGhhcHBlbmluZyBoZXJlLiBOZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMgaW50cm9kdWNlZD8gTm8uIEFyZSBib3VuZHMgY2hlY2tzIGJlaW5nIHJlbGF4ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYnVncyBiZWluZyBmaXhlZCBhcmUgY2xhc3NpYyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBLQVNBTiwgYW5kIHRoZSBrZXJuZWwncyBub3JtYWwgb29wcyBzeXN0ZW0gc2hvdWxkIGNhdGNoLiBTbywgbm90IEtNU0FOIG1hdGVyaWFsLlxuXG5UaGF0IHRha2VzIGNhcmUgb2YgdGhlIHRlY2huaWNhbCByZXZpZXcsIGJ1dCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZyBLTVNBTi5cblxuTXkgcnVsZSBvZiB0aHVtYiBpczogaWYgYSBidWcgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgb3Igc2ltaWxhciwgd2UgKmRvbid0KiBydW4gYSBLTVNBTiBzZXNzaW9uLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmU7IHdlIHVzZSBpdCBvbmx5IHdoZW4gd2UgaGF2ZSB0by4gVGhlIGNvZGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3MgdGhhdCBLTVNBTiBhbG9uZSBjYW4gZGV0ZWN0LlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgY2xlYXI6IEknbGwgaW52b2tlIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyBJIGp1c3QgbGFpZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI2LCJPdXRwdXRUb2tlbnMiOjI4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjQ4OjM3LjEzMDIyNDQ2NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIEJURiB0eXBlIGZvcm1hdHRpbmcgKGJ0Zl9tb2RpZmllcl9zaG93IGFuZCBidGZfdmFyX3Nob3cpIGFuZCBCUEYgaGFzaCBtYXAgQlRGIHZhbGlkYXRpb24gKGh0YWJfbWFwX2NoZWNrX2J0ZiBhbmQgcmh0YWJfbWFwX2NoZWNrX2J0ZikuXFxuXFxuU3BlY2lmaWNhbGx5OlxcbjEuIEluIGJ0Zl9tb2RpZmllcl9zaG93KCksIGl0IGFkZHMgYSBjaGVjayBmb3IgTlVMTCBidGZfdHlwZV9vcHModCkgd2hlbiBtb2RpZmllcnMgcmVzb2x2ZSB0byB2b2lkLCBmYWxsaW5nIGJhY2sgdG8gYnRmX2RmX3Nob3coKSB0byBhdm9pZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXFxuMi4gSW4gYnRmX3Zhcl9zaG93KCksIGl0IGNoZWNrcyBpZiBidGYtXFx1MDAzZXJlc29sdmVkX2lkcyBpcyBOVUxMIGJlZm9yZSByZXNvbHZpbmcsIGZhbGxpbmcgYmFjayB0byBidGZfdHlwZV9za2lwX21vZGlmaWVycygpIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbjMuIEluIGh0YWJfbWFwX2NoZWNrX2J0ZigpIGFuZCByaHRhYl9tYXBfY2hlY2tfYnRmKCksIGl0IHJlamVjdHMga2V5LWxlc3MgQlRGIGRlZmluaXRpb25zIHdpdGggLUVJTlZBTCB0byBhdm9pZCBjcmFzaGVzIGR1cmluZyBtYXAgZHVtcGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG9yIGV4cG9zZSBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBzdGFuZGFyZCBjcmFzaGVzIGRldGVjdGVkIHdpdGhvdXQgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[1] Phase: Succeeded StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 12:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 12:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2] Phase: Succeeded StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 12:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 12:48:48 +0000 UTC FinishedAt: 2026-08-31 12:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowk59wk/series-workflowk59wk-convert-artifact-686466678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 12:48:58 +0000 UTC FinishedAt: 2026-08-31 13:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 12:48:58 +0000 UTC FinishedAt: 2026-08-31 13:10:25 +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:*c6ff8983-1ae8-421c-bade-c1509c163a25,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-workflowk59wk/series-workflowk59wk-convert-artifact-686466678/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": "6fff6eee-8074-401f-9f22-e4c192c199ea", "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-workflowk59wk/series-workflowk59wk-build-action-1548796300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 12:48:58 +0000 UTC FinishedAt: 2026-08-31 13:10:15 +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:*c6ff8983-1ae8-421c-bade-c1509c163a25,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-workflowk59wk/series-workflowk59wk-convert-artifact-686466678/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": "6fff6eee-8074-401f-9f22-e4c192c199ea", "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-workflowk59wk/series-workflowk59wk-build-action-1548796300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 13:10:25 +0000 UTC FinishedAt: 2026-08-31 13:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 13:10:25 +0000 UTC FinishedAt: 2026-08-31 13:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 13:10:25 +0000 UTC FinishedAt: 2026-08-31 13:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 13:10:25 +0000 UTC FinishedAt: 2026-08-31 13:10:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowk59wk/series-workflowk59wk-convert-artifact-4234833161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 13:10:36 +0000 UTC FinishedAt: 2026-08-31 13:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 13:10:36 +0000 UTC FinishedAt: 2026-08-31 13:12:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fff6eee-8074-401f-9f22-e4c192c199ea,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-workflowk59wk/series-workflowk59wk-build-action-1548796300/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-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 13:12:52 +0000 UTC FinishedAt: 2026-08-31 13:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 13:12:52 +0000 UTC FinishedAt: 2026-08-31 13:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 13:12:52 +0000 UTC FinishedAt: 2026-08-31 13:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 13:12:52 +0000 UTC FinishedAt: 2026-08-31 13:29:29 +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:*c6ff8983-1ae8-421c-bade-c1509c163a25,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-workflowk59wk/series-workflowk59wk-convert-artifact-4234833161/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": "d1ccdd10-5b1d-44dd-8fbd-0201bf1e4917", "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-workflowk59wk/series-workflowk59wk-build-action-1379364581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 13:12:52 +0000 UTC FinishedAt: 2026-08-31 13:29:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6ff8983-1ae8-421c-bade-c1509c163a25,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-workflowk59wk/series-workflowk59wk-convert-artifact-4234833161/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": "d1ccdd10-5b1d-44dd-8fbd-0201bf1e4917", "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-workflowk59wk/series-workflowk59wk-build-action-1379364581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 13:29:29 +0000 UTC FinishedAt: 2026-08-31 13:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 13:29:29 +0000 UTC FinishedAt: 2026-08-31 13:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 13:29:29 +0000 UTC FinishedAt: 2026-08-31 13:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 13:29:29 +0000 UTC FinishedAt: 2026-08-31 13:31:17 +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:*d1ccdd10-5b1d-44dd-8fbd-0201bf1e4917,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-workflowk59wk/series-workflowk59wk-build-action-1379364581/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-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"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:*6fff6eee-8074-401f-9f22-e4c192c199ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1ccdd10-5b1d-44dd-8fbd-0201bf1e4917,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-workflowk59wk/series-workflowk59wk-build-action-1548796300/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-workflowk59wk/series-workflowk59wk-build-action-1379364581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 13:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 13:31:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"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-workflowk59wk/series-workflowk59wk-convert-artifact-2561786462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 13:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 13:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 13:31:27 +0000 UTC FinishedAt: 2026-08-31 13:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 13:31:37 +0000 UTC FinishedAt: 2026-08-31 16:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk59wk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_type_snprintf_show","btf_type_seq_show_flags","bpf_snprintf_btf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f62a9b82700c718cdf619fb36aaab31015ff87eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_EVENTS"],"series_id":"a53e4eb9-57cd-4f3d-a081-873d90cb628a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 13:31:37 +0000 UTC FinishedAt: 2026-08-31 16:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fff6eee-8074-401f-9f22-e4c192c199ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1ccdd10-5b1d-44dd-8fbd-0201bf1e4917,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-workflowk59wk/series-workflowk59wk-build-action-1548796300/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-workflowk59wk/series-workflowk59wk-build-action-1379364581/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-workflowk59wk/series-workflowk59wk-convert-artifact-2561786462/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,}