Name: series-workflowdsqgc Phase: Succeeded StartedAt: 2026-09-06 18:11:49 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[0] Phase: Succeeded StartedAt: 2026-09-06 18:11:49 +0000 UTC FinishedAt: 2026-09-06 18:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 18:11:49 +0000 UTC FinishedAt: 2026-09-06 18:32:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSCTL" ], "series_id": "8df0e9e8-9874-4bb5-9c0e-7735456eb071" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "proc_doulongvec_ms_jiffies_minmax", "proc_dointvec_ms_jiffies_minmax" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7LAogICAgJiMzNDtwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3lzY3RsIGNvbnZlcnNpb24gaGFuZGxlcnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgcGVyZm9ybSBtaW4vbWF4IHJhbmdlIGNoZWNrcyAoZW5hYmxpbmcga19wdHJfcmFuZ2VfY2hlY2s9dHJ1ZSBpbiBwcm9jX2ludF9jb252IGFuZCBwcm9jX3Vsb25nX2NvbnYpIGFuZCBhZGRzIGFuIElOVF9NQVggdmFsaWRhdGlvbiBjaGVjayBpbiBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MzE6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5pbmRleCAyMTNhZTFkNmEwMTQ3Li40NzM3NDMxZmRiMTZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmNcbkBAIC0xODEsMTIgJiM0MzsxODEsMTUgQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuJiM0MztcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbiB9XG4gXG4gc3RhdGljIGludCBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMoY29uc3QgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIpXG4ge1xuJiM0MztcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRyZXR1cm4gcHJvY191bG9uZ191MmtfY29udl91b3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfbXNlY3NfdG9famlmZmllcyk7XG4gfVxuIFxuQEAgLTE5NSwxMCAmIzQzOzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiBcdHJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4mIzQzO1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4tXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuJiM0MztcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgICAgc3lzY3RsX3Uya191bG9uZ19jb252X21zLCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXMpO1xuIH1cbiBcbkBAIC0yMjksOCAmIzQzOzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4mIzQzO1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG5AQCAtMzMzLDcgJiM0MzszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuLVx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTtcbiYjNDM7XHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7LAogICAgJiMzNDtwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgc3lzY3RsIGhhbmRsZXJzIGZvciBqaWZmaWVzIGNvbnZlcnNpb25zIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IGVuYWJsZSBtaW4vbWF4IHJhbmdlIGNoZWNrcyBhbmQgYWRkcyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiB1c2VyLXN1cHBsaWVkIG1pbGxpc2Vjb25kIHZhbHVlcy4gVGhlc2Ugc3lzY3RsIHByb2MgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mvc3lzIHN5c2N0bCBub2RlcyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBjb252ZXJzaW9uIGFuZCBib3VuZGFyeSBjaGVja2luZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmZjQ4MDY5M2Q0YmI0NDdjYTY3ZDZlYmIyOTExYmI2MWFkYTNiM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jCmluZGV4IDIxM2FlMWQ2YTAxNDcuLjQ3Mzc0MzFmZGIxNmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKQEAgLTE4MSwxMiAmIzQzOzE4MSwxNSBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLAogCQkJCQkgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLAogCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7Ci0JcmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsCiYjNDM7CXJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsCiAJCQkgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpOwogfQogCiBzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cikKIHsKJiM0MzsJaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gcHJvY191bG9uZ191MmtfY29udl91b3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfbXNlY3NfdG9famlmZmllcyk7CiB9CiAKQEAgLTE5NSwxMCAmIzQzOzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cikKIAlyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsCi0JCQkJCSBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsCiYjNDM7CQkJCQkJaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKQogewotCXJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsCiYjNDM7CXJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSwKIAkJCSAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7CiB9CiAKQEAgLTIyOSw4ICYjNDM7MjMyLDggQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKLQkJCQkJIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKJiM0MztzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKJiM0MzsJCQkJCQlpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0zMzMsNyAmIzQzOzMzNiw3IEBAIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsCiAJCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLAotCQkJCSAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyk7CiYjNDM7CQkJCSAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpOwogfQogRVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgUGF0Y2gqKgoKT2theSwgc28gd2UgbmVlZCB0byBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHByYWN0aWNhbCBhcHByb2FjaC4gTGV0JiMzOTtzIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZpcnN0LiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGluIHRoaXMgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgdGhlICplbnRpcmUqIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmluKiB0aGF0IGZpbGUuIFByaW1hcmlseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXNjdGwgb3IgcHJvYyBmdW5jdGlvbnMsIGlmIGFueSwgYXJlIGRlZmluZWQgYW5kLCBjcnVjaWFsbHksICpob3cqIHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBqaWZmaWVzIGNvbnRleHQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGhlIHdheSB0aGVzZSBmdW5jdGlvbnMgYXJlIGVtcGxveWVkPyBUaGlzIGluaXRpYWwgc3dlZXAgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBwcm9wb3NlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2guIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7c2hhcGUmIzM0OyBvZiB0aGUgY29kZSBhbmQgd2hlcmUgdGhlIHNlbnNpdGl2ZSBvciBjcml0aWNhbCBhcmVhcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL2ppZmZpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0XHRcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTc0Olx0XHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE3NTpcdHtcbiAxNzY6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE3NzpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTgxOlx0XHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTgyOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxODM6XHR7XG4gMTg0Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIDE4NTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIDE4OTpcdHtcbiAxOTA6XHRcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4gMTkxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE5MjpcdFxuIDE5MzpcdFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIDE5NDpcdH1cbiAxOTU6XHRcbiAxOTY6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiAxOTc6XHR7XG4gMTk4Olx0XHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuIDIwMjpcdFx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gMjA1Olx0XHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiAyMDY6XHR9XG4gMjA3Olx0XG4gMjA4Olx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxuIDIwOTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAyMTA6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjExOlx0e1xuIDIxMjpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMjE2Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMjE3Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMTg6XHR7XG4gMjE5Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxuIDIyMzpcdFx0XHRcdFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAyMjk6XHRcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAyMzA6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHJldHVybiAtRU5PU1lTO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbiAyMzY6XHRcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjM3Olx0e1xuIDIzODpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjM5Olx0fVxuIDI0MDpcdCNlbmRpZlxuIDI0MTpcdFxuIDI0MjpcdC8qKlxuIDI0MzpcdCAqIHByb2NfZG9pbnR2ZWNfamlmZmllcyAtIHJlYWQgYSB2ZWN0b3Igb2YgaW50ZWdlcnMgYXMgc2Vjb25kc1xuIDI0NDpcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuIDI0NTpcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcbiAyNDY6XHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcbiAyNDc6XHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXG4gMjQ4Olx0ICogQHBwb3M6IGZpbGUgcG9zaXRpb25cbiAyNDk6XHQgKlxuIDI1MDpcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxuIDI1MTpcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXG4gMjUyOlx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIHNlY29uZHMsIGFuZCBhcmUgY29udmVydGVkIGludG9cbiAyNTM6XHQgKiBqaWZmaWVzLlxuIDI1NDpcdCAqXG4gMjU1Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4gMjU2Olx0ICovXG4gMjU3Olx0aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbiAyNTg6XHRcdFx0XHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4gMjU5Olx0e1xuIDI2MDpcdFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gMjYxOlx0XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XG4gMjYyOlx0fVxuIDI2MzpcdEVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19qaWZmaWVzKTtcbiAyNjQ6XHRcbiAyNjU6XHQvKipcbiAyNjY6XHQgKiBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzIC0gcmVhZCBhIHZlY3RvciBvZiBpbnRlZ2VycyBhcyAxL1VTRVJfSFogc2Vjb25kc1xuIDI2NzpcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuIDI2ODpcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcbiAyNjk6XHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGppZmZpZXMgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZCwgYXMgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGltaW5nIGFuZCBzY2hlZHVsaW5nIGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgYW55IGF0b21pYyBvcGVyYXRpb25zIHVzZWQgZm9yIHVwZGF0ZXMsIGFuZCBob3cgdGhlIHRpbWVyIGludGVycnVwdHMgaW50ZXJhY3Qgd2l0aCB0aGlzIGdsb2JhbCBjb3VudGVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIHdyYXAtYXJvdW5kIGlzc3VlcyBhbmQgaG93IHRob3NlIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiA2NC1iaXQgamlmZmllcyBvbiBtb2Rlcm4gc3lzdGVtcy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlIEkmIzM5O20gcnVubmluZyBvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBhcyBudW1lcm91cyBwYXJ0cyBvZiB0aGUga2VybmVsIHJlbHkgb24gamlmZmllcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZnVuY3Rpb25zIHRoYXQgZ2V0IG9yIHNldCBqaWZmaWVzLCBhbmQgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gb3ZlcmFsbCBrZXJuZWwgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhpZ2gtZnJlcXVlbmN5IGV2ZW50IGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXG4gMjcxOlx0ICogQHBwb3M6IHBvaW50ZXIgdG8gdGhlIGZpbGUgcG9zaXRpb25cbiAyNzI6XHQgKlxuIDI3MzpcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxuIDI3NDpcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXG4gMjc1Olx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIDEvVVNFUl9IWiBzZWNvbmRzLCBhbmRcbiAyNzY6XHQgKiBhcmUgY29udmVydGVkIGludG8gamlmZmllcy5cbiAyNzc6XHQgKlxuIDI3ODpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLlxuIDI3OTpcdCAqL1xuIDI4MDpcdGludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDI4MTpcdFx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4gMjgyOlx0e1xuIDI4MzpcdFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gMjg0Olx0XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xuIDI4NTpcdH1cbiAyODY6XHRFWFBPUlRfU1lNQk9MKHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMpO1xuIDI4NzpcdFxuIDI4ODpcdC8qKlxuIDI4OTpcdCAqIHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyAtIHJlYWQgYSB2ZWN0b3Igb2YgaW50ZWdlcnMgYXMgMSBtaWxsaXNlY29uZHNcbiAyOTA6XHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcbiAyOTE6XHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXG4gMjkyOlx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXG4gMjkzOlx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxuIDI5NDpcdCAqIEBwcG9zOiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZVxuIDI5NTpcdCAqXG4gMjk2Olx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVx1MDAzZW1heGxlbi9zaXplb2YodW5zaWduZWQgaW50KSBpbnRlZ2VyXG4gMjk3Olx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy5cbiAyOTg6XHQgKiBUaGUgdmFsdWVzIHJlYWQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gMS8xMDAwIHNlY29uZHMsIGFuZFxuIDI5OTpcdCAqIGFyZSBjb252ZXJ0ZWQgaW50byBqaWZmaWVzLlxuIDMwMDpcdCAqXG4gMzAxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4gMzAyOlx0ICovXG4gMzAzOlx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuIDMwNDpcdFx0XHRzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMDU6XHR7XG4gMzA2Olx0XHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbiAzMDc6XHRcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcbiAzMDg6XHR9XG4gMzA5Olx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMpO1xuIDMxMDpcdFxuIDMxMTpcdGludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDMxMjpcdFx0XHRcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMTM6XHR7XG4gMzE0Olx0XHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbiAzMTU6XHRcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gMzE2Olx0fVxuIDMxNzpcdFxuIDMxODpcdC8qKlxuIDMxOTpcdCAqIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCAtIHJlYWQgYSB2ZWN0b3Igb2YgbWlsbGlzZWNvbmQgdmFsdWVzIHdpdGggbWluL21heCB2YWx1ZXNcbiAzMjA6XHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcbiAzMjE6XHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXG4gMzIyOlx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXG4gMzIzOlx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxuIDMyNDpcdCAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXG4gMzI1Olx0ICpcbiAzMjY6XHQgKiBSZWFkcy93cml0ZXMgdXAgdG8gdGFibGUtXHUwMDNlbWF4bGVuL3NpemVvZih1bnNpZ25lZCBsb25nKSB1bnNpZ25lZCBsb25nXG4gMzI3Olx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy4gVGhlIHZhbHVlc1xuIDMyODpcdCAqIGFyZSB0cmVhdGVkIGFzIG1pbGxpc2Vjb25kcywgYW5kIGNvbnZlcnRlZCB0byBqaWZmaWVzIHdoZW4gdGhleSBhcmUgc3RvcmVkLlxuIDMyOTpcdCAqXG4gMzMwOlx0ICogVGhpcyByb3V0aW5lIHdpbGwgZW5zdXJlIHRoZSB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5XG4gMzMxOlx0ICogdGFibGUtXHUwMDNlZXh0cmExIChtaW4pIGFuZCB0YWJsZS1cdTAwM2VleHRyYTIgKG1heCkuXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbiAzMzQ6XHQgKi9cbiAzMzU6XHRpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDMzNjpcdFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMzc6XHR7XG4gMzM4Olx0XHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuIDMzOTpcdFx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gMzQwOlx0fVxuIDM0MTpcdEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcbiAzNDI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBpbnZlc3RpZ2F0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBKaWZmaWVzIGFuZCBUaW1lcnMqKgoKQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBwaW5wb2ludCB3aGVyZSBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBrZXJuZWwgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5JiMzOTtyZSBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9ucyBhcmUuIEFyZSB0aGV5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcGFydCBvZiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zPyBBcmUgdGhleSB1c2VkIGluIGFueSBzcGVjaWZpYyBtb25pdG9yaW5nIHRvb2xzIG9yIHBlcmZvcm1hbmNlIHR1bmluZ3M/CgpJJiMzOTttIHRoaW5raW5nIHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIHByb2NmcyBlbnRyaWVzIHRvIGV4cG9zZSBhbmQgbW9kaWZ5IGludGVybmFsIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aW1pbmcsIG9yIHRpbWUgaW50ZXJ2YWxzLCBvciBwZXJoYXBzIGV2ZW4gcmVsYXRlZCB0byBgamlmZmllc2AgaW4gc29tZSB3YXksIHByb2JhYmx5IHVzZWQgZm9yIHJlYWRpbmcgYW5kIHVwZGF0aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgZGVhbGluZyB3aXRoICYjMzQ7bWlsbGlzZWNvbmRzJiMzNDsgKGBtc2ApIGFuZCAmIzM0O2ppZmZpZXMsJiMzNDsgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGJvdGggdGltaW5nIHJlbGF0ZWQsIHdpdGggYSBtaW4vbWF4IHJlc3RyaWN0aW9uOyBwcm9iYWJseSBmb3IgYSBzZXR0aW5nIHRoYXQgaXMgYmVzdCBleHByZXNzZWQgYXMgYSByYW5nZS4KCk15IGltbWVkaWF0ZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlaXIgZXhpc3RlbmNlLiBUaGVuIEkgY2FuIGFzc2VzcyB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoaW5ncyBsaWtlIHN5c3RlbSBwZXJmb3JtYW5jZSwgdGltZXIgYWNjdXJhY3ksIG9yIGV2ZW4gcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiB0aGUgc2V0dGluZ3MgdGhleSBtYW5hZ2UgYXJlIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXh8cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zNjE9cGFycG9ydF9kZXZpY2Vfc3lzY3RsX3RlbXBsYXRlID0ge1xuLS1cbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zNjgtXHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jOjM2OTpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zNzAtXHRcdFx0LmV4dHJhMVx0XHQ9ICh2b2lkKikgXHUwMDI2cGFycG9ydF9taW5fdGltZXNsaWNlX3ZhbHVlLFxuLS1cbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zOTE9cGFycG9ydF9kZWZhdWx0X3N5c2N0bF90YWJsZSA9IHtcbi0tXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtMzk4LVx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYzozOTk6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtNDAwLVx0XHRcdC5leHRyYTFcdFx0PSAodm9pZCopIFx1MDAyNnBhcnBvcnRfbWluX3RpbWVzbGljZV92YWx1ZSxcbi0tXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTE0Mz1zdGF0aWMgaW50IHN5c2N0bF9jaGVja190YWJsZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKVxuLS1cbmZzL3Byb2MvcHJvY19zeXNjdGwuYy0xMTYwLVx0XHQgICAgKGVudHJ5LVx1MDAzZXByb2NfaGFuZGxlciA9PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KSB8fFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjExNjE6XHRcdCAgICAoZW50cnktXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHtcbmZzL3Byb2MvcHJvY19zeXNjdGwuYy0xMTYyLVx0XHRcdGlmICghZW50cnktXHUwMDNlZGF0YSlcbi0tXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTI5OD1zdGF0aWMgc3RydWN0IGN0bF9kaXIgKnN5c2N0bF9ta2Rpcl9wKHN0cnVjdCBjdGxfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgpXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjAtICogcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcygpLCBwcm9jX2RvaW50dmVjX21pbm1heCgpLFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjEzNjE6ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KCksIHByb2NfZG91bG9uZ3ZlY19taW5tYXgoKVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaD02NDc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmgtNjQ4LVx0XHRcdCAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg6NjQ5OmludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmgtNjUwLVx0XHRcdFx0ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmluY2x1ZGUvbGludXgvamlmZmllcy5oPTY1Mz1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NTQtXHRcdFx0ICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaDo2NTU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1Ni1cdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMDk9RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTMxMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTE6aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzEyLVx0XHRcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE4LS8qKlxua2VybmVsL3RpbWUvamlmZmllcy5jOjMxOTogKiBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXggLSByZWFkIGEgdmVjdG9yIG9mIG1pbGxpc2Vjb25kIHZhbHVlcyB3aXRoIG1pbi9tYXggdmFsdWVzXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzIwLSAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMzQtICovXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzM1OmludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM2LVx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozNDE6RVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTM0Mi1cbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNjY4PXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM2NzgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjc5Olx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4MC1cdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuLS1cbm5ldC9yZHMvc3lzY3RsLmM9NTI9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcmRzX3N5c2N0bF9yZHNfdGFibGVbXSA9IHtcbi0tXG5uZXQvcmRzL3N5c2N0bC5jLTU3LVx0XHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxubmV0L3Jkcy9zeXNjdGwuYzo1ODpcdFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxubmV0L3Jkcy9zeXNjdGwuYy01OS1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbixcbi0tXG5uZXQvcmRzL3N5c2N0bC5jLTY2LVx0XHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxubmV0L3Jkcy9zeXNjdGwuYzo2NzpcdFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxubmV0L3Jkcy9zeXNjdGwuYy02OC1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLFxuLS1cbm5ldC9yeHJwYy9zeXNjdGwuYz0zND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByeHJwY19zeXNjdGxfdGFibGVbXSA9IHtcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmMtNTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9yeHJwYy9zeXNjdGwuYzo1OTpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5uZXQvcnhycGMvc3lzY3RsLmMtNjAtXHRcdC5leHRyYTFcdFx0PSAodm9pZCAqKVx1MDAyNm9uZV9qaWZmeSxcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmMtNjctXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9yeHJwYy9zeXNjdGwuYzo2ODpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5uZXQvcnhycGMvc3lzY3RsLmMtNjktXHRcdC5leHRyYTFcdFx0PSAodm9pZCAqKVx1MDAyNm9uZV9qaWZmeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXNjdGwgSGFuZGxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIHN5c2N0bCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAuIEkgY2FuIHNlZSB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgIHBvcHMgdXAgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCB0aHJvdWdoIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZvciB0aG9zZSBuZWlnaGJvdXIgdGFibGUgcGFyYW1ldGVycyBsaWtlIGBiYXNlX3JlYWNoYWJsZV90aW1lX21zYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYWNjZXNzaWJsZSB2aWEgYC9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC8uLi5gIG9yIHRoZSBpcHY2IGVxdWl2YWxlbnQuIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGlzIGEgbGl0dGxlIG1vcmUgd2lkZXNwcmVhZCwgZm91bmQgaW4gYGRyaXZlcnMvcGFycG9ydC9wcm9jZnMuY2AsIGBuZXQvcmRzL3N5c2N0bC5jYCwgYW5kIGBuZXQvcnhycGMvc3lzY3RsLmNgLiBBbmQsIG5hdHVyYWxseSwgZGlyZWN0IHdyaXRlcyB0byBgL3Byb2Mvc3lzLy4uLmAgYWxzbyBjYWxsIHRoZXNlIGhhbmRsZXJzLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIFRoZSBmaXJzdCBwb2ludCBpcyBpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgd2hlcmUgdGhleSYjMzk7dmUgc3dpdGNoZWQgYHByb2NfaW50X2NvbnZgIGZyb20gYGZhbHNlYCB0byBgdHJ1ZWAuIFNvIHRoZSBtaW4vbWF4IGNoZWNrIGlzIG5vdyBlbmFibGVkLCBhbmQgdGhleSYjMzk7cmUgZml4aW5nIGFuIGVhcmxpZXIgb3ZlcnNpZ2h0LgoKTmV4dCwgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGBpZiAoKnVfcHRyICZndDsgSU5UX01BWCkgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBpcyBjcnVjaWFsIOKAkyB0aGV5JiMzOTtyZSBlbnN1cmluZyB0aGF0IHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlIGRvZXNuJiMzOTt0IGV4Y2VlZCB0aGUgbWF4aW11bSBpbnRlZ2VyIHZhbHVlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkb3duIHRoZSBsaW5lLgoKVGhlbiwgdGhleSYjMzk7dmUgcmVuYW1lZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIHRvIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBkaWQgdGhlIHNhbWUgdGhpbmcgd2l0aCB0aGUgYm9vbCBhcmd1bWVudCB0byBgcHJvY191bG9uZ19jb252YCwgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYCwgYW5kIGVuYWJsZWQgdGhlIG1pbi9tYXggY2hlY2sgaGVyZSB0b28uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5LgoKQW5kLCBmaW5hbGx5LCBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YCBub3cgY2FsbHMgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuCgpUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gbG9vayBhdCBob3cgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YCBhY3R1YWxseSB3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjdGwuaD0xMjQ9aW50IHByb2NfZG91bG9uZ3ZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTQyLSAqL1xuaW5jbHVkZS9saW51eC9zeXNjdGwuaDoxNDM6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaC0xNDQtXHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmg9MTQ3PWludCBwcm9jX3VpbnRfY29udih1bG9uZyAqdV9wdHIsIHVpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTUwLVx0XHQgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWludCAqa19wdHIpKTtcbmluY2x1ZGUvbGludXgvc3lzY3RsLmg6MTUxOmludCBwcm9jX3Vsb25nX2NvbnYodWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTE1Mi1cdFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9NTA2PWludCBwcm9jX2ludF91MmtfY29udl91b3AoY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBjb25zdCBib29sICpuZWdwLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy01MjMtLyoqXG5rZXJuZWwvc3lzY3RsLmM6NTI0OiAqIHByb2NfaW50X2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cbmtlcm5lbC9zeXNjdGwuYy01MjUtICpcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTM5LSAqL1xua2VybmVsL3N5c2N0bC5jOjU0MDppbnQgcHJvY19pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsIGludCBkaXIsXG5rZXJuZWwvc3lzY3RsLmMtNTQxLVx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9NTczPXN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4tLVxua2VybmVsL3N5c2N0bC5jLTU3Ny1cbmtlcm5lbC9zeXNjdGwuYzo1Nzg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3N5c2N0bC5jLTU3OS1cdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3N5c2N0bC5jLTU4MC17XG5rZXJuZWwvc3lzY3RsLmM6NTgxOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvc3lzY3RsLmMtNTgyLVx0XHRcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTg2LVxua2VybmVsL3N5c2N0bC5jOjU4NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3N5c2N0bC5jLTU4OC1cdFx0XHRcdCAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC9zeXNjdGwuYy01ODkte1xua2VybmVsL3N5c2N0bC5jOjU5MDpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG5rZXJuZWwvc3lzY3RsLmMtNTkxLVx0XHRcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcbi0tXG5rZXJuZWwvc3lzY3RsLmM9ODIwPWludCBwcm9jX2RvaW50dmVjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG4tLVxua2VybmVsL3N5c2N0bC5jLTgyMy1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcbmtlcm5lbC9zeXNjdGwuYzo4MjQ6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252IH0pO1xua2VybmVsL3N5c2N0bC5jLTgyNS19XG4tLVxua2VybmVsL3N5c2N0bC5jPTg2ND1pbnQgcHJvY19kb2ludHZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3N5c2N0bC5jLTg2Ny1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcbmtlcm5lbC9zeXNjdGwuYzo4Njg6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252X21pbm1heCB9KTtcbmtlcm5lbC9zeXNjdGwuYy04NjktfVxuLS1cbmtlcm5lbC9zeXNjdGwuYz05NDY9RVhQT1JUX1NZTUJPTF9HUEwocHJvY19kb3U4dmVjX21pbm1heCk7XG4tLVxua2VybmVsL3N5c2N0bC5jLTk0OC0vKipcbmtlcm5lbC9zeXNjdGwuYzo5NDk6ICogcHJvY191bG9uZ19jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXG5rZXJuZWwvc3lzY3RsLmMtOTUwLSAqXG4tLVxua2VybmVsL3N5c2N0bC5jLTk2My0gKi9cbmtlcm5lbC9zeXNjdGwuYzo5NjQ6aW50IHByb2NfdWxvbmdfY29udih1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy05NjUtXHRcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXG4tLVxua2VybmVsL3N5c2N0bC5jPTEwMzY9c3RhdGljIGludCBwcm9jX3Vsb25nX2sydV9jb252KHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMDQwLVxua2VybmVsL3N5c2N0bC5jOjEwNDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXG5rZXJuZWwvc3lzY3RsLmMtMTA0Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvc3lzY3RsLmMtMTA0My17XG5rZXJuZWwvc3lzY3RsLmM6MTA0NDpcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC9zeXNjdGwuYy0xMDQ1LVx0XHRcdCAgICAgICBwcm9jX3Vsb25nX3Uya19jb252LCBwcm9jX3Vsb25nX2sydV9jb252KTtcbi0tXG5rZXJuZWwvc3lzY3RsLmM9MTA4OT1pbnQgcHJvY19kb3Vsb25ndmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTA5Mi1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX1VMT05HLFxua2VybmVsL3N5c2N0bC5jOjEwOTM6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAudWxvbmdfY29udiA9IGRvX3Byb2NfdWxvbmdfY29udiB9KTtcbmtlcm5lbC9zeXNjdGwuYy0xMDk0LX1cbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTEwMi0gKiBAcHBvczogZmlsZSBwb3NpdGlvblxua2VybmVsL3N5c2N0bC5jOjExMDM6ICogQGNvbnY6IEN1c3RvbSBjb252ZXJ0ZXIgY2FsbCBiYWNrLiBEZWZhdWx0cyB0byBkb19wcm9jX2ludF9jb252XG5rZXJuZWwvc3lzY3RsLmMtMTEwNC0gKlxuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMTEwPWludCBwcm9jX2RvaW50dmVjX2NvbnYoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTExNS1cdGlmICghY29udilcbmtlcm5lbC9zeXNjdGwuYzoxMTE2Olx0XHRjb252ID0gZG9fcHJvY19pbnRfY29udjtcbmtlcm5lbC9zeXNjdGwuYy0xMTE3LVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0xNTI9c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X21zKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxua2VybmVsL3RpbWUvamlmZmllcy5jOjE1NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU4LVx0XHRcdFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTkte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjE2MDpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2MS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTY0OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTY1LVx0XHRcdFx0XHQgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjE2ODpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzItXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzQtXHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTc2Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3OS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xODEtXHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4My17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xODUtXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MTk2PXN0YXRpYyBpbnQgc3lzY3RsX2sydV91bG9uZ19jb252X21zKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjAxOnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwMi1cdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDQ6XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVx0XHRcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwOC0jZWxzZSAvLyBDT05GSUdfU1lTQ1RMXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTAtXHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTQtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjE1OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVx0XHRcdFx0XHQgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjEtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjIyOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjI4OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjI5LVx0XHRcdFx0XHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjM1OnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIzNi1cdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTI1Nz1pbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyNjE6XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjYyLX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yODMtXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyODQ6XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTMwMz1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwNi1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDgtfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMTE9aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMxNTpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE2LX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMzOC1cdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzM5Olx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBjaGFuZ2VzIGluIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBhcmUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZpcnN0LCBhIGRldGFpbGVkIGxvb2sgYXQgdGhlIG1vZGlmaWNhdGlvbnM6CgoqICAgYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgOiBJdCYjMzk7cyBjYWxsaW5nIGBwcm9jX2ludF9jb252YCBub3cgd2l0aCBgdHJ1ZWAgZm9yIGBrX3B0cl9yYW5nZV9jaGVja2AuIFRoaXMgaXMgd29ydGggbm90aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBwcmV2aW91cyBsb2dpYyBkaWRuJiMzOTt0IGhhdmUgdGhhdCBjaGVjay4KKiAgIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgOiBUaGVyZSYjMzk7cyBhIG5ldyBjaGVjayBgaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgZXhwbGljaXRseSBsaW1pdGluZyB0aGUgaW5wdXQgcmFuZ2UuIFRoaXMgY291bGQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBieXBhc3NlcyBpZiBub3QgY29ycmVjdGx5IGhhbmRsZWQgZWxzZXdoZXJlLgoqICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGA6IExvb2tzIGxpa2UgaXQgd2FzIHJlbmFtZWQgZnJvbSBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgLCBhbmQgbm93IHVzZXMgYHRydWVgIGZvciBga19wdHJfcmFuZ2VfY2hlY2tgIHdoZW4gY2FsbGluZyBgcHJvY191bG9uZ19jb252YC4gQWdhaW4sIHRoaXMgcmFuZ2UgY2hlY2tpbmcgaXMga2V5LgoqICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGA6IEl0JiMzOTtzIGNhbGxpbmcgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgYW5kIHJlbGV2YW50PyBZZXMsIHRoZSBrZXJuZWwgc3lzY3RsIGluZnJhc3RydWN0dXJlIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgL3Byb2Mvc3lzLy4uLmAgZW50cmllcywgc28gdGhhdCBpcyBhIGJpZyB5ZXMuIEZ1bmN0aW9ucyBsaWtlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZnJvbSB1c2VyIHNwYWNlLiBOb3csIHdoYXQgYWJvdXQgY29uZmlnIHJlcXVpcmVtZW50cz8gYENPTkZJR19TWVNDVExgIGFuZCBgQ09ORklHX1BST0NfU1lTQ1RMYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLgoKSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBga2VybmVsL3RpbWUvamlmZmllcy5jYCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBsaWtlIGAjaWZkZWZgIGJsb2Nrcy4gSSBzYXcgb25lIGF0IGxpbmUgMjA4LCBzbyBJJiMzOTtsbCBnbyBiYWNrIGFuZCBjaGVjayBsaW5lcyAxMzAgdG8gMTgwIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQgYW5kIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBgI2Vsc2UgLy8gQ09ORklHX1NZU0NUTGAgYml0cyBhcmVuJiMzOTt0IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdH1cbiAxMjE6XHRcbiAxMjI6XHRzdGF0aWMgaW50IHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6KGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0cilcbiAxMjM6XHR7XG4gMTI0Olx0XHRyZXR1cm4gcHJvY19pbnRfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgbmVncCwgY2xvY2tfdF90b19qaWZmaWVzKTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX2Nsb2NrX3QoY29uc3QgdWxvbmcgdmFsKVxuIDEyODpcdHtcbiAxMjk6XHRcdHJldHVybiBqaWZmaWVzX3RvX2Nsb2NrX3QodmFsKTtcbiAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X3VzZXJoeihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4gMTMzOlx0e1xuIDEzNDpcdFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9qaWZmaWVzX3RvX2Nsb2NrX3QpO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgdWxvbmcgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMoY29uc3QgdWxvbmcgdmFsKVxuIDEzODpcdHtcbiAxMzk6XHRcdHJldHVybiBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya19pbnRfY29udl9tcyhjb25zdCBib29sICpuZWdwLCBjb25zdCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIpXG4gMTQzOlx0e1xuIDE0NDpcdFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcbiAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVsb25nIHZhbClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRyZXR1cm4gamlmZmllc190b19tc2Vjcyh2YWwpO1xuIDE1MDpcdH1cbiAxNTE6XHRcbiAxNTI6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfaW50X2NvbnZfbXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxuIDE1MzpcdHtcbiAxNTQ6XHRcdHJldHVybiBwcm9jX2ludF9rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBuZWdwLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTU1Olx0fVxuIDE1NjpcdFxuIDE1NzpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAxNTg6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMTU5Olx0e1xuIDE2MDpcdFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4gMTYxOlx0XHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcbiAxNjI6XHR9XG4gMTYzOlx0XG4gMTY0Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAxNjU6XHRcdFx0XHRcdFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAxNjY6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE2NzpcdHtcbiAxNjg6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE2OTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEppZmZpZXMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgYGppZmZpZXNgIGFyZSBoYW5kbGVkIGluIHRoaXMga2VybmVsIHZlcnNpb24sIHBhcnRpY3VsYXJseSBob3cgaXQgcmVsYXRlcyB0byBgQ09ORklHX1NZU0NUTGAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHJpZ2h0IGF3YXkuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBmaW5kIHRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGFuZCB0aGVuIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IGBqaWZmaWVzYCBpbnRlcmFjdHMgd2l0aCBhbnkgcG90ZW50aWFsIHN5c2N0bCB2YXJpYWJsZXMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHdvcmsgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NZU0NUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL2ppZmZpZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmM9NzY9dm9pZCBfX2luaXQgcmVnaXN0ZXJfcmVmaW5lZF9qaWZmaWVzKGxvbmcgY3ljbGVzX3Blcl9zZWNvbmQpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTEwMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxMDE6I2lmZGVmIENPTkZJR19TWVNDVExcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xMDItc3RhdGljIHVsb25nIG11bHRfaHooY29uc3QgdWxvbmcgdmFsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yMDE9c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwNy1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDg6I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwOS1zdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTIxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgYFNZU0NUTGAgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBTWVNDVExgIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgIGZvciBmdXp6aW5nIGFuZCB0aGUgYXBwcm9wcmlhdGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gSSBzZWU6CgoqICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAKKiAgIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YAoqICAgYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AgKHdoaWNoIGlzIHN0YXRpYywgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbmxpbmluZykKKiAgIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIChhbHNvIHN0YXRpYykKKiAgIGBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4YCAobGlrZXdpc2UsIHN0YXRpYykKCk5leHQsIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGFuZCBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJdCBzZWVtcyB0aGV5IGFyZToKCiogICBgaW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpYAoqICAgYGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpYAoKSSYjMzk7bGwgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFzIGEgcmVsYXRlZCBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggdGhlIHByaW1hcnkgc3lzY3RsIGhhbmRsZXJzIGFyZSB0aG9zZSBmaXJzdCB0d28gYG1pbm1heGAgZnVuY3Rpb25zLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjaywgYXJlIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNgIGFmZmVjdGVkPyBObywganVzdCB0aGUgbWlubWF4IG9uZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAzLCB3aGljaCBzYXlzIHRvIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgYW5kIGFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBwYXRocy4KCkhlcmUsIHRoZSBwYXRjaCBpcyBmaXhpbmcgb3IgZW5hYmxpbmcgcmFuZ2UgY2hlY2tpbmcgKGBrX3B0cl9yYW5nZV9jaGVjayA9IHRydWVgKSB3aXRoaW4gYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4YCwgYW5kIGl0IGFsc28gYWRkcyBhbiBleHBsaWNpdCBjaGVjayBgKnVfcHRyICZndDsgSU5UX01BWGAgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBzeXNjdGwgaGFuZGxlcnMgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0byBnbyBhaGVhZCBhbmQgZGVjbGFyZSBpdCBmdXp6YWJsZSEKClNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlOgoKKiAgIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgCiogICBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAKCkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZToKCiogICBgU1lTQ1RMYAoqICAgYFBST0NfU1lTQ1RMYAoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgZW5vdWdoIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBQUk9DX1NZU0NUTDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7UFJPQ19TWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OywKICAgICYjMzQ7cHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogUFJPQ19TWVNDVEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKktjb25maWcgU2hlbmFuaWdhbnM6IFNZU0NUTC9QUk9DX1NZU0NUTCBWZXJpZmljYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBzaXR1YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIGFyZSByZWxldmFudCBzZXR0aW5ncyB0byBlbmFibGUgb3IgY29uZmlndXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBtb2R1bGUgb3IgZmVhdHVyZSB1c2VzIGBTWVNDVExgIG9yIGBQUk9DX1NZU0NUTGAsIG9yIG1heWJlIGJvdGgsIGJlY2F1c2UgdGhhdCBpbXBhY3RzIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBTbywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgYW5kIG1ha2Ugc3VyZSB0aG9zZSBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQuIFRoaXMgaW5pdGlhbCBhdWRpdCB3aWxsIGNsYXJpZnkgdGhlIGdyb3VuZHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DX1NZU0NUTHxjb25maWcgU1lTQ1RMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz02Nz1jb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuLS1cbmZzL3Byb2MvS2NvbmZpZy04Mi1cbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgU1lTQ1RMXG5mcy9wcm9jL0tjb25maWctODQtXHRib29sIFwmIzM0O1N5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xNzEyPWNvbmZpZyBIQVZFX1VJRDE2XG4tLVxuaW5pdC9LY29uZmlnLTE3MTQtXG5pbml0L0tjb25maWc6MTcxNTpjb25maWcgU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRVxuaW5pdC9LY29uZmlnLTE3MTYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE3MTktXG5pbml0L0tjb25maWc6MTcyMDpjb25maWcgU1lTQ1RMX0FSQ0hfVU5BTElHTl9OT19XQVJOXG5pbml0L0tjb25maWctMTcyMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTcyNi1cbmluaXQvS2NvbmZpZzoxNzI3OmNvbmZpZyBTWVNDVExfQVJDSF9VTkFMSUdOX0FMTE9XXG5pbml0L0tjb25maWctMTcyOC1cdGJvb2xcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yNzc1PWNvbmZpZyBSRVNPVVJDRV9LVU5JVF9URVNUXG4tLVxubGliL0tjb25maWcuZGVidWctMjc4Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjI3ODg6Y29uZmlnIFNZU0NUTF9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNzg5LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3Igc3lzY3RsXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzYKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmcy9wcm9jL0tjb25maWdgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9wcm9jL0tjb25maWdgIGFuZCBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIGNhbGxlZCBgQ09ORklHX1NZU0NUTGAuICBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgbWVudGFsbHkgZmxhZyB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiBub3cgZWZmaWNpZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlIHRlcm0gJiMzNDtTWVNDVEwmIzM0Oy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXR1cm4gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDssCiAgICAmIzM0O3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OywKICAgICYjMzQ7cHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeXNjdGwgY29udmVyc2lvbiBoYW5kbGVycyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBwZXJmb3JtIG1pbi9tYXggcmFuZ2UgY2hlY2tzIChlbmFibGluZyBrX3B0cl9yYW5nZV9jaGVjaz10cnVlIGluIHByb2NfaW50X2NvbnYgYW5kIHByb2NfdWxvbmdfY29udikgYW5kIGFkZHMgYW4gSU5UX01BWCB2YWxpZGF0aW9uIGNoZWNrIGluIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTg6MzE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKaW5kZXggMjEzYWUxZDZhMDE0Ny4uNDczNzQzMWZkYjE2ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwpAQCAtMTgxLDEyICYjNDM7MTgxLDE1IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsCiAJCQkJCSAgICAgIGludCAqa19wdHIsIGludCBkaXIsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKIHsKLQlyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSwKJiM0MzsJcmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSwKIAkJCSAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7CiB9CiAKIHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKQogewomIzQzOwlpZiAoKnVfcHRyICZndDsgSU5UX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTsKIH0KIApAQCAtMTk1LDEwICYjNDM7MTk4LDEwIEBAIHN0YXRpYyBpbnQgc3lzY3RsX2sydV91bG9uZ19jb252X21zKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKQogCXJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTsKIH0KIAotc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKLQkJCQkJIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKJiM0MztzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKJiM0MzsJCQkJCQlpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7Ci0JcmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSwKJiM0MzsJcmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLAogCQkJICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTsKIH0KIApAQCAtMjI5LDggJiM0MzsyMzIsOCBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLAogCXJldHVybiAtRU5PU1lTOwogfQogCi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLAotCQkJCQkgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKQomIzQzO3N0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLAomIzQzOwkJCQkJCWludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KQEAgLTMzMyw3ICYjNDM7MzM2LDcgQEAgaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwKIAkJCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsCi0JCQkJICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTsKJiM0MzsJCQkJICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7CiB9CiBFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoIHJlcXVlc3QuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGFib3V0IEtNU0FOIGZ1enppbmcgdmVyc3VzIEtBU0FOIG9yIHN0YW5kYXJkIGZ1enppbmcgaXMganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUga2VybmVsIGVuZ2luZWVyaW5nOyBwdXJlbHkgYSB0cmlhZ2UgcXVlc3Rpb24uIENvbXBsZXRlbHkgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgZm9jdXNlZCBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBzZWUgYSBmZXcga2V5IGNoYW5nZXM6CgoxLiAgSW4gYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgLCB0aGUgY2FsbCB0byBgcHJvY19pbnRfY29udmAgaGFzIGEgYGZhbHNlYCBjaGFuZ2VkIHRvIGB0cnVlYCBmb3IgdGhlIGBtaW5tYXhgIGZsYWcuCjIuICBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYCBub3cgaW5jbHVkZXMgYSBjaGVjayBgaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFNtYXJ0LCBhIGdvb2QgYm91bmRhcnkgY2hlY2suCjMuICBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBwcm9jX3Vsb25nX2NvbnZgIGNoYW5nZXMgdGhlIGJvb2xlYW4gZmxhZyBmcm9tIGBmYWxzZWAgdG8gYHRydWVgLgo0LiAgRmluYWxseSwgdGhlIGNhbGxiYWNrIG5hbWUgaW4gYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgZ2V0cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZS4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBlc3BlY2lhbGx5IGhvdyB0aGUgYG1pbm1heGAgZmxhZyBpbmZsdWVuY2VzIHRoZWlyIG9wZXJhdGlvbi4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIG15IHVzdWFsIHRvb2xzIHRvIGRpZyBpbnRvIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIGFuZCBvdGhlciByZWxldmFudCBjb2RlIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYWxsIGFib3V0IHZlcmlmeWluZyB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyB0aGF0IGJvb2xlYW4gZmxhZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jPTE1Mj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfaW50X2NvbnZfbXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTYtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTU3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE1OS17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTYxLVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9oeiwgc3lzY3RsX2sydV9pbnRfY29udl9oeik7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2My1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjQ6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2Ny17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTY4Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTY5LVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHosXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNzM6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NC1cdFx0XHRcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc1LXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNzY6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzctXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxua2VybmVsL3RpbWUvamlmZmllcy5jOjE4MDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4MS1cdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODQ6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0xOTY9c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDMte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjIwNDpcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDUtXHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDk6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIxMC1cdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIxNC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTYtXHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyMS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyMy1cdFx0XHRcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyNy1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIzNC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMzU6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjU3PWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2MC1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjItfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yODA9aW50IHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI4NDpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjg1LX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzA2LVx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzA3Olx0XHRcdFx0ICBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTMxMT1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE0LVx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1Olx0XHRcdFx0ICBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMTYtfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMzU9aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVx0cmV0dXJuIHByb2NfZG91bG9uZ3ZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMzk6XHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zNDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtaW5tYXhgIEltcGxlbWVudGF0aW9uIFRocm91Z2ggQ29udmVyc2lvbiBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZiBpbiBob3cgdGhlIHVuZGVybHlpbmcgdHlwZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGVpciBjb252ZXJzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBUaGVzZSBjb252ZXJzaW9ucywgb3IgdGhlaXIgYWJzZW5jZSwgYXJlIHdoZXJlIHRoZSBzdWJ0bGV0aWVzIG9mIHBvdGVudGlhbCBvdmVyZmxvdywgdHlwZSBwcm9tb3Rpb24sIG9yIGV2ZW4gaW1wbGljaXQgY2FzdGluZyBpc3N1ZXMgd2lsbCBsaWtlbHkgcmVzaWRlIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIGludGVnZXIgdHlwZXMgaW4gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZW0gaXMga2V5IHRvIG1ha2luZyBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IG9idmlvdXMsIG9yIHN1YnRsZSwgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfaW50X2NvbnZ8cHJvY191bG9uZ19jb252JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3N5c2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zeXNjdGwuYz01MDY9aW50IHByb2NfaW50X3Uya19jb252X3VvcChjb25zdCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsIGNvbnN0IGJvb2wgKm5lZ3AsXG4tLVxua2VybmVsL3N5c2N0bC5jLTUyMy0vKipcbmtlcm5lbC9zeXNjdGwuYzo1MjQ6ICogcHJvY19pbnRfY29udiAtIENoYW5nZSB1c2VyIG9yIGtlcm5lbCBwb2ludGVyIGJhc2VkIG9uIGRpcmVjdGlvblxua2VybmVsL3N5c2N0bC5jLTUyNS0gKlxuLS1cbmtlcm5lbC9zeXNjdGwuYy01MzktICovXG5rZXJuZWwvc3lzY3RsLmM6NTQwOmludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy01NDEtXHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuLS1cbmtlcm5lbC9zeXNjdGwuYz01NzM9c3RhdGljIGludCBzeXNjdGxfa2Vybl90b191c2VyX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTc3LVxua2VybmVsL3N5c2N0bC5jOjU3ODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvc3lzY3RsLmMtNTc5LVx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvc3lzY3RsLmMtNTgwLXtcbmtlcm5lbC9zeXNjdGwuYzo1ODE6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbmtlcm5lbC9zeXNjdGwuYy01ODItXHRcdFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxuLS1cbmtlcm5lbC9zeXNjdGwuYy01ODYtXG5rZXJuZWwvc3lzY3RsLmM6NTg3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9taW5tYXgoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvc3lzY3RsLmMtNTg4LVx0XHRcdFx0ICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3N5c2N0bC5jLTU4OS17XG5rZXJuZWwvc3lzY3RsLmM6NTkwOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC9zeXNjdGwuYy01OTEtXHRcdFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxuLS1cbmtlcm5lbC9zeXNjdGwuYz04MjA9aW50IHByb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtODIzLVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxua2VybmVsL3N5c2N0bC5jOjgyNDpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnYgfSk7XG5rZXJuZWwvc3lzY3RsLmMtODI1LX1cbi0tXG5rZXJuZWwvc3lzY3RsLmM9ODY0PWludCBwcm9jX2RvaW50dmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtODY3LVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxua2VybmVsL3N5c2N0bC5jOjg2ODpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4IH0pO1xua2VybmVsL3N5c2N0bC5jLTg2OS19XG4tLVxua2VybmVsL3N5c2N0bC5jPTk0Nj1FWFBPUlRfU1lNQk9MX0dQTChwcm9jX2RvdTh2ZWNfbWlubWF4KTtcbi0tXG5rZXJuZWwvc3lzY3RsLmMtOTQ4LS8qKlxua2VybmVsL3N5c2N0bC5jOjk0OTogKiBwcm9jX3Vsb25nX2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cbmtlcm5lbC9zeXNjdGwuYy05NTAtICpcbi0tXG5rZXJuZWwvc3lzY3RsLmMtOTYzLSAqL1xua2VybmVsL3N5c2N0bC5jOjk2NDppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxua2VybmVsL3N5c2N0bC5jLTk2NS1cdFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9MTAzNj1zdGF0aWMgaW50IHByb2NfdWxvbmdfazJ1X2NvbnYodWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4tLVxua2VybmVsL3N5c2N0bC5jLTEwNDAtXG5rZXJuZWwvc3lzY3RsLmM6MTA0MTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy0xMDQyLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC9zeXNjdGwuYy0xMDQzLXtcbmtlcm5lbC9zeXNjdGwuYzoxMDQ0Olx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxua2VybmVsL3N5c2N0bC5jLTEwNDUtXHRcdFx0ICAgICAgIHByb2NfdWxvbmdfdTJrX2NvbnYsIHByb2NfdWxvbmdfazJ1X2NvbnYpO1xuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMDg5PWludCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMDkyLVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfVUxPTkcsXG5rZXJuZWwvc3lzY3RsLmM6MTA5MzpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC51bG9uZ19jb252ID0gZG9fcHJvY191bG9uZ19jb252IH0pO1xua2VybmVsL3N5c2N0bC5jLTEwOTQtfVxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMTAyLSAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXG5rZXJuZWwvc3lzY3RsLmM6MTEwMzogKiBAY29udjogQ3VzdG9tIGNvbnZlcnRlciBjYWxsIGJhY2suIERlZmF1bHRzIHRvIGRvX3Byb2NfaW50X2NvbnZcbmtlcm5lbC9zeXNjdGwuYy0xMTA0LSAqXG4tLVxua2VybmVsL3N5c2N0bC5jPTExMTA9aW50IHByb2NfZG9pbnR2ZWNfY29udihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMTE1LVx0aWYgKCFjb252KVxua2VybmVsL3N5c2N0bC5jOjExMTY6XHRcdGNvbnYgPSBkb19wcm9jX2ludF9jb252O1xua2VybmVsL3N5c2N0bC5jLTExMTctXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipEaWdnaW5nIGludG8gSmlmZmllcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgamlmZmllc2AgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gcmVhbGx5IGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIGFuZCBmb2N1c2luZyBvbiB0aGUgYXJlYXMgYXJvdW5kIGxpbmVzIDE1MC0yNTAgYW5kIHRoZW4gYWdhaW4gYXJvdW5kIDMwMC0zNTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBjaHVuayBvZiB0aGUgY29yZSBsb2dpYyB0byBhbmFseXplLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgaW5jcmVtZW50aW5nIGhhcHBlbnMsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGFuZCBob3cgaXQgYWxsIHRpZXMgaW50byB0aGUgYnJvYWRlciB0aW1la2VlcGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc2VjdGlvbnMgYmVjYXVzZSB0aGV5JiMzOTtyZSBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IHJhY2UgY29uZGl0aW9ucyBhbmQgb3ZlcmZsb3cgaXNzdWVzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR9XG4gMTUxOlx0XG4gMTUyOlx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X21zKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbiAxNTM6XHR7XG4gMTU0Olx0XHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xuIDE1NTpcdH1cbiAxNTY6XHRcbiAxNTc6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTU4Olx0XHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE2MTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9oeiwgc3lzY3RsX2sydV9pbnRfY29udl9oeik7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTY1Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTY2Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxNjc6XHR7XG4gMTY4Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbiAxNjk6XHRcdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxuIDE3MDpcdFx0XHRcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTc0Olx0XHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE3NTpcdHtcbiAxNzY6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE3NzpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTgxOlx0XHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTgyOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxODM6XHR7XG4gMTg0Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIDE4NTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIDE4OTpcdHtcbiAxOTA6XHRcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4gMTkxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE5MjpcdFxuIDE5MzpcdFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIDE5NDpcdH1cbiAxOTU6XHRcbiAxOTY6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiAxOTc6XHR7XG4gMTk4Olx0XHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuIDIwMjpcdFx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gMjA1Olx0XHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiAyMDY6XHR9XG4gMjA3Olx0XG4gMjA4Olx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxuIDIwOTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAyMTA6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjExOlx0e1xuIDIxMjpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMjE2Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMjE3Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMTg6XHR7XG4gMjE5Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxuIDIyMzpcdFx0XHRcdFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAyMjk6XHRcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAyMzA6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHJldHVybiAtRU5PU1lTO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbiAyMzY6XHRcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjM3Olx0e1xuIDIzODpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIEtlcm5lbCBTeXN0ZW0gQ29udHJvbCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBjb250cm9sIChzeXNjdGwpIGludGVyZmFjZSBoYW5kbGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgY29udmVyc2lvbnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9zeXNjdGwuY2AgZmlsZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24sIGFzIHRoZXNlIGFyZSBmb3VuZGF0aW9uYWwgd2hlbiBkZWFsaW5nIHdpdGggc3lzY3RscyB0aGF0IGludGVyZmFjZSB0byB0aGUgdW5kZXJseWluZyB2YWx1ZXMuIFRoaXMmIzM5O2xsIHByb2JhYmx5IGludm9sdmUgZXhhbWluaW5nIGhvdyB0aGV5IGhhbmRsZSBsaW1pdHMsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB0eXBlIGNvbnZlcnNpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaGFuZGxlIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgZm9ybWF0cy4gSSYjMzk7bSBrZWVuIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlci1zdXBwbGllZCB2YWx1ZXMgdHJhbnNsYXRlIGludG8ga2VybmVsLXVzYWJsZSB2YWx1ZXMsIGFuZCB2aWNlIHZlcnNhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zeXNjdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuIDU0MTpcdFx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbiA1NDI6XHRcdFx0ICBpbnQgKCp1c2VyX3RvX2tlcm4pKGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciksXG4gNTQzOlx0XHRcdCAgaW50ICgqa2Vybl90b191c2VyKShib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpKVxuIDU0NDpcdHtcbiA1NDU6XHRcdGlmIChTWVNDVExfS0VSTl9UT19VU0VSKGRpcikpXG4gNTQ2Olx0XHRcdHJldHVybiBrZXJuX3RvX3VzZXIobmVncCwgdV9wdHIsIGtfcHRyKTtcbiA1NDc6XHRcbiA1NDg6XHRcdGlmIChrX3B0cl9yYW5nZV9jaGVjaykge1xuIDU0OTpcdFx0XHRpbnQgdG1wX2ssIHJldDtcbiA1NTA6XHRcbiA1NTE6XHRcdFx0aWYgKCF0YmwpXG4gNTUyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUzOlx0XHRcdHJldCA9IHVzZXJfdG9fa2VybihuZWdwLCB1X3B0ciwgXHUwMDI2dG1wX2spO1xuIDU1NDpcdFx0XHRpZiAocmV0KVxuIDU1NTpcdFx0XHRcdHJldHVybiByZXQ7XG4gNTU2Olx0XHRcdGlmICgodGJsLVx1MDAzZWV4dHJhMSBcdTAwMjZcdTAwMjYgKihpbnQgKil0YmwtXHUwMDNlZXh0cmExIFx1MDAzZSB0bXBfaykgfHxcbiA1NTc6XHRcdFx0ICAgICh0YmwtXHUwMDNlZXh0cmEyIFx1MDAyNlx1MDAyNiAqKGludCAqKXRibC1cdTAwM2VleHRyYTIgXHUwMDNjIHRtcF9rKSlcbiA1NTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTk6XHRcdFx0V1JJVEVfT05DRSgqa19wdHIsIHRtcF9rKTtcbiA1NjA6XHRcdH0gZWxzZVxuIDU2MTpcdFx0XHRyZXR1cm4gdXNlcl90b19rZXJuKG5lZ3AsIHVfcHRyLCBrX3B0cik7XG4gNTYyOlx0XHRyZXR1cm4gMDtcbiA1NjM6XHR9XG4gNTY0Olx0XG4gNTY1Olx0XG4gNTY2Olx0XG4gNTY3Olx0c3RhdGljIGludCBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252KGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0cixcbiA1Njg6XHRcdFx0XHRcdFx0aW50ICprX3B0cilcbiA1Njk6XHR7XG4gNTcwOlx0XHRyZXR1cm4gcHJvY19pbnRfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgbmVncCwgTlVMTCk7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdHN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4gNTc0Olx0e1xuIDU3NTpcdFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xuIDU3NjpcdH1cbiA1Nzc6XHRcbiA1Nzg6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gNTc5Olx0XHRcdFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBhIEtleSBDb252ZXJzaW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgZGVlcGVyIGludG8gdGhpcyBhbmQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGZvciBhIG1vbWVudCBhbmQgdGFrZSBhIGxvb2sgYXQgYHByb2NfdWxvbmdfY29udmAgd2l0aGluIGBrZXJuZWwvc3lzY3RsLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdW5zaWduZWQgbG9uZyB2YWx1ZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbCBpbnRlcmZhY2UsIGFuZCBJIHN1c3BlY3QgaXQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gaG93IHdlJiMzOTtyZSBzZWVpbmcgdGhlIGJlaGF2aW9yIHdlJiMzOTtyZSBzZWVpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGNvbnZlcnRzIGFuZCB2YWxpZGF0ZXMgdGhlc2UgdmFsdWVzLCB3aGljaCBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgYXJlIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3N5c2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjQ6XHRpbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxuIDk2NTpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuIDk2NjpcdFx0XHQgICAgaW50ICgqdXNlcl90b19rZXJuKShjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciksXG4gOTY3Olx0XHRcdCAgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKSlcbiA5Njg6XHR7XG4gOTY5Olx0XHRpZiAoU1lTQ1RMX0tFUk5fVE9fVVNFUihkaXIpKVxuIDk3MDpcdFx0XHRyZXR1cm4ga2Vybl90b191c2VyKHVfcHRyLCBrX3B0cik7XG4gOTcxOlx0XG4gOTcyOlx0XHRpZiAoa19wdHJfcmFuZ2VfY2hlY2spIHtcbiA5NzM6XHRcdFx0dWxvbmcgdG1wX2s7XG4gOTc0Olx0XHRcdGludCByZXQ7XG4gOTc1Olx0XG4gOTc2Olx0XHRcdGlmICghdGJsKVxuIDk3NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk3ODpcdFx0XHRyZXQgPSB1c2VyX3RvX2tlcm4odV9wdHIsIFx1MDAyNnRtcF9rKTtcbiA5Nzk6XHRcdFx0aWYgKHJldClcbiA5ODA6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDk4MTpcdFx0XHRpZiAoKHRibC1cdTAwM2VleHRyYTEgXHUwMDI2XHUwMDI2ICoodWxvbmcgKil0YmwtXHUwMDNlZXh0cmExIFx1MDAzZSB0bXBfaykgfHxcbiA5ODI6XHRcdFx0ICAgICh0YmwtXHUwMDNlZXh0cmEyIFx1MDAyNlx1MDAyNiAqKHVsb25nICopdGJsLVx1MDAzZWV4dHJhMiBcdTAwM2MgdG1wX2spKVxuIDk4MzpcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDk4NDpcdFx0XHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xuIDk4NTpcdFx0fSBlbHNlXG4gOTg2Olx0XHRcdHJldHVybiB1c2VyX3RvX2tlcm4odV9wdHIsIGtfcHRyKTtcbiA5ODc6XHRcdHJldHVybiAwO1xuIDk4ODpcdH1cbiA5ODk6XHRcbiA5OTA6XHQvKipcbiA5OTE6XHQgKiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCAtIEFzc2lnbiB1c2VyIHZhbHVlIHRvIGEga2VybmVsIHBvaW50ZXJcbiA5OTI6XHQgKlxuIDk5MzpcdCAqIEB1X3B0cjogcG9pbnRlciB0byB1c2VyIHNwYWNlIHZhcmlhYmxlXG4gOTk0Olx0ICogQGtfcHRyOiBwb2ludGVyIHRvIGtlcm5lbCB2YXJpYWJsZVxuIDk5NTpcdCAqIEB1X3B0cl9vcDogZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhc3NpZ25pbmcgdG8ga19wdHJcbiA5OTY6XHQgKlxuIDk5NzpcdCAqIFVzZXMgV1JJVEVfT05DRSB0byBhc3NpZ24gdmFsdWUgdG8ga19wdHIuIEV4ZWN1dGVzIHVfcHRyX29wIGlmXG4gOTk4Olx0ICogbm90IE5VTEwuXG4gOTk5Olx0ICpcbjEwMDA6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MuXG4xMDAxOlx0ICovXG4xMDAyOlx0aW50IHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuMTAwMzpcdFx0XHRcdCAgICB1bG9uZyAoKnVfcHRyX29wKShjb25zdCB1bG9uZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc3CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBmaXhpbmcgbWluL21heCBjaGVja3Mgd2l0aGluIHRoZSBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIHN5c2N0bCBoYW5kbGVycy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGF0IGJvdW5kcyBhcmUgYXBwcm9wcmlhdGVseSBlbmZvcmNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24gb2YgdXNlci1wcm92aWRlZCB2YWx1ZXMgdG8ga2VybmVsIHZhbHVlcywgYW5kIGl0JiMzOTtzIGFkZGluZyBhbiBvdmVyZmxvdyBjaGVjay4KCkZpcnN0LCBJIGxvb2tlZCBpbnRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSBzZWUgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJvb2xlYW4gcGFyYW1ldGVyIG9mIGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAsIGFuZCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrIGluIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgLiBNeSBxdWljayByZXZpZXcgb2YgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YCB0aGVtc2VsdmVzIHNob3cgdGhhdCB0aGV5IHVzZSB0ZW1wb3JhcnkgdmFyaWFibGVzIChgdG1wX2tgKSAqYmVmb3JlKiBhbnkgYm91bmRzIGNoZWNrcyBvciBhc3NpZ25tZW50cywgYW5kIHRoYXQgdGhlc2UgYXJlIHBvcHVsYXRlZCBieSBgdXNlcl90b19rZXJuKClgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkLCBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFBhZGRpbmcsIHN0cnVjdHMsIGFuZCBkeW5hbWljIGJ1ZmZlciBzaXplcyBhcmUgYWxsIHVudG91Y2hlZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgbGVha3MuCgpOZXh0LCBJIGNvbnNpZGVyZWQgd2hldGhlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIG5lY2Vzc2FyeSBoZXJlLCBhbmQgY29tcGFyZWQgaXQgdG8gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikuIEtNU0FOIGlzIGNvbmNlcm5lZCB3aXRoIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvIGxlYWtzLCB3aGVyZWFzIEtBU0FOIGNvdmVycyB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBHaXZlbiB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gYm91bmRzIGNoZWNraW5nIGFuZCB2YWx1ZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgc3lzY3RsIGhhbmRsZXJzLCBhbmQgdGhlIGFic2VuY2Ugb2YgYW55IGludHJvZHVjZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGFkZHJlc3NpbmcgaW50ZWdlciBhbmQgdWxvbmcgY29udmVyc2lvbiBib3VuZHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpIZXJlJiMzOTtzIG15IGNsZWFyIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgZW5hYmxpbmcgbW9yZSByb2J1c3QgbWluL21heCByYW5nZSBjaGVja3MsIGFuZCBpdCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrLiBNZW1vcnkgc2FmZXR5IGlzIGFzc3VyZWQgYmVjYXVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyB3cml0dGVuIHRvICpiZWZvcmUqIGJlaW5nIHVzZWQgb3IgY29tcGFyZWQsIGFuZCB0aGVyZSYjMzk7cyBubyBuZXcgYWxsb2NhdGlvbiBvciBjb3B5aW5nIG9mIGtlcm5lbCBtZW1vcnkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCByZWFkIG9yIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIFNpbmNlIHRoZSBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiBib3VuZHMgY2hlY2tpbmcgYW5kIHZhbHVlIHZhbGlkYXRpb24sIHN0YW5kYXJkIEtBU0FOIHRlc3Rpbmcgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBhc3BlY3RzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludHJvZHVjZSBib3VuZHMvcmFuZ2UgdmFsaWRhdGlvbiBmb3Igc3lzY3RsIHNjYWxhciBpbnRlZ2VyIHZhbHVlcy4gTm8gaGVhcCBvciBzdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZ3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBhbGxvY2F0ZWQsIG1vZGlmaWVkLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29udmVyc2lvbiAoZS5nLiB0ZW1wb3JhcnkgaW50ZWdlcnMpIGFyZSB3cml0dGVuIGJlZm9yZSBiZWluZyBldmFsdWF0ZWQgb3IgYXNzaWduZWQuIENvbnNlcXVlbnRseSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeXNjdGwgY29udmVyc2lvbiBoYW5kbGVycyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBwZXJmb3JtIG1pbi9tYXggcmFuZ2UgY2hlY2tzIChlbmFibGluZyBrX3B0cl9yYW5nZV9jaGVjaz10cnVlIGluIHByb2NfaW50X2NvbnYgYW5kIHByb2NfdWxvbmdfY29udikgYW5kIGFkZHMgYW4gSU5UX01BWCB2YWxpZGF0aW9uIGNoZWNrIGluIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTowMy40NDc4OTIxNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjgwOTE0NTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjQ0Nzg5ODI5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NTA2NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xcbmluZGV4IDIxM2FlMWQ2YTAxNDcuLjQ3Mzc0MzFmZGIxNmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXFxuKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jXFxuQEAgLTE4MSwxMiArMTgxLDE1IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4ge1xcbi1cXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG4rXFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG4gXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMoY29uc3QgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIpXFxuIHtcXG4rXFx0aWYgKCp1X3B0ciBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xcbiB9XFxuIFxcbkBAIC0xOTUsMTAgKzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4gXFx0cmV0dXJuIHByb2NfdWxvbmdfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiB7XFxuLVxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuK1xcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gfVxcbiBcXG5AQCAtMjI5LDggKzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIFxcdHJldHVybiAtRU5PU1lTO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiB7XFxuIFxcdHJldHVybiAtRU5PU1lTO1xcbiB9XFxuQEAgLTMzMyw3ICszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuLVxcdFxcdFxcdFxcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyk7XFxuK1xcdFxcdFxcdFxcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjk5MzE2MTI3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkzMTA2NzAyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCIsXG4gICAgXCJwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmZjQ4MDY5M2Q0YmI0NDdjYTY3ZDZlYmIyOTExYmI2MWFkYTNiM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5pbmRleCAyMTNhZTFkNmEwMTQ3Li40NzM3NDMxZmRiMTZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXG4rKysgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmNcbkBAIC0xODEsMTIgKzE4MSwxNSBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxuIFx0XHRcdFx0XHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuLVx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4rXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIHtcbitcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIH1cbiBcbkBAIC0xOTUsMTAgKzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiBcdHJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbitcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuLVx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbitcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgICAgc3lzY3RsX3Uya191bG9uZ19jb252X21zLCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXMpO1xuIH1cbiBcbkBAIC0yMjksOCArMjMyLDggQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdHJldHVybiAtRU5PU1lTO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuLVx0XHRcdFx0XHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuK3N0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuK1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG5AQCAtMzMzLDcgKzMzNiw3IEBAIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4gXHRcdFx0XHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4tXHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMpO1xuK1x0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjk5MzE2MzA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NTkwMjI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHByYWN0aWNhbCBhcHByb2FjaC4gTGV0J3MgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJ3MgcXVpY2tlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGluIHRoaXMgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgdGhlICplbnRpcmUqIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqaW4qIHRoYXQgZmlsZS4gUHJpbWFyaWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2N0bCBvciBwcm9jIGZ1bmN0aW9ucywgaWYgYW55LCBhcmUgZGVmaW5lZCBhbmQsIGNydWNpYWxseSwgKmhvdyogdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGppZmZpZXMgY29udGV4dC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0aGUgd2F5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW1wbG95ZWQ/IFRoaXMgaW5pdGlhbCBzd2VlcCB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IHByb3Bvc2VkIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInNoYXBlXCIgb2YgdGhlIGNvZGUgYW5kIHdoZXJlIHRoZSBzZW5zaXRpdmUgb3IgY3JpdGljYWwgYXJlYXMgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjA3Ljk1MjE4ODYzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdFxcdFxcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE3NzpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxuIDE4NTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcXG4gMTg5OlxcdHtcXG4gMTkwOlxcdFxcdGlmICgqdV9wdHIgXFx1MDAzZSBJTlRfTUFYKVxcbiAxOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XFxuIDE5OTpcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gMjA2OlxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbiAyMDk6XFx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbiAyMTA6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAyMTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjE4OlxcdHtcXG4gMjE5OlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIDIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzMzpcXHR9XFxuIDIzNDpcXHRcXG4gMjM1OlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzc6XFx0e1xcbiAyMzg6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzOTpcXHR9XFxuIDI0MDpcXHQjZW5kaWZcXG4gMjQxOlxcdFxcbiAyNDI6XFx0LyoqXFxuIDI0MzpcXHQgKiBwcm9jX2RvaW50dmVjX2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIHNlY29uZHNcXG4gMjQ0OlxcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxcbiAyNDU6XFx0ICogQGRpcjogJVRSVUUgaWYgdGhpcyBpcyBhIHdyaXRlIHRvIHRoZSBzeXNjdGwgZmlsZVxcbiAyNDY6XFx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXFxuIDI0NzpcXHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXFxuIDI0ODpcXHQgKiBAcHBvczogZmlsZSBwb3NpdGlvblxcbiAyNDk6XFx0ICpcXG4gMjUwOlxcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cXHUwMDNlbWF4bGVuL3NpemVvZih1bnNpZ25lZCBpbnQpIGludGVnZXJcXG4gMjUxOlxcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXFxuIDI1MjpcXHQgKiBUaGUgdmFsdWVzIHJlYWQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc2Vjb25kcywgYW5kIGFyZSBjb252ZXJ0ZWQgaW50b1xcbiAyNTM6XFx0ICogamlmZmllcy5cXG4gMjU0OlxcdCAqXFxuIDI1NTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMjU2OlxcdCAqL1xcbiAyNTc6XFx0aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMjU4OlxcdFxcdFxcdFxcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4gMjU5OlxcdHtcXG4gMjYwOlxcdFxcdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0ICBkb19wcm9jX2ludF9jb252X2ppZmZpZXMpO1xcbiAyNjI6XFx0fVxcbiAyNjM6XFx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX2ppZmZpZXMpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHQvKipcXG4gMjY2OlxcdCAqIHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIDEvVVNFUl9IWiBzZWNvbmRzXFxuIDI2NzpcXHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcXG4gMjY4OlxcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcXG4gMjY5OlxcdCAqIEBidWZmZXI6IHRoZSB1c2VyIGJ1ZmZlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTowNy45NTIyNzg2MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMxNTI4MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGppZmZpZXMgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZCwgYXMgaXQncyBmdW5kYW1lbnRhbCB0byB0aW1pbmcgYW5kIHNjaGVkdWxpbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGFueSBhdG9taWMgb3BlcmF0aW9ucyB1c2VkIGZvciB1cGRhdGVzLCBhbmQgaG93IHRoZSB0aW1lciBpbnRlcnJ1cHRzIGludGVyYWN0IHdpdGggdGhpcyBnbG9iYWwgY291bnRlci4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciB3cmFwLWFyb3VuZCBpc3N1ZXMgYW5kIGhvdyB0aG9zZSBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgNjQtYml0IGppZmZpZXMgb24gbW9kZXJuIHN5c3RlbXMuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBJJ20gcnVubmluZyBvbi4gSXQncyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZC1zYWZldHksIGFzIG51bWVyb3VzIHBhcnRzIG9mIHRoZSBrZXJuZWwgcmVseSBvbiBqaWZmaWVzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IGdldCBvciBzZXQgamlmZmllcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIG92ZXJhbGwga2VybmVsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBoaWdoLWZyZXF1ZW5jeSBldmVudCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MTAuMjgzODA5MzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxcbiAyNzE6XFx0ICogQHBwb3M6IHBvaW50ZXIgdG8gdGhlIGZpbGUgcG9zaXRpb25cXG4gMjcyOlxcdCAqXFxuIDI3MzpcXHQgKiBSZWFkcy93cml0ZXMgdXAgdG8gdGFibGUtXFx1MDAzZW1heGxlbi9zaXplb2YodW5zaWduZWQgaW50KSBpbnRlZ2VyXFxuIDI3NDpcXHQgKiB2YWx1ZXMgZnJvbS90byB0aGUgdXNlciBidWZmZXIsIHRyZWF0ZWQgYXMgYW4gQVNDSUkgc3RyaW5nLlxcbiAyNzU6XFx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIDEvVVNFUl9IWiBzZWNvbmRzLCBhbmRcXG4gMjc2OlxcdCAqIGFyZSBjb252ZXJ0ZWQgaW50byBqaWZmaWVzLlxcbiAyNzc6XFx0ICpcXG4gMjc4OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbiAyNzk6XFx0ICovXFxuIDI4MDpcXHRpbnQgcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMjgxOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiAyODI6XFx0e1xcbiAyODM6XFx0XFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuIDI4NDpcXHRcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0LyoqXFxuIDI4OTpcXHQgKiBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIDEgbWlsbGlzZWNvbmRzXFxuIDI5MDpcXHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcXG4gMjkxOlxcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcXG4gMjkyOlxcdCAqIEBidWZmZXI6IHRoZSB1c2VyIGJ1ZmZlclxcbiAyOTM6XFx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxcbiAyOTQ6XFx0ICogQHBwb3M6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlXFxuIDI5NTpcXHQgKlxcbiAyOTY6XFx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVxcdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxcbiAyOTc6XFx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy5cXG4gMjk4OlxcdCAqIFRoZSB2YWx1ZXMgcmVhZCBhcmUgYXNzdW1lZCB0byBiZSBpbiAxLzEwMDAgc2Vjb25kcywgYW5kXFxuIDI5OTpcXHQgKiBhcmUgY29udmVydGVkIGludG8gamlmZmllcy5cXG4gMzAwOlxcdCAqXFxuIDMwMTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMzAyOlxcdCAqL1xcbiAzMDM6XFx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbiAzMDQ6XFx0XFx0XFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMwNTpcXHR7XFxuIDMwNjpcXHRcXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gMzA3OlxcdFxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcXG4gMzA4OlxcdH1cXG4gMzA5OlxcdEVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19tc19qaWZmaWVzKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuIDMxMjpcXHRcXHRcXHRcXHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMxMzpcXHR7XFxuIDMxNDpcXHRcXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxuIDMxNjpcXHR9XFxuIDMxNzpcXHRcXG4gMzE4OlxcdC8qKlxcbiAzMTk6XFx0ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4IC0gcmVhZCBhIHZlY3RvciBvZiBtaWxsaXNlY29uZCB2YWx1ZXMgd2l0aCBtaW4vbWF4IHZhbHVlc1xcbiAzMjA6XFx0ICogQHRhYmxlOiB0aGUgc3lzY3RsIHRhYmxlXFxuIDMyMTpcXHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXFxuIDMyMjpcXHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcXG4gMzIzOlxcdCAqIEBsZW5wOiB0aGUgc2l6ZSBvZiB0aGUgdXNlciBidWZmZXJcXG4gMzI0OlxcdCAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXFxuIDMyNTpcXHQgKlxcbiAzMjY6XFx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVxcdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHVuc2lnbmVkIGxvbmdcXG4gMzI3OlxcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuIFRoZSB2YWx1ZXNcXG4gMzI4OlxcdCAqIGFyZSB0cmVhdGVkIGFzIG1pbGxpc2Vjb25kcywgYW5kIGNvbnZlcnRlZCB0byBqaWZmaWVzIHdoZW4gdGhleSBhcmUgc3RvcmVkLlxcbiAzMjk6XFx0ICpcXG4gMzMwOlxcdCAqIFRoaXMgcm91dGluZSB3aWxsIGVuc3VyZSB0aGUgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieVxcbiAzMzE6XFx0ICogdGFibGUtXFx1MDAzZWV4dHJhMSAobWluKSBhbmQgdGFibGUtXFx1MDAzZWV4dHJhMiAobWF4KS5cXG4gMzMyOlxcdCAqXFxuIDMzMzpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMzM0OlxcdCAqL1xcbiAzMzU6XFx0aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMzM2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbiAzMzk6XFx0XFx0XFx0XFx0XFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7XFxuIDM0MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MTAuMjgzOTI5MjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjYxMTcyOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgaW52ZXN0aWdhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBKaWZmaWVzIGFuZCBUaW1lcnMqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IHdoZXJlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9ucyBhcmUuIEFyZSB0aGV5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcGFydCBvZiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zPyBBcmUgdGhleSB1c2VkIGluIGFueSBzcGVjaWZpYyBtb25pdG9yaW5nIHRvb2xzIG9yIHBlcmZvcm1hbmNlIHR1bmluZ3M/XG5cbkknbSB0aGlua2luZyB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgaGFuZGxlIHRoZSBjcmVhdGlvbiBvZiBwcm9jZnMgZW50cmllcyB0byBleHBvc2UgYW5kIG1vZGlmeSBpbnRlcm5hbCBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGltaW5nLCBvciB0aW1lIGludGVydmFscywgb3IgcGVyaGFwcyBldmVuIHJlbGF0ZWQgdG8gYGppZmZpZXNgIGluIHNvbWUgd2F5LCBwcm9iYWJseSB1c2VkIGZvciByZWFkaW5nIGFuZCB1cGRhdGluZyBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGRlYWxpbmcgd2l0aCBcIm1pbGxpc2Vjb25kc1wiIChgbXNgKSBhbmQgXCJqaWZmaWVzLFwiIHdoaWNoLCBvZiBjb3Vyc2UsIGFyZSBib3RoIHRpbWluZyByZWxhdGVkLCB3aXRoIGEgbWluL21heCByZXN0cmljdGlvbjsgcHJvYmFibHkgZm9yIGEgc2V0dGluZyB0aGF0IGlzIGJlc3QgZXhwcmVzc2VkIGFzIGEgcmFuZ2UuXG5cbk15IGltbWVkaWF0ZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGJlaGluZCB0aGVpciBleGlzdGVuY2UuIFRoZW4gSSBjYW4gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhpbmdzIGxpa2Ugc3lzdGVtIHBlcmZvcm1hbmNlLCB0aW1lciBhY2N1cmFjeSwgb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoZSBzZXR0aW5ncyB0aGV5IG1hbmFnZSBhcmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjEzLjk0NTEwNDYxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5MjYxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXh8cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zNjE9cGFycG9ydF9kZXZpY2Vfc3lzY3RsX3RlbXBsYXRlID0ge1xcbi0tXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jLTM2OC1cXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmM6MzY5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCxcXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtMzcwLVxcdFxcdFxcdC5leHRyYTFcXHRcXHQ9ICh2b2lkKikgXFx1MDAyNnBhcnBvcnRfbWluX3RpbWVzbGljZV92YWx1ZSxcXG4tLVxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zOTE9cGFycG9ydF9kZWZhdWx0X3N5c2N0bF90YWJsZSA9IHtcXG4tLVxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zOTgtXFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jOjM5OTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jLTQwMC1cXHRcXHRcXHQuZXh0cmExXFx0XFx0PSAodm9pZCopIFxcdTAwMjZwYXJwb3J0X21pbl90aW1lc2xpY2VfdmFsdWUsXFxuLS1cXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTE0Mz1zdGF0aWMgaW50IHN5c2N0bF9jaGVja190YWJsZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTExNjAtXFx0XFx0ICAgIChlbnRyeS1cXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19taW5tYXgpIHx8XFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjExNjE6XFx0XFx0ICAgIChlbnRyeS1cXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHtcXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtMTE2Mi1cXHRcXHRcXHRpZiAoIWVudHJ5LVxcdTAwM2VkYXRhKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTEyOTg9c3RhdGljIHN0cnVjdCBjdGxfZGlyICpzeXNjdGxfbWtkaXJfcChzdHJ1Y3QgY3RsX2RpciAqZGlyLCBjb25zdCBjaGFyICpwYXRoKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjAtICogcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcygpLCBwcm9jX2RvaW50dmVjX21pbm1heCgpLFxcbmZzL3Byb2MvcHJvY19zeXNjdGwuYzoxMzYxOiAqIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCgpLCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KClcXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtMTM2Mi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg9NjQ3PWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NDgtXFx0XFx0XFx0ICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg6NjQ5OmludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1MC1cXHRcXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaD02NTM9aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1NC1cXHRcXHRcXHQgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTtcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaDo2NTU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NTYtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzA5PUVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19tc19qaWZmaWVzKTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzEwLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTE6aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxMi1cXHRcXHRcXHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE4LS8qKlxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTk6ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4IC0gcmVhZCBhIHZlY3RvciBvZiBtaWxsaXNlY29uZCB2YWx1ZXMgd2l0aCBtaW4vbWF4IHZhbHVlc1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMjAtICogQHRhYmxlOiB0aGUgc3lzY3RsIHRhYmxlXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM0LSAqL1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMzU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM2LVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzQxOkVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQyLVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzY2OD1zdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2NzgtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY3OTpcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODAtXFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XFxuLS1cXG5uZXQvcmRzL3N5c2N0bC5jPTUyPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJkc19zeXNjdGxfcmRzX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvcmRzL3N5c2N0bC5jLTU3LVxcdFxcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXFxubmV0L3Jkcy9zeXNjdGwuYzo1ODpcXHRcXHQucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxubmV0L3Jkcy9zeXNjdGwuYy01OS1cXHRcXHQuZXh0cmExXFx0XFx0PSBcXHUwMDI2cmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluLFxcbi0tXFxubmV0L3Jkcy9zeXNjdGwuYy02Ni1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbm5ldC9yZHMvc3lzY3RsLmM6Njc6XFx0XFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxcbm5ldC9yZHMvc3lzY3RsLmMtNjgtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLFxcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jPTM0PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJ4cnBjX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jLTU4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbm5ldC9yeHJwYy9zeXNjdGwuYzo1OTpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxubmV0L3J4cnBjL3N5c2N0bC5jLTYwLVxcdFxcdC5leHRyYTFcXHRcXHQ9ICh2b2lkICopXFx1MDAyNm9uZV9qaWZmeSxcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYy02Ny1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvcnhycGMvc3lzY3RsLmM6Njg6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxcbm5ldC9yeHJwYy9zeXNjdGwuYy02OS1cXHRcXHQuZXh0cmExXFx0XFx0PSAodm9pZCAqKVxcdTAwMjZvbmVfamlmZnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjE2LjYyNDM3MzExMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODE5MzQ0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5c2N0bCBIYW5kbGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIHN5c2N0bCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAuIEkgY2FuIHNlZSB0aGV5J3JlIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgcG9wcyB1cCBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIHRocm91Z2ggYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgZm9yIHRob3NlIG5laWdoYm91ciB0YWJsZSBwYXJhbWV0ZXJzIGxpa2UgYGJhc2VfcmVhY2hhYmxlX3RpbWVfbXNgLCB3aGljaCwgb2YgY291cnNlLCBpcyBhY2Nlc3NpYmxlIHZpYSBgL3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLy4uLmAgb3IgdGhlIGlwdjYgZXF1aXZhbGVudC4gYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgaXMgYSBsaXR0bGUgbW9yZSB3aWRlc3ByZWFkLCBmb3VuZCBpbiBgZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jYCwgYG5ldC9yZHMvc3lzY3RsLmNgLCBhbmQgYG5ldC9yeHJwYy9zeXNjdGwuY2AuIEFuZCwgbmF0dXJhbGx5LCBkaXJlY3Qgd3JpdGVzIHRvIGAvcHJvYy9zeXMvLi4uYCBhbHNvIGNhbGwgdGhlc2UgaGFuZGxlcnMuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIFRoZSBmaXJzdCBwb2ludCBpcyBpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgd2hlcmUgdGhleSd2ZSBzd2l0Y2hlZCBgcHJvY19pbnRfY29udmAgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYC4gU28gdGhlIG1pbi9tYXggY2hlY2sgaXMgbm93IGVuYWJsZWQsIGFuZCB0aGV5J3JlIGZpeGluZyBhbiBlYXJsaWVyIG92ZXJzaWdodC5cblxuTmV4dCwgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AsIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgY3J1Y2lhbCDigJMgdGhleSdyZSBlbnN1cmluZyB0aGF0IHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlIGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVnZXIgdmFsdWUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGRvd24gdGhlIGxpbmUuXG5cblRoZW4sIHRoZXkndmUgcmVuYW1lZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIHRvIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBkaWQgdGhlIHNhbWUgdGhpbmcgd2l0aCB0aGUgYm9vbCBhcmd1bWVudCB0byBgcHJvY191bG9uZ19jb252YCwgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYCwgYW5kIGVuYWJsZWQgdGhlIG1pbi9tYXggY2hlY2sgaGVyZSB0b28uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5LlxuXG5BbmQsIGZpbmFsbHksIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIG5vdyBjYWxscyBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4YC5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAgYWN0dWFsbHkgd29yay4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMToyMS4yMDYzMTAzNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTY5MTAwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjdGwuaD0xMjQ9aW50IHByb2NfZG91bG9uZ3ZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaC0xNDItICovXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaDoxNDM6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTQ0LVxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaD0xNDc9aW50IHByb2NfdWludF9jb252KHVsb25nICp1X3B0ciwgdWludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTE1MC1cXHRcXHQgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWludCAqa19wdHIpKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oOjE1MTppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTUyLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9NTA2PWludCBwcm9jX2ludF91MmtfY29udl91b3AoY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBjb25zdCBib29sICpuZWdwLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTUyMy0vKipcXG5rZXJuZWwvc3lzY3RsLmM6NTI0OiAqIHByb2NfaW50X2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cXG5rZXJuZWwvc3lzY3RsLmMtNTI1LSAqXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtNTM5LSAqL1xcbmtlcm5lbC9zeXNjdGwuYzo1NDA6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy01NDEtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9NTczPXN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtNTc3LVxcbmtlcm5lbC9zeXNjdGwuYzo1Nzg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC9zeXNjdGwuYy01NzktXFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvc3lzY3RsLmMtNTgwLXtcXG5rZXJuZWwvc3lzY3RsLmM6NTgxOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC9zeXNjdGwuYy01ODItXFx0XFx0XFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTU4Ni1cXG5rZXJuZWwvc3lzY3RsLmM6NTg3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9taW5tYXgoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxua2VybmVsL3N5c2N0bC5jLTU4OC1cXHRcXHRcXHRcXHQgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3N5c2N0bC5jLTU4OS17XFxua2VybmVsL3N5c2N0bC5jOjU5MDpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbmtlcm5lbC9zeXNjdGwuYy01OTEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTgyMD1pbnQgcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTgyMy1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXFxua2VybmVsL3N5c2N0bC5jOjgyNDpcXHRcXHRcXHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnYgfSk7XFxua2VybmVsL3N5c2N0bC5jLTgyNS19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9ODY0PWludCBwcm9jX2RvaW50dmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy04NjctXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcbmtlcm5lbC9zeXNjdGwuYzo4Njg6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252X21pbm1heCB9KTtcXG5rZXJuZWwvc3lzY3RsLmMtODY5LX1cXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz05NDY9RVhQT1JUX1NZTUJPTF9HUEwocHJvY19kb3U4dmVjX21pbm1heCk7XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtOTQ4LS8qKlxcbmtlcm5lbC9zeXNjdGwuYzo5NDk6ICogcHJvY191bG9uZ19jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXFxua2VybmVsL3N5c2N0bC5jLTk1MC0gKlxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTk2My0gKi9cXG5rZXJuZWwvc3lzY3RsLmM6OTY0OmludCBwcm9jX3Vsb25nX2NvbnYodWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTk2NS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTEwMzY9c3RhdGljIGludCBwcm9jX3Vsb25nX2sydV9jb252KHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTEwNDAtXFxua2VybmVsL3N5c2N0bC5jOjEwNDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTEwNDItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbmtlcm5lbC9zeXNjdGwuYy0xMDQzLXtcXG5rZXJuZWwvc3lzY3RsLmM6MTA0NDpcXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3N5c2N0bC5jLTEwNDUtXFx0XFx0XFx0ICAgICAgIHByb2NfdWxvbmdfdTJrX2NvbnYsIHByb2NfdWxvbmdfazJ1X2NvbnYpO1xcbi0tXFxua2VybmVsL3N5c2N0bC5jPTEwODk9aW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTA5Mi1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19VTE9ORyxcXG5rZXJuZWwvc3lzY3RsLmM6MTA5MzpcXHRcXHRcXHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC51bG9uZ19jb252ID0gZG9fcHJvY191bG9uZ19jb252IH0pO1xcbmtlcm5lbC9zeXNjdGwuYy0xMDk0LX1cXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMTAyLSAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXFxua2VybmVsL3N5c2N0bC5jOjExMDM6ICogQGNvbnY6IEN1c3RvbSBjb252ZXJ0ZXIgY2FsbCBiYWNrLiBEZWZhdWx0cyB0byBkb19wcm9jX2ludF9jb252XFxua2VybmVsL3N5c2N0bC5jLTExMDQtICpcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMTEwPWludCBwcm9jX2RvaW50dmVjX2NvbnYoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMTE1LVxcdGlmICghY29udilcXG5rZXJuZWwvc3lzY3RsLmM6MTExNjpcXHRcXHRjb252ID0gZG9fcHJvY19pbnRfY29udjtcXG5rZXJuZWwvc3lzY3RsLmMtMTExNy1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MTUyPXN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNTc6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU5LXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE2NDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjg6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc0LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE3NjpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVxcdFxcdFxcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0OlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jPTE5Nj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIwMTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA0OlxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVxcdFxcdFxcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjEwLVxcdFxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE0LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjIxLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXFx0XFx0XFx0XFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIyODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIzNTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yNTc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2Mi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6Mjg0OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDYtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzExPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMzOTpcXHRcXHRcXHRcXHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MjMuNjIzMjMyNzkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTk2ODU5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY2hhbmdlcyBpbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBGaXJzdCwgYSBkZXRhaWxlZCBsb29rIGF0IHRoZSBtb2RpZmljYXRpb25zOlxuXG4qICAgYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgOiBJdCdzIGNhbGxpbmcgYHByb2NfaW50X2NvbnZgIG5vdyB3aXRoIGB0cnVlYCBmb3IgYGtfcHRyX3JhbmdlX2NoZWNrYC4gVGhpcyBpcyB3b3J0aCBub3RpbmcsIGVzcGVjaWFsbHkgaWYgdGhlIHByZXZpb3VzIGxvZ2ljIGRpZG4ndCBoYXZlIHRoYXQgY2hlY2suXG4qICAgYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2A6IFRoZXJlJ3MgYSBuZXcgY2hlY2sgYGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSdyZSBleHBsaWNpdGx5IGxpbWl0aW5nIHRoZSBpbnB1dCByYW5nZS4gVGhpcyBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIGJ5cGFzc2VzIGlmIG5vdCBjb3JyZWN0bHkgaGFuZGxlZCBlbHNld2hlcmUuXG4qICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGA6IExvb2tzIGxpa2UgaXQgd2FzIHJlbmFtZWQgZnJvbSBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgLCBhbmQgbm93IHVzZXMgYHRydWVgIGZvciBga19wdHJfcmFuZ2VfY2hlY2tgIHdoZW4gY2FsbGluZyBgcHJvY191bG9uZ19jb252YC4gQWdhaW4sIHRoaXMgcmFuZ2UgY2hlY2tpbmcgaXMga2V5LlxuKiAgIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgOiBJdCdzIGNhbGxpbmcgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQ/IFllcywgdGhlIGtlcm5lbCBzeXNjdGwgaW5mcmFzdHJ1Y3R1cmUgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGAvcHJvYy9zeXMvLi4uYCBlbnRyaWVzLCBzbyB0aGF0IGlzIGEgYmlnIHllcy4gRnVuY3Rpb25zIGxpa2UgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgIGFuZCBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YCBhcmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmcm9tIHVzZXIgc3BhY2UuIE5vdywgd2hhdCBhYm91dCBjb25maWcgcmVxdWlyZW1lbnRzPyBgQ09ORklHX1NZU0NUTGAgYW5kIGBDT05GSUdfUFJPQ19TWVNDVExgIGFyZSB0aGUgaW1wb3J0YW50IG9uZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSBgI2lmZGVmYCBibG9ja3MuIEkgc2F3IG9uZSBhdCBsaW5lIDIwOCwgc28gSSdsbCBnbyBiYWNrIGFuZCBjaGVjayBsaW5lcyAxMzAgdG8gMTgwIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQgYW5kIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBgI2Vsc2UgLy8gQ09ORklHX1NZU0NUTGAgYml0cyBhcmVuJ3QgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMToyNy43ODI5MjIwMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvamlmZmllcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHooY29uc3QgYm9vbCAqbmVncCwgY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIGNsb2NrX3RfdG9famlmZmllcyk7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB1bG9uZyBzeXNjdGxfamlmZmllc190b19jbG9ja190KGNvbnN0IHVsb25nIHZhbClcXG4gMTI4OlxcdHtcXG4gMTI5OlxcdFxcdHJldHVybiBqaWZmaWVzX3RvX2Nsb2NrX3QodmFsKTtcXG4gMTMwOlxcdH1cXG4gMTMxOlxcdFxcbiAxMzI6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X3VzZXJoeihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDEzMzpcXHR7XFxuIDEzNDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fY2xvY2tfdCk7XFxuIDEzNTpcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdHN0YXRpYyB1bG9uZyBzeXNjdGxfbXNlY3NfdG9famlmZmllcyhjb25zdCB1bG9uZyB2YWwpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRyZXR1cm4gbXNlY3NfdG9famlmZmllcyh2YWwpO1xcbiAxNDA6XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfaW50X2NvbnZfbXMoY29uc3QgYm9vbCAqbmVncCwgY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyKVxcbiAxNDM6XFx0e1xcbiAxNDQ6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVsb25nIHZhbClcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdHJldHVybiBqaWZmaWVzX3RvX21zZWNzKHZhbCk7XFxuIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiAxNTU6XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE2MTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X3VzZXJoeixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MjcuNzgzMDA0NzgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTU4OTE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIEppZmZpZXMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBgamlmZmllc2AgYXJlIGhhbmRsZWQgaW4gdGhpcyBrZXJuZWwgdmVyc2lvbiwgcGFydGljdWxhcmx5IGhvdyBpdCByZWxhdGVzIHRvIGBDT05GSUdfU1lTQ1RMYC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb24gaGVyZS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBga2VybmVsL3RpbWUvamlmZmllcy5jYCByaWdodCBhd2F5LiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBmaW5kIHRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGFuZCB0aGVuIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBob3cgYGppZmZpZXNgIGludGVyYWN0cyB3aXRoIGFueSBwb3RlbnRpYWwgc3lzY3RsIHZhcmlhYmxlcy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gd29yayBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzAuMDM4ODk4NzU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIwNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU1lTQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGltZS9qaWZmaWVzLmM9NzY9dm9pZCBfX2luaXQgcmVnaXN0ZXJfcmVmaW5lZF9qaWZmaWVzKGxvbmcgY3ljbGVzX3Blcl9zZWNvbmQpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTAwLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxMDE6I2lmZGVmIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTAyLXN0YXRpYyB1bG9uZyBtdWx0X2h6KGNvbnN0IHVsb25nIHZhbClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yMDE9c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA3LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDg6I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDktc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTozMC4xMTQxMDg4ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA2MjY4MjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgYFNZU0NUTGAgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgU1lTQ1RMYCBjb25maWd1cmF0aW9uIGNoYW5nZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZyBhbmQgdGhlIGFwcHJvcHJpYXRlIGBFbmFibGVDb25maWdzYC4gVGhlIGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gSSBzZWU6XG5cbiogICBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YFxuKiAgIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YFxuKiAgIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgICh3aGljaCBpcyBzdGF0aWMsIHNvIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW5saW5pbmcpXG4qICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAgKGFsc28gc3RhdGljKVxuKiAgIGBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4YCAobGlrZXdpc2UsIHN0YXRpYylcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhcmUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXkgYXJlOlxuXG4qICAgYGludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKWBcbiogICBgaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylgXG5cbkknbGwgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFzIGEgcmVsYXRlZCBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggdGhlIHByaW1hcnkgc3lzY3RsIGhhbmRsZXJzIGFyZSB0aG9zZSBmaXJzdCB0d28gYG1pbm1heGAgZnVuY3Rpb25zLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrLCBhcmUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc2AgYWZmZWN0ZWQ/IE5vLCBqdXN0IHRoZSBtaW5tYXggb25lcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAzLCB3aGljaCBzYXlzIHRvIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgYW5kIGFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBwYXRocy5cblxuSGVyZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBvciBlbmFibGluZyByYW5nZSBjaGVja2luZyAoYGtfcHRyX3JhbmdlX2NoZWNrID0gdHJ1ZWApIHdpdGhpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgYW5kIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgLCBhbmQgaXQgYWxzbyBhZGRzIGFuIGV4cGxpY2l0IGNoZWNrIGAqdV9wdHIgXHUwMDNlIElOVF9NQVhgIGluIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgc3lzY3RsIGhhbmRsZXJzIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdG8gZ28gYWhlYWQgYW5kIGRlY2xhcmUgaXQgZnV6emFibGUhXG5cblNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlOlxuXG4qICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGBcbiogICBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGBcblxuQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOlxuXG4qICAgYFNZU0NUTGBcbiogICBgUFJPQ19TWVNDVExgXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkyMSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzYuMTc2NzkzNjMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MDExNzksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFBST0NfU1lTQ1RMIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiUFJPQ19TWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFBST0NfU1lTQ1RMXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjM2LjI1MTUxMTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTU3MzA3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipLY29uZmlnIFNoZW5hbmlnYW5zOiBTWVNDVEwvUFJPQ19TWVNDVEwgVmVyaWZpY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBzaXR1YXRpb24uIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdGhlcmUgYXJlIHJlbGV2YW50IHNldHRpbmdzIHRvIGVuYWJsZSBvciBjb25maWd1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgbW9kdWxlIG9yIGZlYXR1cmUgdXNlcyBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgLCBvciBtYXliZSBib3RoLCBiZWNhdXNlIHRoYXQgaW1wYWN0cyBob3cgaXQncyBpbnRlZ3JhdGVkIGFuZCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBTbywgbGV0J3Mgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgbWFrZSBzdXJlIHRob3NlIG9wdGlvbnMgYXJlIHByb3Blcmx5IHNldC4gVGhpcyBpbml0aWFsIGF1ZGl0IHdpbGwgY2xhcmlmeSB0aGUgZ3JvdW5kd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzguNDY3MjQ1NzQzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1NzIzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9DX1NZU0NUTHxjb25maWcgU1lTQ1RMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz02Nz1jb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTgyLVxcbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgU1lTQ1RMXFxuZnMvcHJvYy9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xNzEyPWNvbmZpZyBIQVZFX1VJRDE2XFxuLS1cXG5pbml0L0tjb25maWctMTcxNC1cXG5pbml0L0tjb25maWc6MTcxNTpjb25maWcgU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRVxcbmluaXQvS2NvbmZpZy0xNzE2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xNzE5LVxcbmluaXQvS2NvbmZpZzoxNzIwOmNvbmZpZyBTWVNDVExfQVJDSF9VTkFMSUdOX05PX1dBUk5cXG5pbml0L0tjb25maWctMTcyMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTcyNi1cXG5pbml0L0tjb25maWc6MTcyNzpjb25maWcgU1lTQ1RMX0FSQ0hfVU5BTElHTl9BTExPV1xcbmluaXQvS2NvbmZpZy0xNzI4LVxcdGJvb2xcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTI3NzU9Y29uZmlnIFJFU09VUkNFX0tVTklUX1RFU1RcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTI3ODctXFxubGliL0tjb25maWcuZGVidWc6Mjc4ODpjb25maWcgU1lTQ1RMX0tVTklUX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNzg5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBzeXNjdGxcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NDEuMzQyOTc3MjA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjU5Nzk2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmcy9wcm9jL0tjb25maWdgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnMvcHJvYy9LY29uZmlnYCBhbmQgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19TWVNDVExgLiAgVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgbWVudGFsbHkgZmxhZyB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiBub3cgZWZmaWNpZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlIHRlcm0gXCJTWVNDVExcIi4gVGhpcyBzaG91bGQgcXVpY2tseSByZXR1cm4gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IGl0IGVuYWJsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDM2LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjQzLjIwODk1OTk4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODY1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCIsXG4gICAgXCJwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo0My4zMDM4NDAwOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTUzMTcxNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NDMuMzA0NTYwMDExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI5NTI0NDY0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmY0ODA2OTNkNGJiNDQ3Y2E2N2Q2ZWJiMjkxMWJiNjFhZGEzYjNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxODozMTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xuaW5kZXggMjEzYWUxZDZhMDE0Ny4uNDczNzQzMWZkYjE2ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xuKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5AQCAtMTgxLDEyICsxODEsMTUgQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuK1x0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcbiB7XG4rXHRpZiAoKnVfcHRyIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcbiB9XG4gXG5AQCAtMTk1LDEwICsxOTgsMTAgQEAgc3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4gXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4tXHRcdFx0XHRcdCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4rc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4rXHRcdFx0XHRcdFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4rXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gXHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiB9XG4gXG5AQCAtMjI5LDggKzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbitcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuIFx0cmV0dXJuIC1FTk9TWVM7XG4gfVxuQEAgLTMzMyw3ICszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuLVx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTtcbitcdFx0XHRcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo0My4zMDQ1NjE0MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTMwMDEzNTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoIHJlcXVlc3QuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGFib3V0IEtNU0FOIGZ1enppbmcgdmVyc3VzIEtBU0FOIG9yIHN0YW5kYXJkIGZ1enppbmcgaXMganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUga2VybmVsIGVuZ2luZWVyaW5nOyBwdXJlbHkgYSB0cmlhZ2UgcXVlc3Rpb24uIENvbXBsZXRlbHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgZm9jdXNlZCBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBzZWUgYSBmZXcga2V5IGNoYW5nZXM6XG5cbjEuICBJbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAsIHRoZSBjYWxsIHRvIGBwcm9jX2ludF9jb252YCBoYXMgYSBgZmFsc2VgIGNoYW5nZWQgdG8gYHRydWVgIGZvciB0aGUgYG1pbm1heGAgZmxhZy5cbjIuICBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYCBub3cgaW5jbHVkZXMgYSBjaGVjayBgaWYgKCp1X3B0ciBcdTAwM2UgSU5UX01BWCkgcmV0dXJuIC1FSU5WQUw7YC4gU21hcnQsIGEgZ29vZCBib3VuZGFyeSBjaGVjay5cbjMuICBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBwcm9jX3Vsb25nX2NvbnZgIGNoYW5nZXMgdGhlIGJvb2xlYW4gZmxhZyBmcm9tIGBmYWxzZWAgdG8gYHRydWVgLlxuNC4gIEZpbmFsbHksIHRoZSBjYWxsYmFjayBuYW1lIGluIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGdldHMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjaGFuZ2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBlc3BlY2lhbGx5IGhvdyB0aGUgYG1pbm1heGAgZmxhZyBpbmZsdWVuY2VzIHRoZWlyIG9wZXJhdGlvbi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGludG8gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AgYW5kIG90aGVyIHJlbGV2YW50IGNvZGUgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGFsbCBhYm91dCB2ZXJpZnlpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgdGhhdCBib29sZWFuIGZsYWchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1Mi42MDQ3MDAwNjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDczMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfaW50X2NvbnZ8cHJvY191bG9uZ19jb252XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGltZS9qaWZmaWVzLmM9MTUyPXN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNTc6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU5LXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE2NDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjg6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc0LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE3NjpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVxcdFxcdFxcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0OlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jPTE5Nj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIwMTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA0OlxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVxcdFxcdFxcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjEwLVxcdFxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE0LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjIxLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXFx0XFx0XFx0XFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIyODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIzNTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yNTc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2Mi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6Mjg0OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDYtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzExPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMzOTpcXHRcXHRcXHRcXHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NTIuNjYzNzgwMjM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODk5NjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWlubWF4YCBJbXBsZW1lbnRhdGlvbiBUaHJvdWdoIENvbnZlcnNpb24gRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uJ3MgYmVoYXZpb3IsIEkgbmVlZCB0byBncm91bmQgbXlzZWxmIGluIGhvdyB0aGUgdW5kZXJseWluZyB0eXBlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIGNvbnZlcnNpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YC4gVGhlc2UgY29udmVyc2lvbnMsIG9yIHRoZWlyIGFic2VuY2UsIGFyZSB3aGVyZSB0aGUgc3VidGxldGllcyBvZiBwb3RlbnRpYWwgb3ZlcmZsb3csIHR5cGUgcHJvbW90aW9uLCBvciBldmVuIGltcGxpY2l0IGNhc3RpbmcgaXNzdWVzIHdpbGwgbGlrZWx5IHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBpbnRlZ2VyIHR5cGVzIGluIHRoZSBgbWlubWF4YCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVtIGlzIGtleSB0byBtYWtpbmcgc3VyZSBJIGRvbid0IG1pc3MgYW55IG9idmlvdXMsIG9yIHN1YnRsZSwgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NTQuNTUzNzQ0NjUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jX2ludF9jb252fHByb2NfdWxvbmdfY29udlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc3lzY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3N5c2N0bC5jPTUwNj1pbnQgcHJvY19pbnRfdTJrX2NvbnZfdW9wKGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgY29uc3QgYm9vbCAqbmVncCxcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy01MjMtLyoqXFxua2VybmVsL3N5c2N0bC5jOjUyNDogKiBwcm9jX2ludF9jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXFxua2VybmVsL3N5c2N0bC5jLTUyNS0gKlxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTUzOS0gKi9cXG5rZXJuZWwvc3lzY3RsLmM6NTQwOmludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcXG5rZXJuZWwvc3lzY3RsLmMtNTQxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTU3Mz1zdGF0aWMgaW50IHN5c2N0bF9rZXJuX3RvX3VzZXJfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTU3Ny1cXG5rZXJuZWwvc3lzY3RsLmM6NTc4OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvc3lzY3RsLmMtNTc5LVxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3N5c2N0bC5jLTU4MC17XFxua2VybmVsL3N5c2N0bC5jOjU4MTpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvc3lzY3RsLmMtNTgyLVxcdFxcdFxcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy01ODYtXFxua2VybmVsL3N5c2N0bC5jOjU4NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC9zeXNjdGwuYy01ODgtXFx0XFx0XFx0XFx0ICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbmtlcm5lbC9zeXNjdGwuYy01ODkte1xcbmtlcm5lbC9zeXNjdGwuYzo1OTA6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvc3lzY3RsLmMtNTkxLVxcdFxcdFxcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz04MjA9aW50IHByb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy04MjMtXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcbmtlcm5lbC9zeXNjdGwuYzo4MjQ6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252IH0pO1xcbmtlcm5lbC9zeXNjdGwuYy04MjUtfVxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTg2ND1pbnQgcHJvY19kb2ludHZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtODY3LVxcdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcXG5rZXJuZWwvc3lzY3RsLmM6ODY4OlxcdFxcdFxcdCAgICh1bmlvbiBwcm9jX3ZlY19jb252KXsgLmludF9jb252ID0gZG9fcHJvY19pbnRfY29udl9taW5tYXggfSk7XFxua2VybmVsL3N5c2N0bC5jLTg2OS19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9OTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHByb2NfZG91OHZlY19taW5tYXgpO1xcbi0tXFxua2VybmVsL3N5c2N0bC5jLTk0OC0vKipcXG5rZXJuZWwvc3lzY3RsLmM6OTQ5OiAqIHByb2NfdWxvbmdfY29udiAtIENoYW5nZSB1c2VyIG9yIGtlcm5lbCBwb2ludGVyIGJhc2VkIG9uIGRpcmVjdGlvblxcbmtlcm5lbC9zeXNjdGwuYy05NTAtICpcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy05NjMtICovXFxua2VybmVsL3N5c2N0bC5jOjk2NDppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy05NjUtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMDM2PXN0YXRpYyBpbnQgcHJvY191bG9uZ19rMnVfY29udih1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMDQwLVxcbmtlcm5lbC9zeXNjdGwuYzoxMDQxOnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy0xMDQyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvc3lzY3RsLmMtMTA0My17XFxua2VybmVsL3N5c2N0bC5jOjEwNDQ6XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbmtlcm5lbC9zeXNjdGwuYy0xMDQ1LVxcdFxcdFxcdCAgICAgICBwcm9jX3Vsb25nX3Uya19jb252LCBwcm9jX3Vsb25nX2sydV9jb252KTtcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMDg5PWludCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTEwOTItXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfVUxPTkcsXFxua2VybmVsL3N5c2N0bC5jOjEwOTM6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAudWxvbmdfY29udiA9IGRvX3Byb2NfdWxvbmdfY29udiB9KTtcXG5rZXJuZWwvc3lzY3RsLmMtMTA5NC19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTEwMi0gKiBAcHBvczogZmlsZSBwb3NpdGlvblxcbmtlcm5lbC9zeXNjdGwuYzoxMTAzOiAqIEBjb252OiBDdXN0b20gY29udmVydGVyIGNhbGwgYmFjay4gRGVmYXVsdHMgdG8gZG9fcHJvY19pbnRfY29udlxcbmtlcm5lbC9zeXNjdGwuYy0xMTA0LSAqXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9MTExMD1pbnQgcHJvY19kb2ludHZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTExNS1cXHRpZiAoIWNvbnYpXFxua2VybmVsL3N5c2N0bC5jOjExMTY6XFx0XFx0Y29udiA9IGRvX3Byb2NfaW50X2NvbnY7XFxua2VybmVsL3N5c2N0bC5jLTExMTctXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1NC42MDMzNDIyMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDg1MDMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaWdnaW5nIGludG8gSmlmZmllcyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBqaWZmaWVzYCBhcmUgaGFuZGxlZC4gSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byByZWFsbHkgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCBga2VybmVsL3RpbWUvamlmZmllcy5jYCBhbmQgZm9jdXNpbmcgb24gdGhlIGFyZWFzIGFyb3VuZCBsaW5lcyAxNTAtMjUwIGFuZCB0aGVuIGFnYWluIGFyb3VuZCAzMDAtMzUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgdG8gYW5hbHl6ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGluY3JlbWVudGluZyBoYXBwZW5zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGFsbCB0aWVzIGludG8gdGhlIGJyb2FkZXIgdGltZWtlZXBpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc2VjdGlvbnMgYmVjYXVzZSB0aGV5J3JlIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgcmFjZSBjb25kaXRpb25zIGFuZCBvdmVyZmxvdyBpc3N1ZXMgYXJlIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1Ni44NTgxOTUzNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvamlmZmllcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiAxNTU6XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE2MTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X3VzZXJoeixcXG4gMTcwOlxcdFxcdFxcdFxcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE3NzpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxuIDE4NTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcXG4gMTg5OlxcdHtcXG4gMTkwOlxcdFxcdGlmICgqdV9wdHIgXFx1MDAzZSBJTlRfTUFYKVxcbiAxOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XFxuIDE5OTpcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gMjA2OlxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbiAyMDk6XFx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbiAyMTA6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAyMTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjE4OlxcdHtcXG4gMjE5OlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIDIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzMzpcXHR9XFxuIDIzNDpcXHRcXG4gMjM1OlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzc6XFx0e1xcbiAyMzg6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjU2Ljg1ODI4MTAzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDEyMzY4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgS2VybmVsIFN5c3RlbSBDb250cm9sKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBjb250cm9sIChzeXNjdGwpIGludGVyZmFjZSBoYW5kbGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgY29udmVyc2lvbnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9zeXNjdGwuY2AgZmlsZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBJdCdzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYnJpZGdlIHRoZSBnYXAgYmV0d2VlbiB0aGUga2VybmVsJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgdmFsdWVzIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGltcGxlbWVudGF0aW9uLCBhcyB0aGVzZSBhcmUgZm91bmRhdGlvbmFsIHdoZW4gZGVhbGluZyB3aXRoIHN5c2N0bHMgdGhhdCBpbnRlcmZhY2UgdG8gdGhlIHVuZGVybHlpbmcgdmFsdWVzLiBUaGlzJ2xsIHByb2JhYmx5IGludm9sdmUgZXhhbWluaW5nIGhvdyB0aGV5IGhhbmRsZSBsaW1pdHMsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB0eXBlIGNvbnZlcnNpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaGFuZGxlIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgZm9ybWF0cy4gSSdtIGtlZW4gdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyLXN1cHBsaWVkIHZhbHVlcyB0cmFuc2xhdGUgaW50byBrZXJuZWwtdXNhYmxlIHZhbHVlcywgYW5kIHZpY2UgdmVyc2EuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjU4Ljg3MDY1NjcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc3lzY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdGludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcXG4gNTQxOlxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbiA1NDI6XFx0XFx0XFx0ICBpbnQgKCp1c2VyX3RvX2tlcm4pKGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciksXFxuIDU0MzpcXHRcXHRcXHQgIGludCAoKmtlcm5fdG9fdXNlcikoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKSlcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdGlmIChTWVNDVExfS0VSTl9UT19VU0VSKGRpcikpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4ga2Vybl90b191c2VyKG5lZ3AsIHVfcHRyLCBrX3B0cik7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdGlmIChrX3B0cl9yYW5nZV9jaGVjaykge1xcbiA1NDk6XFx0XFx0XFx0aW50IHRtcF9rLCByZXQ7XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdFxcdGlmICghdGJsKVxcbiA1NTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1MzpcXHRcXHRcXHRyZXQgPSB1c2VyX3RvX2tlcm4obmVncCwgdV9wdHIsIFxcdTAwMjZ0bXBfayk7XFxuIDU1NDpcXHRcXHRcXHRpZiAocmV0KVxcbiA1NTU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTU2OlxcdFxcdFxcdGlmICgodGJsLVxcdTAwM2VleHRyYTEgXFx1MDAyNlxcdTAwMjYgKihpbnQgKil0YmwtXFx1MDAzZWV4dHJhMSBcXHUwMDNlIHRtcF9rKSB8fFxcbiA1NTc6XFx0XFx0XFx0ICAgICh0YmwtXFx1MDAzZWV4dHJhMiBcXHUwMDI2XFx1MDAyNiAqKGludCAqKXRibC1cXHUwMDNlZXh0cmEyIFxcdTAwM2MgdG1wX2spKVxcbiA1NTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1OTpcXHRcXHRcXHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xcbiA1NjA6XFx0XFx0fSBlbHNlXFxuIDU2MTpcXHRcXHRcXHRyZXR1cm4gdXNlcl90b19rZXJuKG5lZ3AsIHVfcHRyLCBrX3B0cik7XFxuIDU2MjpcXHRcXHRyZXR1cm4gMDtcXG4gNTYzOlxcdH1cXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFxuIDU2NjpcXHRcXG4gNTY3OlxcdHN0YXRpYyBpbnQgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udihjb25zdCBib29sICpuZWdwLCBjb25zdCB1bG9uZyAqdV9wdHIsXFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKmtfcHRyKVxcbiA1Njk6XFx0e1xcbiA1NzA6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xcbiA1NzE6XFx0fVxcbiA1NzI6XFx0XFxuIDU3MzpcXHRzdGF0aWMgaW50IHN5c2N0bF9rZXJuX3RvX3VzZXJfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxcbiA1NzQ6XFx0e1xcbiA1NzU6XFx0XFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xcbiA1NzY6XFx0fVxcbiA1Nzc6XFx0XFxuIDU3ODpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1OC44NzA3OTI4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk5MDY3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBhIEtleSBDb252ZXJzaW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoaXMgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGZvciBhIG1vbWVudCBhbmQgdGFrZSBhIGxvb2sgYXQgYHByb2NfdWxvbmdfY29udmAgd2l0aGluIGBrZXJuZWwvc3lzY3RsLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdW5zaWduZWQgbG9uZyB2YWx1ZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbCBpbnRlcmZhY2UsIGFuZCBJIHN1c3BlY3QgaXQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gaG93IHdlJ3JlIHNlZWluZyB0aGUgYmVoYXZpb3Igd2UncmUgc2VlaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBjb252ZXJ0cyBhbmQgdmFsaWRhdGVzIHRoZXNlIHZhbHVlcywgd2hpY2ggY291bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgd2hhdCdzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMjowMC4zNjk4NjM1NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zeXNjdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjQ6XFx0aW50IHByb2NfdWxvbmdfY29udih1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcXG4gOTY1OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuIDk2NjpcXHRcXHRcXHQgICAgaW50ICgqdXNlcl90b19rZXJuKShjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciksXFxuIDk2NzpcXHRcXHRcXHQgICAgaW50ICgqa2Vybl90b191c2VyKSh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cikpXFxuIDk2ODpcXHR7XFxuIDk2OTpcXHRcXHRpZiAoU1lTQ1RMX0tFUk5fVE9fVVNFUihkaXIpKVxcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIGtlcm5fdG9fdXNlcih1X3B0ciwga19wdHIpO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHRpZiAoa19wdHJfcmFuZ2VfY2hlY2spIHtcXG4gOTczOlxcdFxcdFxcdHVsb25nIHRtcF9rO1xcbiA5NzQ6XFx0XFx0XFx0aW50IHJldDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0XFx0aWYgKCF0YmwpXFxuIDk3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTc4OlxcdFxcdFxcdHJldCA9IHVzZXJfdG9fa2Vybih1X3B0ciwgXFx1MDAyNnRtcF9rKTtcXG4gOTc5OlxcdFxcdFxcdGlmIChyZXQpXFxuIDk4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5ODE6XFx0XFx0XFx0aWYgKCh0YmwtXFx1MDAzZWV4dHJhMSBcXHUwMDI2XFx1MDAyNiAqKHVsb25nICopdGJsLVxcdTAwM2VleHRyYTEgXFx1MDAzZSB0bXBfaykgfHxcXG4gOTgyOlxcdFxcdFxcdCAgICAodGJsLVxcdTAwM2VleHRyYTIgXFx1MDAyNlxcdTAwMjYgKih1bG9uZyAqKXRibC1cXHUwMDNlZXh0cmEyIFxcdTAwM2MgdG1wX2spKVxcbiA5ODM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDk4NDpcXHRcXHRcXHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xcbiA5ODU6XFx0XFx0fSBlbHNlXFxuIDk4NjpcXHRcXHRcXHRyZXR1cm4gdXNlcl90b19rZXJuKHVfcHRyLCBrX3B0cik7XFxuIDk4NzpcXHRcXHRyZXR1cm4gMDtcXG4gOTg4OlxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0LyoqXFxuIDk5MTpcXHQgKiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCAtIEFzc2lnbiB1c2VyIHZhbHVlIHRvIGEga2VybmVsIHBvaW50ZXJcXG4gOTkyOlxcdCAqXFxuIDk5MzpcXHQgKiBAdV9wdHI6IHBvaW50ZXIgdG8gdXNlciBzcGFjZSB2YXJpYWJsZVxcbiA5OTQ6XFx0ICogQGtfcHRyOiBwb2ludGVyIHRvIGtlcm5lbCB2YXJpYWJsZVxcbiA5OTU6XFx0ICogQHVfcHRyX29wOiBleGVjdXRlIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFzc2lnbmluZyB0byBrX3B0clxcbiA5OTY6XFx0ICpcXG4gOTk3OlxcdCAqIFVzZXMgV1JJVEVfT05DRSB0byBhc3NpZ24gdmFsdWUgdG8ga19wdHIuIEV4ZWN1dGVzIHVfcHRyX29wIGlmXFxuIDk5ODpcXHQgKiBub3QgTlVMTC5cXG4gOTk5OlxcdCAqXFxuMTAwMDpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MuXFxuMTAwMTpcXHQgKi9cXG4xMDAyOlxcdGludCBwcm9jX3Vsb25nX3Uya19jb252X3VvcChjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4xMDAzOlxcdFxcdFxcdFxcdCAgICB1bG9uZyAoKnVfcHRyX29wKShjb25zdCB1bG9uZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMyOjAwLjM3MDAxMjUzNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg2OTcyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBtaW4vbWF4IGNoZWNrcyB3aXRoaW4gdGhlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgc3lzY3RsIGhhbmRsZXJzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWFraW5nIHN1cmUgdGhhdCBib3VuZHMgYXJlIGFwcHJvcHJpYXRlbHkgZW5mb3JjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uIG9mIHVzZXItcHJvdmlkZWQgdmFsdWVzIHRvIGtlcm5lbCB2YWx1ZXMsIGFuZCBpdCdzIGFkZGluZyBhbiBvdmVyZmxvdyBjaGVjay5cblxuRmlyc3QsIEkgbG9va2VkIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHNlZSBpdCdzIGNoYW5naW5nIHRoZSBib29sZWFuIHBhcmFtZXRlciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBhbmQgYWRkcyBhbiBvdmVyZmxvdyBjaGVjayBpbiBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYC4gTXkgcXVpY2sgcmV2aWV3IG9mIGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAgdGhlbXNlbHZlcyBzaG93IHRoYXQgdGhleSB1c2UgdGVtcG9yYXJ5IHZhcmlhYmxlcyAoYHRtcF9rYCkgKmJlZm9yZSogYW55IGJvdW5kcyBjaGVja3Mgb3IgYXNzaWdubWVudHMsIGFuZCB0aGF0IHRoZXNlIGFyZSBwb3B1bGF0ZWQgYnkgYHVzZXJfdG9fa2VybigpYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gVGhlcmUgYXJlbid0IGFueSBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFBhZGRpbmcsIHN0cnVjdHMsIGFuZCBkeW5hbWljIGJ1ZmZlciBzaXplcyBhcmUgYWxsIHVudG91Y2hlZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgbGVha3MuXG5cbk5leHQsIEkgY29uc2lkZXJlZCB3aGV0aGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbmVjZXNzYXJ5IGhlcmUsIGFuZCBjb21wYXJlZCBpdCB0byBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKS4gS01TQU4gaXMgY29uY2VybmVkIHdpdGggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8gbGVha3MsIHdoZXJlYXMgS0FTQU4gY292ZXJzIHRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEdpdmVuIHRoZSBwYXRjaCdzIGZvY3VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsdWUgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIHN5c2N0bCBoYW5kbGVycywgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBpbnRyb2R1Y2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGFkZHJlc3NpbmcgaW50ZWdlciBhbmQgdWxvbmcgY29udmVyc2lvbiBib3VuZHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuSGVyZSdzIG15IGNsZWFyIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgZW5hYmxpbmcgbW9yZSByb2J1c3QgbWluL21heCByYW5nZSBjaGVja3MsIGFuZCBpdCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrLiBNZW1vcnkgc2FmZXR5IGlzIGFzc3VyZWQgYmVjYXVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyB3cml0dGVuIHRvICpiZWZvcmUqIGJlaW5nIHVzZWQgb3IgY29tcGFyZWQsIGFuZCB0aGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgb2Yga2VybmVsIG1lbW9yeSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIHJlYWQgb3IgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhay4gU2luY2UgdGhlIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsdWUgdmFsaWRhdGlvbiwgc3RhbmRhcmQgS0FTQU4gdGVzdGluZyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IGFzcGVjdHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cblxuTm93IEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjc3LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMyOjA2LjI1Njk4NzI1N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3lzY3RsIGNvbnZlcnNpb24gaGFuZGxlcnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgcGVyZm9ybSBtaW4vbWF4IHJhbmdlIGNoZWNrcyAoZW5hYmxpbmcga19wdHJfcmFuZ2VfY2hlY2s9dHJ1ZSBpbiBwcm9jX2ludF9jb252IGFuZCBwcm9jX3Vsb25nX2NvbnYpIGFuZCBhZGRzIGFuIElOVF9NQVggdmFsaWRhdGlvbiBjaGVjayBpbiBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 18:11:49 +0000 UTC FinishedAt: 2026-09-06 18:32:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSCTL" ], "series_id": "8df0e9e8-9874-4bb5-9c0e-7735456eb071" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "proc_doulongvec_ms_jiffies_minmax", "proc_dointvec_ms_jiffies_minmax" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7LAogICAgJiMzNDtwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3lzY3RsIGNvbnZlcnNpb24gaGFuZGxlcnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgcGVyZm9ybSBtaW4vbWF4IHJhbmdlIGNoZWNrcyAoZW5hYmxpbmcga19wdHJfcmFuZ2VfY2hlY2s9dHJ1ZSBpbiBwcm9jX2ludF9jb252IGFuZCBwcm9jX3Vsb25nX2NvbnYpIGFuZCBhZGRzIGFuIElOVF9NQVggdmFsaWRhdGlvbiBjaGVjayBpbiBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTg6MzE6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5pbmRleCAyMTNhZTFkNmEwMTQ3Li40NzM3NDMxZmRiMTZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmNcbkBAIC0xODEsMTIgJiM0MzsxODEsMTUgQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuJiM0MztcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbiB9XG4gXG4gc3RhdGljIGludCBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMoY29uc3QgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIpXG4ge1xuJiM0MztcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRyZXR1cm4gcHJvY191bG9uZ191MmtfY29udl91b3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfbXNlY3NfdG9famlmZmllcyk7XG4gfVxuIFxuQEAgLTE5NSwxMCAmIzQzOzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiBcdHJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4mIzQzO1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4tXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuJiM0MztcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgICAgc3lzY3RsX3Uya191bG9uZ19jb252X21zLCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXMpO1xuIH1cbiBcbkBAIC0yMjksOCAmIzQzOzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4mIzQzO1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG5AQCAtMzMzLDcgJiM0MzszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuLVx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTtcbiYjNDM7XHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Byb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7LAogICAgJiMzNDtwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgc3lzY3RsIGhhbmRsZXJzIGZvciBqaWZmaWVzIGNvbnZlcnNpb25zIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IGVuYWJsZSBtaW4vbWF4IHJhbmdlIGNoZWNrcyBhbmQgYWRkcyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiB1c2VyLXN1cHBsaWVkIG1pbGxpc2Vjb25kIHZhbHVlcy4gVGhlc2Ugc3lzY3RsIHByb2MgaGFuZGxlcnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3Byb2Mvc3lzIHN5c2N0bCBub2RlcyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBjb252ZXJzaW9uIGFuZCBib3VuZGFyeSBjaGVja2luZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmZjQ4MDY5M2Q0YmI0NDdjYTY3ZDZlYmIyOTExYmI2MWFkYTNiM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jCmluZGV4IDIxM2FlMWQ2YTAxNDcuLjQ3Mzc0MzFmZGIxNmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKQEAgLTE4MSwxMiAmIzQzOzE4MSwxNSBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLAogCQkJCQkgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLAogCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7Ci0JcmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsCiYjNDM7CXJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsCiAJCQkgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpOwogfQogCiBzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cikKIHsKJiM0MzsJaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gcHJvY191bG9uZ191MmtfY29udl91b3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfbXNlY3NfdG9famlmZmllcyk7CiB9CiAKQEAgLTE5NSwxMCAmIzQzOzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cikKIAlyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsCi0JCQkJCSBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiYjNDM7c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsCiYjNDM7CQkJCQkJaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKQogewotCXJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsCiYjNDM7CXJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSwKIAkJCSAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7CiB9CiAKQEAgLTIyOSw4ICYjNDM7MjMyLDggQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKLQkJCQkJIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKJiM0MztzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKJiM0MzsJCQkJCQlpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0zMzMsNyAmIzQzOzMzNiw3IEBAIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsCiAJCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLAotCQkJCSAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyk7CiYjNDM7CQkJCSAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpOwogfQogRVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgUGF0Y2gqKgoKT2theSwgc28gd2UgbmVlZCB0byBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHByYWN0aWNhbCBhcHByb2FjaC4gTGV0JiMzOTtzIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZpcnN0LiBJJiMzOTtsbCByZWFjaCBmb3IgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgcXVpY2tlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGluIHRoaXMgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgdGhlICplbnRpcmUqIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmluKiB0aGF0IGZpbGUuIFByaW1hcmlseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXNjdGwgb3IgcHJvYyBmdW5jdGlvbnMsIGlmIGFueSwgYXJlIGRlZmluZWQgYW5kLCBjcnVjaWFsbHksICpob3cqIHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBqaWZmaWVzIGNvbnRleHQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gdGhlIHdheSB0aGVzZSBmdW5jdGlvbnMgYXJlIGVtcGxveWVkPyBUaGlzIGluaXRpYWwgc3dlZXAgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBwcm9wb3NlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2guIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7c2hhcGUmIzM0OyBvZiB0aGUgY29kZSBhbmQgd2hlcmUgdGhlIHNlbnNpdGl2ZSBvciBjcml0aWNhbCBhcmVhcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL2ppZmZpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0XHRcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTc0Olx0XHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE3NTpcdHtcbiAxNzY6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE3NzpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTgxOlx0XHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTgyOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxODM6XHR7XG4gMTg0Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIDE4NTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIDE4OTpcdHtcbiAxOTA6XHRcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4gMTkxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE5MjpcdFxuIDE5MzpcdFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIDE5NDpcdH1cbiAxOTU6XHRcbiAxOTY6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiAxOTc6XHR7XG4gMTk4Olx0XHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuIDIwMjpcdFx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gMjA1Olx0XHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiAyMDY6XHR9XG4gMjA3Olx0XG4gMjA4Olx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxuIDIwOTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAyMTA6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjExOlx0e1xuIDIxMjpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMjE2Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMjE3Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMTg6XHR7XG4gMjE5Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxuIDIyMzpcdFx0XHRcdFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAyMjk6XHRcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAyMzA6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHJldHVybiAtRU5PU1lTO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbiAyMzY6XHRcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjM3Olx0e1xuIDIzODpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjM5Olx0fVxuIDI0MDpcdCNlbmRpZlxuIDI0MTpcdFxuIDI0MjpcdC8qKlxuIDI0MzpcdCAqIHByb2NfZG9pbnR2ZWNfamlmZmllcyAtIHJlYWQgYSB2ZWN0b3Igb2YgaW50ZWdlcnMgYXMgc2Vjb25kc1xuIDI0NDpcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuIDI0NTpcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcbiAyNDY6XHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcbiAyNDc6XHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXG4gMjQ4Olx0ICogQHBwb3M6IGZpbGUgcG9zaXRpb25cbiAyNDk6XHQgKlxuIDI1MDpcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxuIDI1MTpcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXG4gMjUyOlx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIHNlY29uZHMsIGFuZCBhcmUgY29udmVydGVkIGludG9cbiAyNTM6XHQgKiBqaWZmaWVzLlxuIDI1NDpcdCAqXG4gMjU1Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4gMjU2Olx0ICovXG4gMjU3Olx0aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbiAyNTg6XHRcdFx0XHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4gMjU5Olx0e1xuIDI2MDpcdFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gMjYxOlx0XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XG4gMjYyOlx0fVxuIDI2MzpcdEVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19qaWZmaWVzKTtcbiAyNjQ6XHRcbiAyNjU6XHQvKipcbiAyNjY6XHQgKiBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzIC0gcmVhZCBhIHZlY3RvciBvZiBpbnRlZ2VycyBhcyAxL1VTRVJfSFogc2Vjb25kc1xuIDI2NzpcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuIDI2ODpcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcbiAyNjk6XHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGppZmZpZXMgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZCwgYXMgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGltaW5nIGFuZCBzY2hlZHVsaW5nIGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgYW55IGF0b21pYyBvcGVyYXRpb25zIHVzZWQgZm9yIHVwZGF0ZXMsIGFuZCBob3cgdGhlIHRpbWVyIGludGVycnVwdHMgaW50ZXJhY3Qgd2l0aCB0aGlzIGdsb2JhbCBjb3VudGVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIHdyYXAtYXJvdW5kIGlzc3VlcyBhbmQgaG93IHRob3NlIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiA2NC1iaXQgamlmZmllcyBvbiBtb2Rlcm4gc3lzdGVtcy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9ucyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlIEkmIzM5O20gcnVubmluZyBvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LCBhcyBudW1lcm91cyBwYXJ0cyBvZiB0aGUga2VybmVsIHJlbHkgb24gamlmZmllcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZnVuY3Rpb25zIHRoYXQgZ2V0IG9yIHNldCBqaWZmaWVzLCBhbmQgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gb3ZlcmFsbCBrZXJuZWwgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGhpZ2gtZnJlcXVlbmN5IGV2ZW50IGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXG4gMjcxOlx0ICogQHBwb3M6IHBvaW50ZXIgdG8gdGhlIGZpbGUgcG9zaXRpb25cbiAyNzI6XHQgKlxuIDI3MzpcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxuIDI3NDpcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXG4gMjc1Olx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIDEvVVNFUl9IWiBzZWNvbmRzLCBhbmRcbiAyNzY6XHQgKiBhcmUgY29udmVydGVkIGludG8gamlmZmllcy5cbiAyNzc6XHQgKlxuIDI3ODpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLlxuIDI3OTpcdCAqL1xuIDI4MDpcdGludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDI4MTpcdFx0XHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4gMjgyOlx0e1xuIDI4MzpcdFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4gMjg0Olx0XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xuIDI4NTpcdH1cbiAyODY6XHRFWFBPUlRfU1lNQk9MKHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMpO1xuIDI4NzpcdFxuIDI4ODpcdC8qKlxuIDI4OTpcdCAqIHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyAtIHJlYWQgYSB2ZWN0b3Igb2YgaW50ZWdlcnMgYXMgMSBtaWxsaXNlY29uZHNcbiAyOTA6XHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcbiAyOTE6XHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXG4gMjkyOlx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXG4gMjkzOlx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxuIDI5NDpcdCAqIEBwcG9zOiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZVxuIDI5NTpcdCAqXG4gMjk2Olx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVx1MDAzZW1heGxlbi9zaXplb2YodW5zaWduZWQgaW50KSBpbnRlZ2VyXG4gMjk3Olx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy5cbiAyOTg6XHQgKiBUaGUgdmFsdWVzIHJlYWQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gMS8xMDAwIHNlY29uZHMsIGFuZFxuIDI5OTpcdCAqIGFyZSBjb252ZXJ0ZWQgaW50byBqaWZmaWVzLlxuIDMwMDpcdCAqXG4gMzAxOlx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4gMzAyOlx0ICovXG4gMzAzOlx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuIDMwNDpcdFx0XHRzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMDU6XHR7XG4gMzA2Olx0XHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbiAzMDc6XHRcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcbiAzMDg6XHR9XG4gMzA5Olx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMpO1xuIDMxMDpcdFxuIDMxMTpcdGludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDMxMjpcdFx0XHRcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMTM6XHR7XG4gMzE0Olx0XHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbiAzMTU6XHRcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gMzE2Olx0fVxuIDMxNzpcdFxuIDMxODpcdC8qKlxuIDMxOTpcdCAqIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCAtIHJlYWQgYSB2ZWN0b3Igb2YgbWlsbGlzZWNvbmQgdmFsdWVzIHdpdGggbWluL21heCB2YWx1ZXNcbiAzMjA6XHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcbiAzMjE6XHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXG4gMzIyOlx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXG4gMzIzOlx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxuIDMyNDpcdCAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXG4gMzI1Olx0ICpcbiAzMjY6XHQgKiBSZWFkcy93cml0ZXMgdXAgdG8gdGFibGUtXHUwMDNlbWF4bGVuL3NpemVvZih1bnNpZ25lZCBsb25nKSB1bnNpZ25lZCBsb25nXG4gMzI3Olx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy4gVGhlIHZhbHVlc1xuIDMyODpcdCAqIGFyZSB0cmVhdGVkIGFzIG1pbGxpc2Vjb25kcywgYW5kIGNvbnZlcnRlZCB0byBqaWZmaWVzIHdoZW4gdGhleSBhcmUgc3RvcmVkLlxuIDMyOTpcdCAqXG4gMzMwOlx0ICogVGhpcyByb3V0aW5lIHdpbGwgZW5zdXJlIHRoZSB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5XG4gMzMxOlx0ICogdGFibGUtXHUwMDNlZXh0cmExIChtaW4pIGFuZCB0YWJsZS1cdTAwM2VleHRyYTIgKG1heCkuXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbiAzMzQ6XHQgKi9cbiAzMzU6XHRpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIDMzNjpcdFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiAzMzc6XHR7XG4gMzM4Olx0XHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuIDMzOTpcdFx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gMzQwOlx0fVxuIDM0MTpcdEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcbiAzNDI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBpbnZlc3RpZ2F0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBKaWZmaWVzIGFuZCBUaW1lcnMqKgoKQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBwaW5wb2ludCB3aGVyZSBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGFyZSBhY3R1YWxseSBiZWluZyAqdXNlZCogd2l0aGluIHRoZSBrZXJuZWwgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5JiMzOTtyZSBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9ucyBhcmUuIEFyZSB0aGV5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcGFydCBvZiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zPyBBcmUgdGhleSB1c2VkIGluIGFueSBzcGVjaWZpYyBtb25pdG9yaW5nIHRvb2xzIG9yIHBlcmZvcm1hbmNlIHR1bmluZ3M/CgpJJiMzOTttIHRoaW5raW5nIHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIHByb2NmcyBlbnRyaWVzIHRvIGV4cG9zZSBhbmQgbW9kaWZ5IGludGVybmFsIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aW1pbmcsIG9yIHRpbWUgaW50ZXJ2YWxzLCBvciBwZXJoYXBzIGV2ZW4gcmVsYXRlZCB0byBgamlmZmllc2AgaW4gc29tZSB3YXksIHByb2JhYmx5IHVzZWQgZm9yIHJlYWRpbmcgYW5kIHVwZGF0aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgZGVhbGluZyB3aXRoICYjMzQ7bWlsbGlzZWNvbmRzJiMzNDsgKGBtc2ApIGFuZCAmIzM0O2ppZmZpZXMsJiMzNDsgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGJvdGggdGltaW5nIHJlbGF0ZWQsIHdpdGggYSBtaW4vbWF4IHJlc3RyaWN0aW9uOyBwcm9iYWJseSBmb3IgYSBzZXR0aW5nIHRoYXQgaXMgYmVzdCBleHByZXNzZWQgYXMgYSByYW5nZS4KCk15IGltbWVkaWF0ZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlaXIgZXhpc3RlbmNlLiBUaGVuIEkgY2FuIGFzc2VzcyB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoaW5ncyBsaWtlIHN5c3RlbSBwZXJmb3JtYW5jZSwgdGltZXIgYWNjdXJhY3ksIG9yIGV2ZW4gcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiB0aGUgc2V0dGluZ3MgdGhleSBtYW5hZ2UgYXJlIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXh8cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zNjE9cGFycG9ydF9kZXZpY2Vfc3lzY3RsX3RlbXBsYXRlID0ge1xuLS1cbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zNjgtXHRcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jOjM2OTpcdFx0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zNzAtXHRcdFx0LmV4dHJhMVx0XHQ9ICh2b2lkKikgXHUwMDI2cGFycG9ydF9taW5fdGltZXNsaWNlX3ZhbHVlLFxuLS1cbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zOTE9cGFycG9ydF9kZWZhdWx0X3N5c2N0bF90YWJsZSA9IHtcbi0tXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtMzk4LVx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYzozOTk6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtNDAwLVx0XHRcdC5leHRyYTFcdFx0PSAodm9pZCopIFx1MDAyNnBhcnBvcnRfbWluX3RpbWVzbGljZV92YWx1ZSxcbi0tXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTE0Mz1zdGF0aWMgaW50IHN5c2N0bF9jaGVja190YWJsZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKVxuLS1cbmZzL3Byb2MvcHJvY19zeXNjdGwuYy0xMTYwLVx0XHQgICAgKGVudHJ5LVx1MDAzZXByb2NfaGFuZGxlciA9PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KSB8fFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjExNjE6XHRcdCAgICAoZW50cnktXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHtcbmZzL3Byb2MvcHJvY19zeXNjdGwuYy0xMTYyLVx0XHRcdGlmICghZW50cnktXHUwMDNlZGF0YSlcbi0tXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTI5OD1zdGF0aWMgc3RydWN0IGN0bF9kaXIgKnN5c2N0bF9ta2Rpcl9wKHN0cnVjdCBjdGxfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgpXG4tLVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjAtICogcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcygpLCBwcm9jX2RvaW50dmVjX21pbm1heCgpLFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjEzNjE6ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KCksIHByb2NfZG91bG9uZ3ZlY19taW5tYXgoKVxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaD02NDc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmgtNjQ4LVx0XHRcdCAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg6NjQ5OmludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmgtNjUwLVx0XHRcdFx0ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmluY2x1ZGUvbGludXgvamlmZmllcy5oPTY1Mz1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NTQtXHRcdFx0ICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaDo2NTU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1Ni1cdFx0XHRcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMDk9RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTMxMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTE6aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzEyLVx0XHRcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE4LS8qKlxua2VybmVsL3RpbWUvamlmZmllcy5jOjMxOTogKiBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXggLSByZWFkIGEgdmVjdG9yIG9mIG1pbGxpc2Vjb25kIHZhbHVlcyB3aXRoIG1pbi9tYXggdmFsdWVzXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzIwLSAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMzQtICovXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzM1OmludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM2LVx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozNDE6RVhQT1JUX1NZTUJPTChwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTM0Mi1cbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNjY4PXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM2NzgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjc5Olx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4MC1cdG5laWdoX3Byb2NfdXBkYXRlKGN0bCwgd3JpdGUpO1xuLS1cbm5ldC9yZHMvc3lzY3RsLmM9NTI9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcmRzX3N5c2N0bF9yZHNfdGFibGVbXSA9IHtcbi0tXG5uZXQvcmRzL3N5c2N0bC5jLTU3LVx0XHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxubmV0L3Jkcy9zeXNjdGwuYzo1ODpcdFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxubmV0L3Jkcy9zeXNjdGwuYy01OS1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbixcbi0tXG5uZXQvcmRzL3N5c2N0bC5jLTY2LVx0XHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxubmV0L3Jkcy9zeXNjdGwuYzo2NzpcdFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxubmV0L3Jkcy9zeXNjdGwuYy02OC1cdFx0LmV4dHJhMVx0XHQ9IFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLFxuLS1cbm5ldC9yeHJwYy9zeXNjdGwuYz0zND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByeHJwY19zeXNjdGxfdGFibGVbXSA9IHtcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmMtNTgtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9yeHJwYy9zeXNjdGwuYzo1OTpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5uZXQvcnhycGMvc3lzY3RsLmMtNjAtXHRcdC5leHRyYTFcdFx0PSAodm9pZCAqKVx1MDAyNm9uZV9qaWZmeSxcbi0tXG5uZXQvcnhycGMvc3lzY3RsLmMtNjctXHRcdC5tb2RlXHRcdD0gMDY0NCxcbm5ldC9yeHJwYy9zeXNjdGwuYzo2ODpcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXG5uZXQvcnhycGMvc3lzY3RsLmMtNjktXHRcdC5leHRyYTFcdFx0PSAodm9pZCAqKVx1MDAyNm9uZV9qaWZmeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXNjdGwgSGFuZGxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIHN5c2N0bCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAuIEkgY2FuIHNlZSB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgIHBvcHMgdXAgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYCB0aHJvdWdoIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGZvciB0aG9zZSBuZWlnaGJvdXIgdGFibGUgcGFyYW1ldGVycyBsaWtlIGBiYXNlX3JlYWNoYWJsZV90aW1lX21zYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYWNjZXNzaWJsZSB2aWEgYC9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC8uLi5gIG9yIHRoZSBpcHY2IGVxdWl2YWxlbnQuIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGlzIGEgbGl0dGxlIG1vcmUgd2lkZXNwcmVhZCwgZm91bmQgaW4gYGRyaXZlcnMvcGFycG9ydC9wcm9jZnMuY2AsIGBuZXQvcmRzL3N5c2N0bC5jYCwgYW5kIGBuZXQvcnhycGMvc3lzY3RsLmNgLiBBbmQsIG5hdHVyYWxseSwgZGlyZWN0IHdyaXRlcyB0byBgL3Byb2Mvc3lzLy4uLmAgYWxzbyBjYWxsIHRoZXNlIGhhbmRsZXJzLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIFRoZSBmaXJzdCBwb2ludCBpcyBpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgd2hlcmUgdGhleSYjMzk7dmUgc3dpdGNoZWQgYHByb2NfaW50X2NvbnZgIGZyb20gYGZhbHNlYCB0byBgdHJ1ZWAuIFNvIHRoZSBtaW4vbWF4IGNoZWNrIGlzIG5vdyBlbmFibGVkLCBhbmQgdGhleSYjMzk7cmUgZml4aW5nIGFuIGVhcmxpZXIgb3ZlcnNpZ2h0LgoKTmV4dCwgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGBpZiAoKnVfcHRyICZndDsgSU5UX01BWCkgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBpcyBjcnVjaWFsIOKAkyB0aGV5JiMzOTtyZSBlbnN1cmluZyB0aGF0IHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlIGRvZXNuJiMzOTt0IGV4Y2VlZCB0aGUgbWF4aW11bSBpbnRlZ2VyIHZhbHVlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBkb3duIHRoZSBsaW5lLgoKVGhlbiwgdGhleSYjMzk7dmUgcmVuYW1lZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIHRvIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBkaWQgdGhlIHNhbWUgdGhpbmcgd2l0aCB0aGUgYm9vbCBhcmd1bWVudCB0byBgcHJvY191bG9uZ19jb252YCwgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYCwgYW5kIGVuYWJsZWQgdGhlIG1pbi9tYXggY2hlY2sgaGVyZSB0b28uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5LgoKQW5kLCBmaW5hbGx5LCBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YCBub3cgY2FsbHMgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuCgpUbyBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gbG9vayBhdCBob3cgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YCBhY3R1YWxseSB3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGludGVybmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zeXNjdGwuaD0xMjQ9aW50IHByb2NfZG91bG9uZ3ZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTQyLSAqL1xuaW5jbHVkZS9saW51eC9zeXNjdGwuaDoxNDM6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaC0xNDQtXHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmg9MTQ3PWludCBwcm9jX3VpbnRfY29udih1bG9uZyAqdV9wdHIsIHVpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTUwLVx0XHQgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWludCAqa19wdHIpKTtcbmluY2x1ZGUvbGludXgvc3lzY3RsLmg6MTUxOmludCBwcm9jX3Vsb25nX2NvbnYodWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTE1Mi1cdFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9NTA2PWludCBwcm9jX2ludF91MmtfY29udl91b3AoY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBjb25zdCBib29sICpuZWdwLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy01MjMtLyoqXG5rZXJuZWwvc3lzY3RsLmM6NTI0OiAqIHByb2NfaW50X2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cbmtlcm5lbC9zeXNjdGwuYy01MjUtICpcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTM5LSAqL1xua2VybmVsL3N5c2N0bC5jOjU0MDppbnQgcHJvY19pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsIGludCBkaXIsXG5rZXJuZWwvc3lzY3RsLmMtNTQxLVx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9NTczPXN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4tLVxua2VybmVsL3N5c2N0bC5jLTU3Ny1cbmtlcm5lbC9zeXNjdGwuYzo1Nzg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3N5c2N0bC5jLTU3OS1cdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3N5c2N0bC5jLTU4MC17XG5rZXJuZWwvc3lzY3RsLmM6NTgxOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvc3lzY3RsLmMtNTgyLVx0XHRcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTg2LVxua2VybmVsL3N5c2N0bC5jOjU4NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3N5c2N0bC5jLTU4OC1cdFx0XHRcdCAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC9zeXNjdGwuYy01ODkte1xua2VybmVsL3N5c2N0bC5jOjU5MDpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG5rZXJuZWwvc3lzY3RsLmMtNTkxLVx0XHRcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcbi0tXG5rZXJuZWwvc3lzY3RsLmM9ODIwPWludCBwcm9jX2RvaW50dmVjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG4tLVxua2VybmVsL3N5c2N0bC5jLTgyMy1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcbmtlcm5lbC9zeXNjdGwuYzo4MjQ6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252IH0pO1xua2VybmVsL3N5c2N0bC5jLTgyNS19XG4tLVxua2VybmVsL3N5c2N0bC5jPTg2ND1pbnQgcHJvY19kb2ludHZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3N5c2N0bC5jLTg2Ny1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcbmtlcm5lbC9zeXNjdGwuYzo4Njg6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252X21pbm1heCB9KTtcbmtlcm5lbC9zeXNjdGwuYy04NjktfVxuLS1cbmtlcm5lbC9zeXNjdGwuYz05NDY9RVhQT1JUX1NZTUJPTF9HUEwocHJvY19kb3U4dmVjX21pbm1heCk7XG4tLVxua2VybmVsL3N5c2N0bC5jLTk0OC0vKipcbmtlcm5lbC9zeXNjdGwuYzo5NDk6ICogcHJvY191bG9uZ19jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXG5rZXJuZWwvc3lzY3RsLmMtOTUwLSAqXG4tLVxua2VybmVsL3N5c2N0bC5jLTk2My0gKi9cbmtlcm5lbC9zeXNjdGwuYzo5NjQ6aW50IHByb2NfdWxvbmdfY29udih1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy05NjUtXHRcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXG4tLVxua2VybmVsL3N5c2N0bC5jPTEwMzY9c3RhdGljIGludCBwcm9jX3Vsb25nX2sydV9jb252KHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMDQwLVxua2VybmVsL3N5c2N0bC5jOjEwNDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXG5rZXJuZWwvc3lzY3RsLmMtMTA0Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvc3lzY3RsLmMtMTA0My17XG5rZXJuZWwvc3lzY3RsLmM6MTA0NDpcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC9zeXNjdGwuYy0xMDQ1LVx0XHRcdCAgICAgICBwcm9jX3Vsb25nX3Uya19jb252LCBwcm9jX3Vsb25nX2sydV9jb252KTtcbi0tXG5rZXJuZWwvc3lzY3RsLmM9MTA4OT1pbnQgcHJvY19kb3Vsb25ndmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTA5Mi1cdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX1VMT05HLFxua2VybmVsL3N5c2N0bC5jOjEwOTM6XHRcdFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAudWxvbmdfY29udiA9IGRvX3Byb2NfdWxvbmdfY29udiB9KTtcbmtlcm5lbC9zeXNjdGwuYy0xMDk0LX1cbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTEwMi0gKiBAcHBvczogZmlsZSBwb3NpdGlvblxua2VybmVsL3N5c2N0bC5jOjExMDM6ICogQGNvbnY6IEN1c3RvbSBjb252ZXJ0ZXIgY2FsbCBiYWNrLiBEZWZhdWx0cyB0byBkb19wcm9jX2ludF9jb252XG5rZXJuZWwvc3lzY3RsLmMtMTEwNC0gKlxuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMTEwPWludCBwcm9jX2RvaW50dmVjX2NvbnYoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtMTExNS1cdGlmICghY29udilcbmtlcm5lbC9zeXNjdGwuYzoxMTE2Olx0XHRjb252ID0gZG9fcHJvY19pbnRfY29udjtcbmtlcm5lbC9zeXNjdGwuYy0xMTE3LVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0xNTI9c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X21zKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxua2VybmVsL3RpbWUvamlmZmllcy5jOjE1NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU4LVx0XHRcdFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTkte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjE2MDpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2MS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTY0OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTY1LVx0XHRcdFx0XHQgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjE2ODpcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzItXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzQtXHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTc2Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3OS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xODEtXHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4My17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xODUtXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MTk2PXN0YXRpYyBpbnQgc3lzY3RsX2sydV91bG9uZ19jb252X21zKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjAxOnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwMi1cdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDQ6XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVx0XHRcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwOC0jZWxzZSAvLyBDT05GSUdfU1lTQ1RMXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTAtXHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTQtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjE1OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVx0XHRcdFx0XHQgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjEtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjIyOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjI4OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjI5LVx0XHRcdFx0XHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjM1OnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIzNi1cdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTI1Nz1pbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyNjE6XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjYyLX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yODMtXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyODQ6XHRcdFx0XHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTMwMz1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwNi1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDgtfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMTE9aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMxNTpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE2LX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTMzOC1cdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzM5Olx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBjaGFuZ2VzIGluIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBhcmUgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZpcnN0LCBhIGRldGFpbGVkIGxvb2sgYXQgdGhlIG1vZGlmaWNhdGlvbnM6CgoqICAgYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgOiBJdCYjMzk7cyBjYWxsaW5nIGBwcm9jX2ludF9jb252YCBub3cgd2l0aCBgdHJ1ZWAgZm9yIGBrX3B0cl9yYW5nZV9jaGVja2AuIFRoaXMgaXMgd29ydGggbm90aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBwcmV2aW91cyBsb2dpYyBkaWRuJiMzOTt0IGhhdmUgdGhhdCBjaGVjay4KKiAgIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgOiBUaGVyZSYjMzk7cyBhIG5ldyBjaGVjayBgaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgZXhwbGljaXRseSBsaW1pdGluZyB0aGUgaW5wdXQgcmFuZ2UuIFRoaXMgY291bGQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBieXBhc3NlcyBpZiBub3QgY29ycmVjdGx5IGhhbmRsZWQgZWxzZXdoZXJlLgoqICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGA6IExvb2tzIGxpa2UgaXQgd2FzIHJlbmFtZWQgZnJvbSBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgLCBhbmQgbm93IHVzZXMgYHRydWVgIGZvciBga19wdHJfcmFuZ2VfY2hlY2tgIHdoZW4gY2FsbGluZyBgcHJvY191bG9uZ19jb252YC4gQWdhaW4sIHRoaXMgcmFuZ2UgY2hlY2tpbmcgaXMga2V5LgoqICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGA6IEl0JiMzOTtzIGNhbGxpbmcgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgYW5kIHJlbGV2YW50PyBZZXMsIHRoZSBrZXJuZWwgc3lzY3RsIGluZnJhc3RydWN0dXJlIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgL3Byb2Mvc3lzLy4uLmAgZW50cmllcywgc28gdGhhdCBpcyBhIGJpZyB5ZXMuIEZ1bmN0aW9ucyBsaWtlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZnJvbSB1c2VyIHNwYWNlLiBOb3csIHdoYXQgYWJvdXQgY29uZmlnIHJlcXVpcmVtZW50cz8gYENPTkZJR19TWVNDVExgIGFuZCBgQ09ORklHX1BST0NfU1lTQ1RMYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLgoKSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBga2VybmVsL3RpbWUvamlmZmllcy5jYCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBsaWtlIGAjaWZkZWZgIGJsb2Nrcy4gSSBzYXcgb25lIGF0IGxpbmUgMjA4LCBzbyBJJiMzOTtsbCBnbyBiYWNrIGFuZCBjaGVjayBsaW5lcyAxMzAgdG8gMTgwIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQgYW5kIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBgI2Vsc2UgLy8gQ09ORklHX1NZU0NUTGAgYml0cyBhcmVuJiMzOTt0IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdH1cbiAxMjE6XHRcbiAxMjI6XHRzdGF0aWMgaW50IHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6KGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0cilcbiAxMjM6XHR7XG4gMTI0Olx0XHRyZXR1cm4gcHJvY19pbnRfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgbmVncCwgY2xvY2tfdF90b19qaWZmaWVzKTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX2Nsb2NrX3QoY29uc3QgdWxvbmcgdmFsKVxuIDEyODpcdHtcbiAxMjk6XHRcdHJldHVybiBqaWZmaWVzX3RvX2Nsb2NrX3QodmFsKTtcbiAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X3VzZXJoeihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4gMTMzOlx0e1xuIDEzNDpcdFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9qaWZmaWVzX3RvX2Nsb2NrX3QpO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgdWxvbmcgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMoY29uc3QgdWxvbmcgdmFsKVxuIDEzODpcdHtcbiAxMzk6XHRcdHJldHVybiBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya19pbnRfY29udl9tcyhjb25zdCBib29sICpuZWdwLCBjb25zdCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIpXG4gMTQzOlx0e1xuIDE0NDpcdFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcbiAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVsb25nIHZhbClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRyZXR1cm4gamlmZmllc190b19tc2Vjcyh2YWwpO1xuIDE1MDpcdH1cbiAxNTE6XHRcbiAxNTI6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfaW50X2NvbnZfbXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxuIDE1MzpcdHtcbiAxNTQ6XHRcdHJldHVybiBwcm9jX2ludF9rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBuZWdwLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTU1Olx0fVxuIDE1NjpcdFxuIDE1NzpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAxNTg6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMTU5Olx0e1xuIDE2MDpcdFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4gMTYxOlx0XHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcbiAxNjI6XHR9XG4gMTYzOlx0XG4gMTY0Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAxNjU6XHRcdFx0XHRcdFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAxNjY6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE2NzpcdHtcbiAxNjg6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE2OTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEppZmZpZXMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgYGppZmZpZXNgIGFyZSBoYW5kbGVkIGluIHRoaXMga2VybmVsIHZlcnNpb24sIHBhcnRpY3VsYXJseSBob3cgaXQgcmVsYXRlcyB0byBgQ09ORklHX1NZU0NUTGAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHJpZ2h0IGF3YXkuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyBmaW5kIHRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGFuZCB0aGVuIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IGBqaWZmaWVzYCBpbnRlcmFjdHMgd2l0aCBhbnkgcG90ZW50aWFsIHN5c2N0bCB2YXJpYWJsZXMuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHdvcmsgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NZU0NUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL2ppZmZpZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmM9NzY9dm9pZCBfX2luaXQgcmVnaXN0ZXJfcmVmaW5lZF9qaWZmaWVzKGxvbmcgY3ljbGVzX3Blcl9zZWNvbmQpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTEwMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxMDE6I2lmZGVmIENPTkZJR19TWVNDVExcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xMDItc3RhdGljIHVsb25nIG11bHRfaHooY29uc3QgdWxvbmcgdmFsKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yMDE9c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwNy1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDg6I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwOS1zdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTIxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgYFNZU0NUTGAgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBTWVNDVExgIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgIGZvciBmdXp6aW5nIGFuZCB0aGUgYXBwcm9wcmlhdGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc3ltYm9scy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gSSBzZWU6CgoqICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAKKiAgIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YAoqICAgYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AgKHdoaWNoIGlzIHN0YXRpYywgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbmxpbmluZykKKiAgIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIChhbHNvIHN0YXRpYykKKiAgIGBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4YCAobGlrZXdpc2UsIHN0YXRpYykKCk5leHQsIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGFuZCBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJdCBzZWVtcyB0aGV5IGFyZToKCiogICBgaW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpYAoqICAgYGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpYAoKSSYjMzk7bGwgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFzIGEgcmVsYXRlZCBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggdGhlIHByaW1hcnkgc3lzY3RsIGhhbmRsZXJzIGFyZSB0aG9zZSBmaXJzdCB0d28gYG1pbm1heGAgZnVuY3Rpb25zLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjaywgYXJlIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNgIGFmZmVjdGVkPyBObywganVzdCB0aGUgbWlubWF4IG9uZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAzLCB3aGljaCBzYXlzIHRvIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgYW5kIGFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBwYXRocy4KCkhlcmUsIHRoZSBwYXRjaCBpcyBmaXhpbmcgb3IgZW5hYmxpbmcgcmFuZ2UgY2hlY2tpbmcgKGBrX3B0cl9yYW5nZV9jaGVjayA9IHRydWVgKSB3aXRoaW4gYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4YCwgYW5kIGl0IGFsc28gYWRkcyBhbiBleHBsaWNpdCBjaGVjayBgKnVfcHRyICZndDsgSU5UX01BWGAgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBzeXNjdGwgaGFuZGxlcnMgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0byBnbyBhaGVhZCBhbmQgZGVjbGFyZSBpdCBmdXp6YWJsZSEKClNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlOgoKKiAgIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgCiogICBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAKCkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZToKCiogICBgU1lTQ1RMYAoqICAgYFBST0NfU1lTQ1RMYAoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgZW5vdWdoIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBQUk9DX1NZU0NUTDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7UFJPQ19TWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OywKICAgICYjMzQ7cHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogUFJPQ19TWVNDVEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKktjb25maWcgU2hlbmFuaWdhbnM6IFNZU0NUTC9QUk9DX1NZU0NUTCBWZXJpZmljYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBzaXR1YXRpb24uIEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRoZXJlIGFyZSByZWxldmFudCBzZXR0aW5ncyB0byBlbmFibGUgb3IgY29uZmlndXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBtb2R1bGUgb3IgZmVhdHVyZSB1c2VzIGBTWVNDVExgIG9yIGBQUk9DX1NZU0NUTGAsIG9yIG1heWJlIGJvdGgsIGJlY2F1c2UgdGhhdCBpbXBhY3RzIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBTbywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgYW5kIG1ha2Ugc3VyZSB0aG9zZSBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQuIFRoaXMgaW5pdGlhbCBhdWRpdCB3aWxsIGNsYXJpZnkgdGhlIGdyb3VuZHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DX1NZU0NUTHxjb25maWcgU1lTQ1RMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz02Nz1jb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuLS1cbmZzL3Byb2MvS2NvbmZpZy04Mi1cbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgU1lTQ1RMXG5mcy9wcm9jL0tjb25maWctODQtXHRib29sIFwmIzM0O1N5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xNzEyPWNvbmZpZyBIQVZFX1VJRDE2XG4tLVxuaW5pdC9LY29uZmlnLTE3MTQtXG5pbml0L0tjb25maWc6MTcxNTpjb25maWcgU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRVxuaW5pdC9LY29uZmlnLTE3MTYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE3MTktXG5pbml0L0tjb25maWc6MTcyMDpjb25maWcgU1lTQ1RMX0FSQ0hfVU5BTElHTl9OT19XQVJOXG5pbml0L0tjb25maWctMTcyMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTcyNi1cbmluaXQvS2NvbmZpZzoxNzI3OmNvbmZpZyBTWVNDVExfQVJDSF9VTkFMSUdOX0FMTE9XXG5pbml0L0tjb25maWctMTcyOC1cdGJvb2xcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yNzc1PWNvbmZpZyBSRVNPVVJDRV9LVU5JVF9URVNUXG4tLVxubGliL0tjb25maWcuZGVidWctMjc4Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjI3ODg6Y29uZmlnIFNZU0NUTF9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNzg5LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdCBmb3Igc3lzY3RsXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzYKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmcy9wcm9jL0tjb25maWdgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9wcm9jL0tjb25maWdgIGFuZCBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIGNhbGxlZCBgQ09ORklHX1NZU0NUTGAuICBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgbWVudGFsbHkgZmxhZyB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiBub3cgZWZmaWNpZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlIHRlcm0gJiMzNDtTWVNDVEwmIzM0Oy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXR1cm4gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTQ1RMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4JiMzNDssCiAgICAmIzM0O3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgmIzM0OywKICAgICYjMzQ7cHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeXNjdGwgY29udmVyc2lvbiBoYW5kbGVycyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBwZXJmb3JtIG1pbi9tYXggcmFuZ2UgY2hlY2tzIChlbmFibGluZyBrX3B0cl9yYW5nZV9jaGVjaz10cnVlIGluIHByb2NfaW50X2NvbnYgYW5kIHByb2NfdWxvbmdfY29udikgYW5kIGFkZHMgYW4gSU5UX01BWCB2YWxpZGF0aW9uIGNoZWNrIGluIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTg6MzE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKaW5kZXggMjEzYWUxZDZhMDE0Ny4uNDczNzQzMWZkYjE2ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwpAQCAtMTgxLDEyICYjNDM7MTgxLDE1IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsCiAJCQkJCSAgICAgIGludCAqa19wdHIsIGludCBkaXIsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKIHsKLQlyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSwKJiM0MzsJcmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSwKIAkJCSAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7CiB9CiAKIHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKQogewomIzQzOwlpZiAoKnVfcHRyICZndDsgSU5UX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTsKIH0KIApAQCAtMTk1LDEwICYjNDM7MTk4LDEwIEBAIHN0YXRpYyBpbnQgc3lzY3RsX2sydV91bG9uZ19jb252X21zKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKQogCXJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTsKIH0KIAotc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKLQkJCQkJIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKJiM0MztzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwKJiM0MzsJCQkJCQlpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpCiB7Ci0JcmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSwKJiM0MzsJcmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLAogCQkJICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTsKIH0KIApAQCAtMjI5LDggJiM0MzsyMzIsOCBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLAogCXJldHVybiAtRU5PU1lTOwogfQogCi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLAotCQkJCQkgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKQomIzQzO3N0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLAomIzQzOwkJCQkJCWludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KQEAgLTMzMyw3ICYjNDM7MzM2LDcgQEAgaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwKIAkJCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsCi0JCQkJICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTsKJiM0MzsJCQkJICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7CiB9CiBFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoIHJlcXVlc3QuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGFib3V0IEtNU0FOIGZ1enppbmcgdmVyc3VzIEtBU0FOIG9yIHN0YW5kYXJkIGZ1enppbmcgaXMganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUga2VybmVsIGVuZ2luZWVyaW5nOyBwdXJlbHkgYSB0cmlhZ2UgcXVlc3Rpb24uIENvbXBsZXRlbHkgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgZm9jdXNlZCBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBzZWUgYSBmZXcga2V5IGNoYW5nZXM6CgoxLiAgSW4gYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgLCB0aGUgY2FsbCB0byBgcHJvY19pbnRfY29udmAgaGFzIGEgYGZhbHNlYCBjaGFuZ2VkIHRvIGB0cnVlYCBmb3IgdGhlIGBtaW5tYXhgIGZsYWcuCjIuICBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYCBub3cgaW5jbHVkZXMgYSBjaGVjayBgaWYgKCp1X3B0ciAmZ3Q7IElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFNtYXJ0LCBhIGdvb2QgYm91bmRhcnkgY2hlY2suCjMuICBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBwcm9jX3Vsb25nX2NvbnZgIGNoYW5nZXMgdGhlIGJvb2xlYW4gZmxhZyBmcm9tIGBmYWxzZWAgdG8gYHRydWVgLgo0LiAgRmluYWxseSwgdGhlIGNhbGxiYWNrIG5hbWUgaW4gYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgZ2V0cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZS4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBlc3BlY2lhbGx5IGhvdyB0aGUgYG1pbm1heGAgZmxhZyBpbmZsdWVuY2VzIHRoZWlyIG9wZXJhdGlvbi4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIG15IHVzdWFsIHRvb2xzIHRvIGRpZyBpbnRvIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIGFuZCBvdGhlciByZWxldmFudCBjb2RlIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYWxsIGFib3V0IHZlcmlmeWluZyB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyB0aGF0IGJvb2xlYW4gZmxhZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdGltZS9qaWZmaWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jPTE1Mj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfaW50X2NvbnZfbXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTYtXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTU3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE1OS17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTYxLVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9oeiwgc3lzY3RsX2sydV9pbnRfY29udl9oeik7XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2My1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjQ6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2Ny17XG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTY4Olx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTY5LVx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHosXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNzM6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NC1cdFx0XHRcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc1LXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNzY6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNzctXHRcdFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxua2VybmVsL3RpbWUvamlmZmllcy5jOjE4MDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4MS1cdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODQ6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0xOTY9c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIwMC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDMte1xua2VybmVsL3RpbWUvamlmZmllcy5jOjIwNDpcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDUtXHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDk6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIxMC1cdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIxNC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMTYtXHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyMS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyMy1cdFx0XHRcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIyNy1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTIzNC1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMzU6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjU3PWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2MC1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjItfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yODA9aW50IHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI4NDpcdFx0XHRcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjg1LX1cbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzA2LVx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzA3Olx0XHRcdFx0ICBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMpO1xua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XG4tLVxua2VybmVsL3RpbWUvamlmZmllcy5jPTMxMT1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE0LVx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1Olx0XHRcdFx0ICBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMTYtfVxuLS1cbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0zMzU9aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVx0cmV0dXJuIHByb2NfZG91bG9uZ3ZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMzk6XHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zNDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtaW5tYXhgIEltcGxlbWVudGF0aW9uIFRocm91Z2ggQ29udmVyc2lvbiBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZ3JvdW5kIG15c2VsZiBpbiBob3cgdGhlIHVuZGVybHlpbmcgdHlwZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGVpciBjb252ZXJzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBUaGVzZSBjb252ZXJzaW9ucywgb3IgdGhlaXIgYWJzZW5jZSwgYXJlIHdoZXJlIHRoZSBzdWJ0bGV0aWVzIG9mIHBvdGVudGlhbCBvdmVyZmxvdywgdHlwZSBwcm9tb3Rpb24sIG9yIGV2ZW4gaW1wbGljaXQgY2FzdGluZyBpc3N1ZXMgd2lsbCBsaWtlbHkgcmVzaWRlIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIGludGVnZXIgdHlwZXMgaW4gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZW0gaXMga2V5IHRvIG1ha2luZyBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IG9idmlvdXMsIG9yIHN1YnRsZSwgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfaW50X2NvbnZ8cHJvY191bG9uZ19jb252JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3N5c2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zeXNjdGwuYz01MDY9aW50IHByb2NfaW50X3Uya19jb252X3VvcChjb25zdCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsIGNvbnN0IGJvb2wgKm5lZ3AsXG4tLVxua2VybmVsL3N5c2N0bC5jLTUyMy0vKipcbmtlcm5lbC9zeXNjdGwuYzo1MjQ6ICogcHJvY19pbnRfY29udiAtIENoYW5nZSB1c2VyIG9yIGtlcm5lbCBwb2ludGVyIGJhc2VkIG9uIGRpcmVjdGlvblxua2VybmVsL3N5c2N0bC5jLTUyNS0gKlxuLS1cbmtlcm5lbC9zeXNjdGwuYy01MzktICovXG5rZXJuZWwvc3lzY3RsLmM6NTQwOmludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy01NDEtXHRcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuLS1cbmtlcm5lbC9zeXNjdGwuYz01NzM9c3RhdGljIGludCBzeXNjdGxfa2Vybl90b191c2VyX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbi0tXG5rZXJuZWwvc3lzY3RsLmMtNTc3LVxua2VybmVsL3N5c2N0bC5jOjU3ODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvc3lzY3RsLmMtNTc5LVx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG5rZXJuZWwvc3lzY3RsLmMtNTgwLXtcbmtlcm5lbC9zeXNjdGwuYzo1ODE6XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbmtlcm5lbC9zeXNjdGwuYy01ODItXHRcdFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxuLS1cbmtlcm5lbC9zeXNjdGwuYy01ODYtXG5rZXJuZWwvc3lzY3RsLmM6NTg3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9taW5tYXgoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG5rZXJuZWwvc3lzY3RsLmMtNTg4LVx0XHRcdFx0ICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxua2VybmVsL3N5c2N0bC5jLTU4OS17XG5rZXJuZWwvc3lzY3RsLmM6NTkwOlx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbmtlcm5lbC9zeXNjdGwuYy01OTEtXHRcdFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxuLS1cbmtlcm5lbC9zeXNjdGwuYz04MjA9aW50IHByb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtODIzLVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxua2VybmVsL3N5c2N0bC5jOjgyNDpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnYgfSk7XG5rZXJuZWwvc3lzY3RsLmMtODI1LX1cbi0tXG5rZXJuZWwvc3lzY3RsLmM9ODY0PWludCBwcm9jX2RvaW50dmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcbi0tXG5rZXJuZWwvc3lzY3RsLmMtODY3LVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxua2VybmVsL3N5c2N0bC5jOjg2ODpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4IH0pO1xua2VybmVsL3N5c2N0bC5jLTg2OS19XG4tLVxua2VybmVsL3N5c2N0bC5jPTk0Nj1FWFBPUlRfU1lNQk9MX0dQTChwcm9jX2RvdTh2ZWNfbWlubWF4KTtcbi0tXG5rZXJuZWwvc3lzY3RsLmMtOTQ4LS8qKlxua2VybmVsL3N5c2N0bC5jOjk0OTogKiBwcm9jX3Vsb25nX2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cbmtlcm5lbC9zeXNjdGwuYy05NTAtICpcbi0tXG5rZXJuZWwvc3lzY3RsLmMtOTYzLSAqL1xua2VybmVsL3N5c2N0bC5jOjk2NDppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxua2VybmVsL3N5c2N0bC5jLTk2NS1cdFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbi0tXG5rZXJuZWwvc3lzY3RsLmM9MTAzNj1zdGF0aWMgaW50IHByb2NfdWxvbmdfazJ1X2NvbnYodWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4tLVxua2VybmVsL3N5c2N0bC5jLTEwNDAtXG5rZXJuZWwvc3lzY3RsLmM6MTA0MTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcbmtlcm5lbC9zeXNjdGwuYy0xMDQyLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbmtlcm5lbC9zeXNjdGwuYy0xMDQzLXtcbmtlcm5lbC9zeXNjdGwuYzoxMDQ0Olx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxua2VybmVsL3N5c2N0bC5jLTEwNDUtXHRcdFx0ICAgICAgIHByb2NfdWxvbmdfdTJrX2NvbnYsIHByb2NfdWxvbmdfazJ1X2NvbnYpO1xuLS1cbmtlcm5lbC9zeXNjdGwuYz0xMDg5PWludCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMDkyLVx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfVUxPTkcsXG5rZXJuZWwvc3lzY3RsLmM6MTA5MzpcdFx0XHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC51bG9uZ19jb252ID0gZG9fcHJvY191bG9uZ19jb252IH0pO1xua2VybmVsL3N5c2N0bC5jLTEwOTQtfVxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMTAyLSAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXG5rZXJuZWwvc3lzY3RsLmM6MTEwMzogKiBAY29udjogQ3VzdG9tIGNvbnZlcnRlciBjYWxsIGJhY2suIERlZmF1bHRzIHRvIGRvX3Byb2NfaW50X2NvbnZcbmtlcm5lbC9zeXNjdGwuYy0xMTA0LSAqXG4tLVxua2VybmVsL3N5c2N0bC5jPTExMTA9aW50IHByb2NfZG9pbnR2ZWNfY29udihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxuLS1cbmtlcm5lbC9zeXNjdGwuYy0xMTE1LVx0aWYgKCFjb252KVxua2VybmVsL3N5c2N0bC5jOjExMTY6XHRcdGNvbnYgPSBkb19wcm9jX2ludF9jb252O1xua2VybmVsL3N5c2N0bC5jLTExMTctXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipEaWdnaW5nIGludG8gSmlmZmllcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgamlmZmllc2AgYXJlIGhhbmRsZWQuIEkgdGhpbmsgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gcmVhbGx5IGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIGFuZCBmb2N1c2luZyBvbiB0aGUgYXJlYXMgYXJvdW5kIGxpbmVzIDE1MC0yNTAgYW5kIHRoZW4gYWdhaW4gYXJvdW5kIDMwMC0zNTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCBjaHVuayBvZiB0aGUgY29yZSBsb2dpYyB0byBhbmFseXplLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgaW5jcmVtZW50aW5nIGhhcHBlbnMsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGFuZCBob3cgaXQgYWxsIHRpZXMgaW50byB0aGUgYnJvYWRlciB0aW1la2VlcGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc2VjdGlvbnMgYmVjYXVzZSB0aGV5JiMzOTtyZSBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IHJhY2UgY29uZGl0aW9ucyBhbmQgb3ZlcmZsb3cgaXNzdWVzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvamlmZmllcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR9XG4gMTUxOlx0XG4gMTUyOlx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X21zKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgY29uc3QgaW50ICprX3B0cilcbiAxNTM6XHR7XG4gMTU0Olx0XHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xuIDE1NTpcdH1cbiAxNTY6XHRcbiAxNTc6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTU4Olx0XHRcdFx0XHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE1OTpcdHtcbiAxNjA6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE2MTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9oeiwgc3lzY3RsX2sydV9pbnRfY29udl9oeik7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTY1Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTY2Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxNjc6XHR7XG4gMTY4Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbiAxNjk6XHRcdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxuIDE3MDpcdFx0XHRcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gMTc0Olx0XHRcdFx0XHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDE3NTpcdHtcbiAxNzY6XHRcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuIDE3NzpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMTgxOlx0XHRcdFx0XHRcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMTgyOlx0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAxODM6XHR7XG4gMTg0Olx0XHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIDE4NTpcdFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gMTg2Olx0fVxuIDE4NzpcdFxuIDE4ODpcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIDE4OTpcdHtcbiAxOTA6XHRcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4gMTkxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE5MjpcdFxuIDE5MzpcdFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIDE5NDpcdH1cbiAxOTU6XHRcbiAxOTY6XHRzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiAxOTc6XHR7XG4gMTk4Olx0XHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gMTk5Olx0fVxuIDIwMDpcdFxuIDIwMTpcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuIDIwMjpcdFx0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gMjA1Olx0XHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiAyMDY6XHR9XG4gMjA3Olx0XG4gMjA4Olx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxuIDIwOTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcbiAyMTA6XHRcdFx0XHRcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjExOlx0e1xuIDIxMjpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjEzOlx0fVxuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gMjE2Olx0XHRcdFx0XHRcdCAgIGludCAqa19wdHIsIGludCBkaXIsXG4gMjE3Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMTg6XHR7XG4gMjE5Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxuIDIyMzpcdFx0XHRcdFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gLUVOT1NZUztcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiAyMjk6XHRcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiAyMzA6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIDIzMTpcdHtcbiAyMzI6XHRcdHJldHVybiAtRU5PU1lTO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbiAyMzY6XHRcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4gMjM3Olx0e1xuIDIzODpcdFx0cmV0dXJuIC1FTk9TWVM7XG4gMjM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIEtlcm5lbCBTeXN0ZW0gQ29udHJvbCoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBjb250cm9sIChzeXNjdGwpIGludGVyZmFjZSBoYW5kbGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgY29udmVyc2lvbnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9zeXNjdGwuY2AgZmlsZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGVzZSB2YWx1ZXMgYW5kIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24sIGFzIHRoZXNlIGFyZSBmb3VuZGF0aW9uYWwgd2hlbiBkZWFsaW5nIHdpdGggc3lzY3RscyB0aGF0IGludGVyZmFjZSB0byB0aGUgdW5kZXJseWluZyB2YWx1ZXMuIFRoaXMmIzM5O2xsIHByb2JhYmx5IGludm9sdmUgZXhhbWluaW5nIGhvdyB0aGV5IGhhbmRsZSBsaW1pdHMsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB0eXBlIGNvbnZlcnNpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaGFuZGxlIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgZm9ybWF0cy4gSSYjMzk7bSBrZWVuIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlci1zdXBwbGllZCB2YWx1ZXMgdHJhbnNsYXRlIGludG8ga2VybmVsLXVzYWJsZSB2YWx1ZXMsIGFuZCB2aWNlIHZlcnNhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zeXNjdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuIDU0MTpcdFx0XHQgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcbiA1NDI6XHRcdFx0ICBpbnQgKCp1c2VyX3RvX2tlcm4pKGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciksXG4gNTQzOlx0XHRcdCAgaW50ICgqa2Vybl90b191c2VyKShib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpKVxuIDU0NDpcdHtcbiA1NDU6XHRcdGlmIChTWVNDVExfS0VSTl9UT19VU0VSKGRpcikpXG4gNTQ2Olx0XHRcdHJldHVybiBrZXJuX3RvX3VzZXIobmVncCwgdV9wdHIsIGtfcHRyKTtcbiA1NDc6XHRcbiA1NDg6XHRcdGlmIChrX3B0cl9yYW5nZV9jaGVjaykge1xuIDU0OTpcdFx0XHRpbnQgdG1wX2ssIHJldDtcbiA1NTA6XHRcbiA1NTE6XHRcdFx0aWYgKCF0YmwpXG4gNTUyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUzOlx0XHRcdHJldCA9IHVzZXJfdG9fa2VybihuZWdwLCB1X3B0ciwgXHUwMDI2dG1wX2spO1xuIDU1NDpcdFx0XHRpZiAocmV0KVxuIDU1NTpcdFx0XHRcdHJldHVybiByZXQ7XG4gNTU2Olx0XHRcdGlmICgodGJsLVx1MDAzZWV4dHJhMSBcdTAwMjZcdTAwMjYgKihpbnQgKil0YmwtXHUwMDNlZXh0cmExIFx1MDAzZSB0bXBfaykgfHxcbiA1NTc6XHRcdFx0ICAgICh0YmwtXHUwMDNlZXh0cmEyIFx1MDAyNlx1MDAyNiAqKGludCAqKXRibC1cdTAwM2VleHRyYTIgXHUwMDNjIHRtcF9rKSlcbiA1NTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTk6XHRcdFx0V1JJVEVfT05DRSgqa19wdHIsIHRtcF9rKTtcbiA1NjA6XHRcdH0gZWxzZVxuIDU2MTpcdFx0XHRyZXR1cm4gdXNlcl90b19rZXJuKG5lZ3AsIHVfcHRyLCBrX3B0cik7XG4gNTYyOlx0XHRyZXR1cm4gMDtcbiA1NjM6XHR9XG4gNTY0Olx0XG4gNTY1Olx0XG4gNTY2Olx0XG4gNTY3Olx0c3RhdGljIGludCBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252KGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0cixcbiA1Njg6XHRcdFx0XHRcdFx0aW50ICprX3B0cilcbiA1Njk6XHR7XG4gNTcwOlx0XHRyZXR1cm4gcHJvY19pbnRfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgbmVncCwgTlVMTCk7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdHN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXG4gNTc0Olx0e1xuIDU3NTpcdFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xuIDU3NjpcdH1cbiA1Nzc6XHRcbiA1Nzg6XHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXG4gNTc5Olx0XHRcdFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBhIEtleSBDb252ZXJzaW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgZGVlcGVyIGludG8gdGhpcyBhbmQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGZvciBhIG1vbWVudCBhbmQgdGFrZSBhIGxvb2sgYXQgYHByb2NfdWxvbmdfY29udmAgd2l0aGluIGBrZXJuZWwvc3lzY3RsLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdW5zaWduZWQgbG9uZyB2YWx1ZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbCBpbnRlcmZhY2UsIGFuZCBJIHN1c3BlY3QgaXQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gaG93IHdlJiMzOTtyZSBzZWVpbmcgdGhlIGJlaGF2aW9yIHdlJiMzOTtyZSBzZWVpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGNvbnZlcnRzIGFuZCB2YWxpZGF0ZXMgdGhlc2UgdmFsdWVzLCB3aGljaCBjb3VsZCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgYXJlIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3N5c2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjQ6XHRpbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxuIDk2NTpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxuIDk2NjpcdFx0XHQgICAgaW50ICgqdXNlcl90b19rZXJuKShjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciksXG4gOTY3Olx0XHRcdCAgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKSlcbiA5Njg6XHR7XG4gOTY5Olx0XHRpZiAoU1lTQ1RMX0tFUk5fVE9fVVNFUihkaXIpKVxuIDk3MDpcdFx0XHRyZXR1cm4ga2Vybl90b191c2VyKHVfcHRyLCBrX3B0cik7XG4gOTcxOlx0XG4gOTcyOlx0XHRpZiAoa19wdHJfcmFuZ2VfY2hlY2spIHtcbiA5NzM6XHRcdFx0dWxvbmcgdG1wX2s7XG4gOTc0Olx0XHRcdGludCByZXQ7XG4gOTc1Olx0XG4gOTc2Olx0XHRcdGlmICghdGJsKVxuIDk3NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk3ODpcdFx0XHRyZXQgPSB1c2VyX3RvX2tlcm4odV9wdHIsIFx1MDAyNnRtcF9rKTtcbiA5Nzk6XHRcdFx0aWYgKHJldClcbiA5ODA6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDk4MTpcdFx0XHRpZiAoKHRibC1cdTAwM2VleHRyYTEgXHUwMDI2XHUwMDI2ICoodWxvbmcgKil0YmwtXHUwMDNlZXh0cmExIFx1MDAzZSB0bXBfaykgfHxcbiA5ODI6XHRcdFx0ICAgICh0YmwtXHUwMDNlZXh0cmEyIFx1MDAyNlx1MDAyNiAqKHVsb25nICopdGJsLVx1MDAzZWV4dHJhMiBcdTAwM2MgdG1wX2spKVxuIDk4MzpcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDk4NDpcdFx0XHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xuIDk4NTpcdFx0fSBlbHNlXG4gOTg2Olx0XHRcdHJldHVybiB1c2VyX3RvX2tlcm4odV9wdHIsIGtfcHRyKTtcbiA5ODc6XHRcdHJldHVybiAwO1xuIDk4ODpcdH1cbiA5ODk6XHRcbiA5OTA6XHQvKipcbiA5OTE6XHQgKiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCAtIEFzc2lnbiB1c2VyIHZhbHVlIHRvIGEga2VybmVsIHBvaW50ZXJcbiA5OTI6XHQgKlxuIDk5MzpcdCAqIEB1X3B0cjogcG9pbnRlciB0byB1c2VyIHNwYWNlIHZhcmlhYmxlXG4gOTk0Olx0ICogQGtfcHRyOiBwb2ludGVyIHRvIGtlcm5lbCB2YXJpYWJsZVxuIDk5NTpcdCAqIEB1X3B0cl9vcDogZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhc3NpZ25pbmcgdG8ga19wdHJcbiA5OTY6XHQgKlxuIDk5NzpcdCAqIFVzZXMgV1JJVEVfT05DRSB0byBhc3NpZ24gdmFsdWUgdG8ga19wdHIuIEV4ZWN1dGVzIHVfcHRyX29wIGlmXG4gOTk4Olx0ICogbm90IE5VTEwuXG4gOTk5Olx0ICpcbjEwMDA6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MuXG4xMDAxOlx0ICovXG4xMDAyOlx0aW50IHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuMTAwMzpcdFx0XHRcdCAgICB1bG9uZyAoKnVfcHRyX29wKShjb25zdCB1bG9uZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjc3CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBmaXhpbmcgbWluL21heCBjaGVja3Mgd2l0aGluIHRoZSBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIHN5c2N0bCBoYW5kbGVycy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGF0IGJvdW5kcyBhcmUgYXBwcm9wcmlhdGVseSBlbmZvcmNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24gb2YgdXNlci1wcm92aWRlZCB2YWx1ZXMgdG8ga2VybmVsIHZhbHVlcywgYW5kIGl0JiMzOTtzIGFkZGluZyBhbiBvdmVyZmxvdyBjaGVjay4KCkZpcnN0LCBJIGxvb2tlZCBpbnRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSBzZWUgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJvb2xlYW4gcGFyYW1ldGVyIG9mIGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAsIGFuZCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrIGluIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgLiBNeSBxdWljayByZXZpZXcgb2YgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YCB0aGVtc2VsdmVzIHNob3cgdGhhdCB0aGV5IHVzZSB0ZW1wb3JhcnkgdmFyaWFibGVzIChgdG1wX2tgKSAqYmVmb3JlKiBhbnkgYm91bmRzIGNoZWNrcyBvciBhc3NpZ25tZW50cywgYW5kIHRoYXQgdGhlc2UgYXJlIHBvcHVsYXRlZCBieSBgdXNlcl90b19rZXJuKClgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkLCBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFBhZGRpbmcsIHN0cnVjdHMsIGFuZCBkeW5hbWljIGJ1ZmZlciBzaXplcyBhcmUgYWxsIHVudG91Y2hlZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgbGVha3MuCgpOZXh0LCBJIGNvbnNpZGVyZWQgd2hldGhlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIG5lY2Vzc2FyeSBoZXJlLCBhbmQgY29tcGFyZWQgaXQgdG8gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikuIEtNU0FOIGlzIGNvbmNlcm5lZCB3aXRoIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvIGxlYWtzLCB3aGVyZWFzIEtBU0FOIGNvdmVycyB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBHaXZlbiB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gYm91bmRzIGNoZWNraW5nIGFuZCB2YWx1ZSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgc3lzY3RsIGhhbmRsZXJzLCBhbmQgdGhlIGFic2VuY2Ugb2YgYW55IGludHJvZHVjZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGFkZHJlc3NpbmcgaW50ZWdlciBhbmQgdWxvbmcgY29udmVyc2lvbiBib3VuZHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpIZXJlJiMzOTtzIG15IGNsZWFyIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgZW5hYmxpbmcgbW9yZSByb2J1c3QgbWluL21heCByYW5nZSBjaGVja3MsIGFuZCBpdCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrLiBNZW1vcnkgc2FmZXR5IGlzIGFzc3VyZWQgYmVjYXVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyB3cml0dGVuIHRvICpiZWZvcmUqIGJlaW5nIHVzZWQgb3IgY29tcGFyZWQsIGFuZCB0aGVyZSYjMzk7cyBubyBuZXcgYWxsb2NhdGlvbiBvciBjb3B5aW5nIG9mIGtlcm5lbCBtZW1vcnkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCByZWFkIG9yIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIFNpbmNlIHRoZSBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiBib3VuZHMgY2hlY2tpbmcgYW5kIHZhbHVlIHZhbGlkYXRpb24sIHN0YW5kYXJkIEtBU0FOIHRlc3Rpbmcgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBhc3BlY3RzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGludHJvZHVjZSBib3VuZHMvcmFuZ2UgdmFsaWRhdGlvbiBmb3Igc3lzY3RsIHNjYWxhciBpbnRlZ2VyIHZhbHVlcy4gTm8gaGVhcCBvciBzdGFjayBidWZmZXJzLCBzdHJ1Y3QgcGFkZGluZ3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBhbGxvY2F0ZWQsIG1vZGlmaWVkLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbGwgdmFyaWFibGVzIHVzZWQgaW4gY29udmVyc2lvbiAoZS5nLiB0ZW1wb3JhcnkgaW50ZWdlcnMpIGFyZSB3cml0dGVuIGJlZm9yZSBiZWluZyBldmFsdWF0ZWQgb3IgYXNzaWduZWQuIENvbnNlcXVlbnRseSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeXNjdGwgY29udmVyc2lvbiBoYW5kbGVycyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBwZXJmb3JtIG1pbi9tYXggcmFuZ2UgY2hlY2tzIChlbmFibGluZyBrX3B0cl9yYW5nZV9jaGVjaz10cnVlIGluIHByb2NfaW50X2NvbnYgYW5kIHByb2NfdWxvbmdfY29udikgYW5kIGFkZHMgYW4gSU5UX01BWCB2YWxpZGF0aW9uIGNoZWNrIGluIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTowMy40NDc4OTIxNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjgwOTE0NTA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjQ0Nzg5ODI5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NTA2NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZmNDgwNjkzZDRiYjQ0N2NhNjdkNmViYjI5MTFiYjYxYWRhM2IzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xcbmluZGV4IDIxM2FlMWQ2YTAxNDcuLjQ3Mzc0MzFmZGIxNmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXFxuKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jXFxuQEAgLTE4MSwxMiArMTgxLDE1IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4ge1xcbi1cXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG4rXFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG4gXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X21zLCBzeXNjdGxfazJ1X2ludF9jb252X21zKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMoY29uc3QgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIpXFxuIHtcXG4rXFx0aWYgKCp1X3B0ciBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xcbiB9XFxuIFxcbkBAIC0xOTUsMTAgKzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4gXFx0cmV0dXJuIHByb2NfdWxvbmdfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiB7XFxuLVxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuK1xcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gfVxcbiBcXG5AQCAtMjI5LDggKzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIFxcdHJldHVybiAtRU5PU1lTO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiB7XFxuIFxcdHJldHVybiAtRU5PU1lTO1xcbiB9XFxuQEAgLTMzMyw3ICszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuLVxcdFxcdFxcdFxcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyk7XFxuK1xcdFxcdFxcdFxcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjk5MzE2MTI3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkzMTA2NzAyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCIsXG4gICAgXCJwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmZjQ4MDY5M2Q0YmI0NDdjYTY3ZDZlYmIyOTExYmI2MWFkYTNiM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE4OjMxOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5pbmRleCAyMTNhZTFkNmEwMTQ3Li40NzM3NDMxZmRiMTZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jXG4rKysgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmNcbkBAIC0xODEsMTIgKzE4MSwxNSBAQCBzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxuIFx0XHRcdFx0XHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuLVx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4rXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxuIFx0XHRcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX3Uya191bG9uZ19jb252X21zKGNvbnN0IHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyKVxuIHtcbitcdGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0cmV0dXJuIHByb2NfdWxvbmdfdTJrX2NvbnZfdW9wKHVfcHRyLCBrX3B0ciwgc3lzY3RsX21zZWNzX3RvX2ppZmZpZXMpO1xuIH1cbiBcbkBAIC0xOTUsMTAgKzE5OCwxMCBAQCBzdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcbiBcdHJldHVybiBwcm9jX3Vsb25nX2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbitcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuLVx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcbitcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgICAgc3lzY3RsX3Uya191bG9uZ19jb252X21zLCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXMpO1xuIH1cbiBcbkBAIC0yMjksOCArMjMyLDggQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdHJldHVybiAtRU5PU1lTO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuLVx0XHRcdFx0XHQgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuK3N0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxuK1x0XHRcdFx0XHRcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbiB7XG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG5AQCAtMzMzLDcgKzMzNiw3IEBAIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXG4gXHRcdFx0XHQgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXG4tXHRcdFx0XHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMpO1xuK1x0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjAzLjk5MzE2MzA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NTkwMjI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB2ZXJ5IHByYWN0aWNhbCBhcHByb2FjaC4gTGV0J3MgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJ3MgcXVpY2tlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGluIHRoaXMgZW52aXJvbm1lbnQuIEkgd2FudCB0byBzZWUgdGhlICplbnRpcmUqIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqaW4qIHRoYXQgZmlsZS4gUHJpbWFyaWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2N0bCBvciBwcm9jIGZ1bmN0aW9ucywgaWYgYW55LCBhcmUgZGVmaW5lZCBhbmQsIGNydWNpYWxseSwgKmhvdyogdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGppZmZpZXMgY29udGV4dC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiB0aGUgd2F5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW1wbG95ZWQ/IFRoaXMgaW5pdGlhbCBzd2VlcCB3aWxsIGdpdmUgbWUgdGhlIGZvdW5kYXRpb25hbCBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IHByb3Bvc2VkIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInNoYXBlXCIgb2YgdGhlIGNvZGUgYW5kIHdoZXJlIHRoZSBzZW5zaXRpdmUgb3IgY3JpdGljYWwgYXJlYXMgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjA3Ljk1MjE4ODYzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcdFxcdFxcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE3NzpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxuIDE4NTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcXG4gMTg5OlxcdHtcXG4gMTkwOlxcdFxcdGlmICgqdV9wdHIgXFx1MDAzZSBJTlRfTUFYKVxcbiAxOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XFxuIDE5OTpcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gMjA2OlxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbiAyMDk6XFx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbiAyMTA6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAyMTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjE4OlxcdHtcXG4gMjE5OlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIDIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzMzpcXHR9XFxuIDIzNDpcXHRcXG4gMjM1OlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzc6XFx0e1xcbiAyMzg6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzOTpcXHR9XFxuIDI0MDpcXHQjZW5kaWZcXG4gMjQxOlxcdFxcbiAyNDI6XFx0LyoqXFxuIDI0MzpcXHQgKiBwcm9jX2RvaW50dmVjX2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIHNlY29uZHNcXG4gMjQ0OlxcdCAqIEB0YWJsZTogdGhlIHN5c2N0bCB0YWJsZVxcbiAyNDU6XFx0ICogQGRpcjogJVRSVUUgaWYgdGhpcyBpcyBhIHdyaXRlIHRvIHRoZSBzeXNjdGwgZmlsZVxcbiAyNDY6XFx0ICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyXFxuIDI0NzpcXHQgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyXFxuIDI0ODpcXHQgKiBAcHBvczogZmlsZSBwb3NpdGlvblxcbiAyNDk6XFx0ICpcXG4gMjUwOlxcdCAqIFJlYWRzL3dyaXRlcyB1cCB0byB0YWJsZS1cXHUwMDNlbWF4bGVuL3NpemVvZih1bnNpZ25lZCBpbnQpIGludGVnZXJcXG4gMjUxOlxcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuXFxuIDI1MjpcXHQgKiBUaGUgdmFsdWVzIHJlYWQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc2Vjb25kcywgYW5kIGFyZSBjb252ZXJ0ZWQgaW50b1xcbiAyNTM6XFx0ICogamlmZmllcy5cXG4gMjU0OlxcdCAqXFxuIDI1NTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMjU2OlxcdCAqL1xcbiAyNTc6XFx0aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMjU4OlxcdFxcdFxcdFxcdCAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4gMjU5OlxcdHtcXG4gMjYwOlxcdFxcdHJldHVybiBwcm9jX2RvaW50dmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0ICBkb19wcm9jX2ludF9jb252X2ppZmZpZXMpO1xcbiAyNjI6XFx0fVxcbiAyNjM6XFx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX2ppZmZpZXMpO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHQvKipcXG4gMjY2OlxcdCAqIHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIDEvVVNFUl9IWiBzZWNvbmRzXFxuIDI2NzpcXHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcXG4gMjY4OlxcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcXG4gMjY5OlxcdCAqIEBidWZmZXI6IHRoZSB1c2VyIGJ1ZmZlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTowNy45NTIyNzg2MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMxNTI4MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBrZXJuZWwvdGltZS9qaWZmaWVzLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGppZmZpZXMgY291bnRlciBpcyBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZCwgYXMgaXQncyBmdW5kYW1lbnRhbCB0byB0aW1pbmcgYW5kIHNjaGVkdWxpbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGFueSBhdG9taWMgb3BlcmF0aW9ucyB1c2VkIGZvciB1cGRhdGVzLCBhbmQgaG93IHRoZSB0aW1lciBpbnRlcnJ1cHRzIGludGVyYWN0IHdpdGggdGhpcyBnbG9iYWwgY291bnRlci4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciB3cmFwLWFyb3VuZCBpc3N1ZXMgYW5kIGhvdyB0aG9zZSBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgNjQtYml0IGppZmZpZXMgb24gbW9kZXJuIHN5c3RlbXMuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBJJ20gcnVubmluZyBvbi4gSXQncyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZC1zYWZldHksIGFzIG51bWVyb3VzIHBhcnRzIG9mIHRoZSBrZXJuZWwgcmVseSBvbiBqaWZmaWVzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IGdldCBvciBzZXQgamlmZmllcywgYW5kIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIG92ZXJhbGwga2VybmVsIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBoaWdoLWZyZXF1ZW5jeSBldmVudCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MTAuMjgzODA5MzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxcbiAyNzE6XFx0ICogQHBwb3M6IHBvaW50ZXIgdG8gdGhlIGZpbGUgcG9zaXRpb25cXG4gMjcyOlxcdCAqXFxuIDI3MzpcXHQgKiBSZWFkcy93cml0ZXMgdXAgdG8gdGFibGUtXFx1MDAzZW1heGxlbi9zaXplb2YodW5zaWduZWQgaW50KSBpbnRlZ2VyXFxuIDI3NDpcXHQgKiB2YWx1ZXMgZnJvbS90byB0aGUgdXNlciBidWZmZXIsIHRyZWF0ZWQgYXMgYW4gQVNDSUkgc3RyaW5nLlxcbiAyNzU6XFx0ICogVGhlIHZhbHVlcyByZWFkIGFyZSBhc3N1bWVkIHRvIGJlIGluIDEvVVNFUl9IWiBzZWNvbmRzLCBhbmRcXG4gMjc2OlxcdCAqIGFyZSBjb252ZXJ0ZWQgaW50byBqaWZmaWVzLlxcbiAyNzc6XFx0ICpcXG4gMjc4OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbiAyNzk6XFx0ICovXFxuIDI4MDpcXHRpbnQgcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMjgxOlxcdFxcdFxcdFxcdFxcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiAyODI6XFx0e1xcbiAyODM6XFx0XFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxuIDI4NDpcXHRcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMpO1xcbiAyODU6XFx0fVxcbiAyODY6XFx0RVhQT1JUX1NZTUJPTChwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0LyoqXFxuIDI4OTpcXHQgKiBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMgLSByZWFkIGEgdmVjdG9yIG9mIGludGVnZXJzIGFzIDEgbWlsbGlzZWNvbmRzXFxuIDI5MDpcXHQgKiBAdGFibGU6IHRoZSBzeXNjdGwgdGFibGVcXG4gMjkxOlxcdCAqIEBkaXI6ICVUUlVFIGlmIHRoaXMgaXMgYSB3cml0ZSB0byB0aGUgc3lzY3RsIGZpbGVcXG4gMjkyOlxcdCAqIEBidWZmZXI6IHRoZSB1c2VyIGJ1ZmZlclxcbiAyOTM6XFx0ICogQGxlbnA6IHRoZSBzaXplIG9mIHRoZSB1c2VyIGJ1ZmZlclxcbiAyOTQ6XFx0ICogQHBwb3M6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlXFxuIDI5NTpcXHQgKlxcbiAyOTY6XFx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVxcdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlclxcbiAyOTc6XFx0ICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy5cXG4gMjk4OlxcdCAqIFRoZSB2YWx1ZXMgcmVhZCBhcmUgYXNzdW1lZCB0byBiZSBpbiAxLzEwMDAgc2Vjb25kcywgYW5kXFxuIDI5OTpcXHQgKiBhcmUgY29udmVydGVkIGludG8gamlmZmllcy5cXG4gMzAwOlxcdCAqXFxuIDMwMTpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMzAyOlxcdCAqL1xcbiAzMDM6XFx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbiAzMDQ6XFx0XFx0XFx0c2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMwNTpcXHR7XFxuIDMwNjpcXHRcXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gMzA3OlxcdFxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKTtcXG4gMzA4OlxcdH1cXG4gMzA5OlxcdEVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19tc19qaWZmaWVzKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuIDMxMjpcXHRcXHRcXHRcXHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMxMzpcXHR7XFxuIDMxNDpcXHRcXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxuIDMxNjpcXHR9XFxuIDMxNzpcXHRcXG4gMzE4OlxcdC8qKlxcbiAzMTk6XFx0ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4IC0gcmVhZCBhIHZlY3RvciBvZiBtaWxsaXNlY29uZCB2YWx1ZXMgd2l0aCBtaW4vbWF4IHZhbHVlc1xcbiAzMjA6XFx0ICogQHRhYmxlOiB0aGUgc3lzY3RsIHRhYmxlXFxuIDMyMTpcXHQgKiBAZGlyOiAlVFJVRSBpZiB0aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHN5c2N0bCBmaWxlXFxuIDMyMjpcXHQgKiBAYnVmZmVyOiB0aGUgdXNlciBidWZmZXJcXG4gMzIzOlxcdCAqIEBsZW5wOiB0aGUgc2l6ZSBvZiB0aGUgdXNlciBidWZmZXJcXG4gMzI0OlxcdCAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXFxuIDMyNTpcXHQgKlxcbiAzMjY6XFx0ICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLVxcdTAwM2VtYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHVuc2lnbmVkIGxvbmdcXG4gMzI3OlxcdCAqIHZhbHVlcyBmcm9tL3RvIHRoZSB1c2VyIGJ1ZmZlciwgdHJlYXRlZCBhcyBhbiBBU0NJSSBzdHJpbmcuIFRoZSB2YWx1ZXNcXG4gMzI4OlxcdCAqIGFyZSB0cmVhdGVkIGFzIG1pbGxpc2Vjb25kcywgYW5kIGNvbnZlcnRlZCB0byBqaWZmaWVzIHdoZW4gdGhleSBhcmUgc3RvcmVkLlxcbiAzMjk6XFx0ICpcXG4gMzMwOlxcdCAqIFRoaXMgcm91dGluZSB3aWxsIGVuc3VyZSB0aGUgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieVxcbiAzMzE6XFx0ICogdGFibGUtXFx1MDAzZWV4dHJhMSAobWluKSBhbmQgdGFibGUtXFx1MDAzZWV4dHJhMiAobWF4KS5cXG4gMzMyOlxcdCAqXFxuIDMzMzpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cXG4gMzM0OlxcdCAqL1xcbiAzMzU6XFx0aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4gMzM2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxcbiAzMzk6XFx0XFx0XFx0XFx0XFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7XFxuIDM0MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MTAuMjgzOTI5MjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjYxMTcyOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgaW52ZXN0aWdhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBKaWZmaWVzIGFuZCBUaW1lcnMqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IHdoZXJlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYXJlIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZWlyIGludGVuZGVkIGZ1bmN0aW9ucyBhcmUuIEFyZSB0aGV5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZHJpdmVycz8gQXJlIHRoZXkgcGFydCBvZiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zPyBBcmUgdGhleSB1c2VkIGluIGFueSBzcGVjaWZpYyBtb25pdG9yaW5nIHRvb2xzIG9yIHBlcmZvcm1hbmNlIHR1bmluZ3M/XG5cbkknbSB0aGlua2luZyB0aGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgaGFuZGxlIHRoZSBjcmVhdGlvbiBvZiBwcm9jZnMgZW50cmllcyB0byBleHBvc2UgYW5kIG1vZGlmeSBpbnRlcm5hbCBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGltaW5nLCBvciB0aW1lIGludGVydmFscywgb3IgcGVyaGFwcyBldmVuIHJlbGF0ZWQgdG8gYGppZmZpZXNgIGluIHNvbWUgd2F5LCBwcm9iYWJseSB1c2VkIGZvciByZWFkaW5nIGFuZCB1cGRhdGluZyBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGRlYWxpbmcgd2l0aCBcIm1pbGxpc2Vjb25kc1wiIChgbXNgKSBhbmQgXCJqaWZmaWVzLFwiIHdoaWNoLCBvZiBjb3Vyc2UsIGFyZSBib3RoIHRpbWluZyByZWxhdGVkLCB3aXRoIGEgbWluL21heCByZXN0cmljdGlvbjsgcHJvYmFibHkgZm9yIGEgc2V0dGluZyB0aGF0IGlzIGJlc3QgZXhwcmVzc2VkIGFzIGEgcmFuZ2UuXG5cbk15IGltbWVkaWF0ZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGJlaGluZCB0aGVpciBleGlzdGVuY2UuIFRoZW4gSSBjYW4gYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhpbmdzIGxpa2Ugc3lzdGVtIHBlcmZvcm1hbmNlLCB0aW1lciBhY2N1cmFjeSwgb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoZSBzZXR0aW5ncyB0aGV5IG1hbmFnZSBhcmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjEzLjk0NTEwNDYxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc5MjYxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXh8cHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zNjE9cGFycG9ydF9kZXZpY2Vfc3lzY3RsX3RlbXBsYXRlID0ge1xcbi0tXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jLTM2OC1cXHRcXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmM6MzY5OlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCxcXG5kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMtMzcwLVxcdFxcdFxcdC5leHRyYTFcXHRcXHQ9ICh2b2lkKikgXFx1MDAyNnBhcnBvcnRfbWluX3RpbWVzbGljZV92YWx1ZSxcXG4tLVxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYz0zOTE9cGFycG9ydF9kZWZhdWx0X3N5c2N0bF90YWJsZSA9IHtcXG4tLVxcbmRyaXZlcnMvcGFycG9ydC9wcm9jZnMuYy0zOTgtXFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jOjM5OTpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxuZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jLTQwMC1cXHRcXHRcXHQuZXh0cmExXFx0XFx0PSAodm9pZCopIFxcdTAwMjZwYXJwb3J0X21pbl90aW1lc2xpY2VfdmFsdWUsXFxuLS1cXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmM9MTE0Mz1zdGF0aWMgaW50IHN5c2N0bF9jaGVja190YWJsZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTExNjAtXFx0XFx0ICAgIChlbnRyeS1cXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19taW5tYXgpIHx8XFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jOjExNjE6XFx0XFx0ICAgIChlbnRyeS1cXHUwMDNlcHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHtcXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtMTE2Mi1cXHRcXHRcXHRpZiAoIWVudHJ5LVxcdTAwM2VkYXRhKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jPTEyOTg9c3RhdGljIHN0cnVjdCBjdGxfZGlyICpzeXNjdGxfbWtkaXJfcChzdHJ1Y3QgY3RsX2RpciAqZGlyLCBjb25zdCBjaGFyICpwYXRoKVxcbi0tXFxuZnMvcHJvYy9wcm9jX3N5c2N0bC5jLTEzNjAtICogcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcygpLCBwcm9jX2RvaW50dmVjX21pbm1heCgpLFxcbmZzL3Byb2MvcHJvY19zeXNjdGwuYzoxMzYxOiAqIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCgpLCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KClcXG5mcy9wcm9jL3Byb2Nfc3lzY3RsLmMtMTM2Mi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg9NjQ3PWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NDgtXFx0XFx0XFx0ICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuaW5jbHVkZS9saW51eC9qaWZmaWVzLmg6NjQ5OmludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1MC1cXHRcXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaD02NTM9aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbmluY2x1ZGUvbGludXgvamlmZmllcy5oLTY1NC1cXHRcXHRcXHQgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTtcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaDo2NTU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG5pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaC02NTYtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzA5PUVYUE9SVF9TWU1CT0wocHJvY19kb2ludHZlY19tc19qaWZmaWVzKTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzEwLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTE6aW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxMi1cXHRcXHRcXHQgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzE4LS8qKlxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMTk6ICogcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4IC0gcmVhZCBhIHZlY3RvciBvZiBtaWxsaXNlY29uZCB2YWx1ZXMgd2l0aCBtaW4vbWF4IHZhbHVlc1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMjAtICogQHRhYmxlOiB0aGUgc3lzY3RsIHRhYmxlXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM0LSAqL1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzozMzU6aW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM2LVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzQxOkVYUE9SVF9TWU1CT0wocHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQyLVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzY2OD1zdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2NzgtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY3OTpcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODAtXFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XFxuLS1cXG5uZXQvcmRzL3N5c2N0bC5jPTUyPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJkc19zeXNjdGxfcmRzX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvcmRzL3N5c2N0bC5jLTU3LVxcdFxcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXFxubmV0L3Jkcy9zeXNjdGwuYzo1ODpcXHRcXHQucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxubmV0L3Jkcy9zeXNjdGwuYy01OS1cXHRcXHQuZXh0cmExXFx0XFx0PSBcXHUwMDI2cmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluLFxcbi0tXFxubmV0L3Jkcy9zeXNjdGwuYy02Ni1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbm5ldC9yZHMvc3lzY3RsLmM6Njc6XFx0XFx0LnByb2NfaGFuZGxlciAgID0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxcbm5ldC9yZHMvc3lzY3RsLmMtNjgtXFx0XFx0LmV4dHJhMVxcdFxcdD0gXFx1MDAyNnJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzLFxcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jPTM0PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJ4cnBjX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3J4cnBjL3N5c2N0bC5jLTU4LVxcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbm5ldC9yeHJwYy9zeXNjdGwuYzo1OTpcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgsXFxubmV0L3J4cnBjL3N5c2N0bC5jLTYwLVxcdFxcdC5leHRyYTFcXHRcXHQ9ICh2b2lkICopXFx1MDAyNm9uZV9qaWZmeSxcXG4tLVxcbm5ldC9yeHJwYy9zeXNjdGwuYy02Ny1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG5uZXQvcnhycGMvc3lzY3RsLmM6Njg6XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LFxcbm5ldC9yeHJwYy9zeXNjdGwuYy02OS1cXHRcXHQuZXh0cmExXFx0XFx0PSAodm9pZCAqKVxcdTAwMjZvbmVfamlmZnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjE2LjYyNDM3MzExMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODE5MzQ0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5c2N0bCBIYW5kbGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZXNlIHN5c2N0bCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAuIEkgY2FuIHNlZSB0aGV5J3JlIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGAgcG9wcyB1cCBpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIHRocm91Z2ggYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgZm9yIHRob3NlIG5laWdoYm91ciB0YWJsZSBwYXJhbWV0ZXJzIGxpa2UgYGJhc2VfcmVhY2hhYmxlX3RpbWVfbXNgLCB3aGljaCwgb2YgY291cnNlLCBpcyBhY2Nlc3NpYmxlIHZpYSBgL3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLy4uLmAgb3IgdGhlIGlwdjYgZXF1aXZhbGVudC4gYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgaXMgYSBsaXR0bGUgbW9yZSB3aWRlc3ByZWFkLCBmb3VuZCBpbiBgZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jYCwgYG5ldC9yZHMvc3lzY3RsLmNgLCBhbmQgYG5ldC9yeHJwYy9zeXNjdGwuY2AuIEFuZCwgbmF0dXJhbGx5LCBkaXJlY3Qgd3JpdGVzIHRvIGAvcHJvYy9zeXMvLi4uYCBhbHNvIGNhbGwgdGhlc2UgaGFuZGxlcnMuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIFRoZSBmaXJzdCBwb2ludCBpcyBpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgd2hlcmUgdGhleSd2ZSBzd2l0Y2hlZCBgcHJvY19pbnRfY29udmAgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYC4gU28gdGhlIG1pbi9tYXggY2hlY2sgaXMgbm93IGVuYWJsZWQsIGFuZCB0aGV5J3JlIGZpeGluZyBhbiBlYXJsaWVyIG92ZXJzaWdodC5cblxuTmV4dCwgaW4gYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2AsIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgY3J1Y2lhbCDigJMgdGhleSdyZSBlbnN1cmluZyB0aGF0IHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlIGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVnZXIgdmFsdWUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGRvd24gdGhlIGxpbmUuXG5cblRoZW4sIHRoZXkndmUgcmVuYW1lZCBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIHRvIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgIGFuZCBkaWQgdGhlIHNhbWUgdGhpbmcgd2l0aCB0aGUgYm9vbCBhcmd1bWVudCB0byBgcHJvY191bG9uZ19jb252YCwgZnJvbSBgZmFsc2VgIHRvIGB0cnVlYCwgYW5kIGVuYWJsZWQgdGhlIG1pbi9tYXggY2hlY2sgaGVyZSB0b28uIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5LlxuXG5BbmQsIGZpbmFsbHksIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIG5vdyBjYWxscyBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4YC5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAgYWN0dWFsbHkgd29yay4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMToyMS4yMDYzMTAzNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTY5MTAwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19pbnRfY29udnxwcm9jX3Vsb25nX2NvbnZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjdGwuaD0xMjQ9aW50IHByb2NfZG91bG9uZ3ZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IGRpciwgdm9pZCAqYnVmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaC0xNDItICovXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaDoxNDM6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTQ0LVxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zeXNjdGwuaD0xNDc9aW50IHByb2NfdWludF9jb252KHVsb25nICp1X3B0ciwgdWludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oLTE1MC1cXHRcXHQgICBpbnQgKCprZXJuX3RvX3VzZXIpKHVsb25nICp1X3B0ciwgY29uc3QgdWludCAqa19wdHIpKTtcXG5pbmNsdWRlL2xpbnV4L3N5c2N0bC5oOjE1MTppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmluY2x1ZGUvbGludXgvc3lzY3RsLmgtMTUyLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9NTA2PWludCBwcm9jX2ludF91MmtfY29udl91b3AoY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBjb25zdCBib29sICpuZWdwLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTUyMy0vKipcXG5rZXJuZWwvc3lzY3RsLmM6NTI0OiAqIHByb2NfaW50X2NvbnYgLSBDaGFuZ2UgdXNlciBvciBrZXJuZWwgcG9pbnRlciBiYXNlZCBvbiBkaXJlY3Rpb25cXG5rZXJuZWwvc3lzY3RsLmMtNTI1LSAqXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtNTM5LSAqL1xcbmtlcm5lbC9zeXNjdGwuYzo1NDA6aW50IHByb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy01NDEtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9NTczPXN0YXRpYyBpbnQgc3lzY3RsX2tlcm5fdG9fdXNlcl9pbnRfY29udihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtNTc3LVxcbmtlcm5lbC9zeXNjdGwuYzo1Nzg6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC9zeXNjdGwuYy01NzktXFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvc3lzY3RsLmMtNTgwLXtcXG5rZXJuZWwvc3lzY3RsLmM6NTgxOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC9zeXNjdGwuYy01ODItXFx0XFx0XFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTU4Ni1cXG5rZXJuZWwvc3lzY3RsLmM6NTg3OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9taW5tYXgoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxua2VybmVsL3N5c2N0bC5jLTU4OC1cXHRcXHRcXHRcXHQgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3N5c2N0bC5jLTU4OS17XFxua2VybmVsL3N5c2N0bC5jOjU5MDpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbmtlcm5lbC9zeXNjdGwuYy01OTEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdXNlcl90b19rZXJuX2ludF9jb252LFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTgyMD1pbnQgcHJvY19kb2ludHZlYyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTgyMy1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXFxua2VybmVsL3N5c2N0bC5jOjgyNDpcXHRcXHRcXHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC5pbnRfY29udiA9IGRvX3Byb2NfaW50X2NvbnYgfSk7XFxua2VybmVsL3N5c2N0bC5jLTgyNS19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9ODY0PWludCBwcm9jX2RvaW50dmVjX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy04NjctXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcbmtlcm5lbC9zeXNjdGwuYzo4Njg6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252X21pbm1heCB9KTtcXG5rZXJuZWwvc3lzY3RsLmMtODY5LX1cXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz05NDY9RVhQT1JUX1NZTUJPTF9HUEwocHJvY19kb3U4dmVjX21pbm1heCk7XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtOTQ4LS8qKlxcbmtlcm5lbC9zeXNjdGwuYzo5NDk6ICogcHJvY191bG9uZ19jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXFxua2VybmVsL3N5c2N0bC5jLTk1MC0gKlxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTk2My0gKi9cXG5rZXJuZWwvc3lzY3RsLmM6OTY0OmludCBwcm9jX3Vsb25nX2NvbnYodWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTk2NS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTEwMzY9c3RhdGljIGludCBwcm9jX3Vsb25nX2sydV9jb252KHVsb25nICp1X3B0ciwgY29uc3QgdWxvbmcgKmtfcHRyKVxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTEwNDAtXFxua2VybmVsL3N5c2N0bC5jOjEwNDE6c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsIGludCBkaXIsXFxua2VybmVsL3N5c2N0bC5jLTEwNDItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbmtlcm5lbC9zeXNjdGwuYy0xMDQzLXtcXG5rZXJuZWwvc3lzY3RsLmM6MTA0NDpcXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3N5c2N0bC5jLTEwNDUtXFx0XFx0XFx0ICAgICAgIHByb2NfdWxvbmdfdTJrX2NvbnYsIHByb2NfdWxvbmdfazJ1X2NvbnYpO1xcbi0tXFxua2VybmVsL3N5c2N0bC5jPTEwODk9aW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTA5Mi1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19VTE9ORyxcXG5rZXJuZWwvc3lzY3RsLmM6MTA5MzpcXHRcXHRcXHQgICAodW5pb24gcHJvY192ZWNfY29udil7IC51bG9uZ19jb252ID0gZG9fcHJvY191bG9uZ19jb252IH0pO1xcbmtlcm5lbC9zeXNjdGwuYy0xMDk0LX1cXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMTAyLSAqIEBwcG9zOiBmaWxlIHBvc2l0aW9uXFxua2VybmVsL3N5c2N0bC5jOjExMDM6ICogQGNvbnY6IEN1c3RvbSBjb252ZXJ0ZXIgY2FsbCBiYWNrLiBEZWZhdWx0cyB0byBkb19wcm9jX2ludF9jb252XFxua2VybmVsL3N5c2N0bC5jLTExMDQtICpcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMTEwPWludCBwcm9jX2RvaW50dmVjX2NvbnYoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMTE1LVxcdGlmICghY29udilcXG5rZXJuZWwvc3lzY3RsLmM6MTExNjpcXHRcXHRjb252ID0gZG9fcHJvY19pbnRfY29udjtcXG5rZXJuZWwvc3lzY3RsLmMtMTExNy1cXHRyZXR1cm4gZG9fcHJvY192ZWModGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLCBQUk9DX1ZFQ19JTlQsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MTUyPXN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNTc6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU5LXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE2NDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjg6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc0LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE3NjpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVxcdFxcdFxcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0OlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jPTE5Nj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIwMTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA0OlxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVxcdFxcdFxcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjEwLVxcdFxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE0LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjIxLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXFx0XFx0XFx0XFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIyODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIzNTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yNTc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2Mi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6Mjg0OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDYtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzExPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMzOTpcXHRcXHRcXHRcXHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MjMuNjIzMjMyNzkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTk2ODU5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgY2hhbmdlcyBpbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBGaXJzdCwgYSBkZXRhaWxlZCBsb29rIGF0IHRoZSBtb2RpZmljYXRpb25zOlxuXG4qICAgYGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXhgOiBJdCdzIGNhbGxpbmcgYHByb2NfaW50X2NvbnZgIG5vdyB3aXRoIGB0cnVlYCBmb3IgYGtfcHRyX3JhbmdlX2NoZWNrYC4gVGhpcyBpcyB3b3J0aCBub3RpbmcsIGVzcGVjaWFsbHkgaWYgdGhlIHByZXZpb3VzIGxvZ2ljIGRpZG4ndCBoYXZlIHRoYXQgY2hlY2suXG4qICAgYHN5c2N0bF91MmtfdWxvbmdfY29udl9tc2A6IFRoZXJlJ3MgYSBuZXcgY2hlY2sgYGlmICgqdV9wdHIgXHUwMDNlIElOVF9NQVgpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSdyZSBleHBsaWNpdGx5IGxpbWl0aW5nIHRoZSBpbnB1dCByYW5nZS4gVGhpcyBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIGJ5cGFzc2VzIGlmIG5vdCBjb3JyZWN0bHkgaGFuZGxlZCBlbHNld2hlcmUuXG4qICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGA6IExvb2tzIGxpa2UgaXQgd2FzIHJlbmFtZWQgZnJvbSBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgLCBhbmQgbm93IHVzZXMgYHRydWVgIGZvciBga19wdHJfcmFuZ2VfY2hlY2tgIHdoZW4gY2FsbGluZyBgcHJvY191bG9uZ19jb252YC4gQWdhaW4sIHRoaXMgcmFuZ2UgY2hlY2tpbmcgaXMga2V5LlxuKiAgIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgOiBJdCdzIGNhbGxpbmcgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQ/IFllcywgdGhlIGtlcm5lbCBzeXNjdGwgaW5mcmFzdHJ1Y3R1cmUgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGAvcHJvYy9zeXMvLi4uYCBlbnRyaWVzLCBzbyB0aGF0IGlzIGEgYmlnIHllcy4gRnVuY3Rpb25zIGxpa2UgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhgIGFuZCBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YCBhcmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmcm9tIHVzZXIgc3BhY2UuIE5vdywgd2hhdCBhYm91dCBjb25maWcgcmVxdWlyZW1lbnRzPyBgQ09ORklHX1NZU0NUTGAgYW5kIGBDT05GSUdfUFJPQ19TWVNDVExgIGFyZSB0aGUgaW1wb3J0YW50IG9uZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgbGlrZSBgI2lmZGVmYCBibG9ja3MuIEkgc2F3IG9uZSBhdCBsaW5lIDIwOCwgc28gSSdsbCBnbyBiYWNrIGFuZCBjaGVjayBsaW5lcyAxMzAgdG8gMTgwIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvdmVyZWQgYW5kIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBgI2Vsc2UgLy8gQ09ORklHX1NZU0NUTGAgYml0cyBhcmVuJ3QgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMToyNy43ODI5MjIwMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvamlmZmllcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHR9XFxuIDEyMTpcXHRcXG4gMTIyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX3Uya19pbnRfY29udl91c2VyaHooY29uc3QgYm9vbCAqbmVncCwgY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyKVxcbiAxMjM6XFx0e1xcbiAxMjQ6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIGNsb2NrX3RfdG9famlmZmllcyk7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB1bG9uZyBzeXNjdGxfamlmZmllc190b19jbG9ja190KGNvbnN0IHVsb25nIHZhbClcXG4gMTI4OlxcdHtcXG4gMTI5OlxcdFxcdHJldHVybiBqaWZmaWVzX3RvX2Nsb2NrX3QodmFsKTtcXG4gMTMwOlxcdH1cXG4gMTMxOlxcdFxcbiAxMzI6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X2ludF9jb252X3VzZXJoeihib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDEzMzpcXHR7XFxuIDEzNDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fY2xvY2tfdCk7XFxuIDEzNTpcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdHN0YXRpYyB1bG9uZyBzeXNjdGxfbXNlY3NfdG9famlmZmllcyhjb25zdCB1bG9uZyB2YWwpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRyZXR1cm4gbXNlY3NfdG9famlmZmllcyh2YWwpO1xcbiAxNDA6XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfaW50X2NvbnZfbXMoY29uc3QgYm9vbCAqbmVncCwgY29uc3QgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyKVxcbiAxNDM6XFx0e1xcbiAxNDQ6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHVsb25nIHN5c2N0bF9qaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVsb25nIHZhbClcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdHJldHVybiBqaWZmaWVzX3RvX21zZWNzKHZhbCk7XFxuIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiAxNTU6XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE2MTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X3VzZXJoeixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MjcuNzgzMDA0NzgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTU4OTE0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIEppZmZpZXMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBgamlmZmllc2AgYXJlIGhhbmRsZWQgaW4gdGhpcyBrZXJuZWwgdmVyc2lvbiwgcGFydGljdWxhcmx5IGhvdyBpdCByZWxhdGVzIHRvIGBDT05GSUdfU1lTQ1RMYC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb24gaGVyZS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBga2VybmVsL3RpbWUvamlmZmllcy5jYCByaWdodCBhd2F5LiBUaGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBmaW5kIHRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGFuZCB0aGVuIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB0cmFjZSBob3cgYGppZmZpZXNgIGludGVyYWN0cyB3aXRoIGFueSBwb3RlbnRpYWwgc3lzY3RsIHZhcmlhYmxlcy4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gd29yayBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzAuMDM4ODk4NzU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIwNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU1lTQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGltZS9qaWZmaWVzLmM9NzY9dm9pZCBfX2luaXQgcmVnaXN0ZXJfcmVmaW5lZF9qaWZmaWVzKGxvbmcgY3ljbGVzX3Blcl9zZWNvbmQpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTAwLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxMDE6I2lmZGVmIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTAyLXN0YXRpYyB1bG9uZyBtdWx0X2h6KGNvbnN0IHVsb25nIHZhbClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yMDE9c3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA3LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMDg6I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDktc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTozMC4xMTQxMDg4ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA2MjY4MjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgYFNZU0NUTGAgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBgU1lTQ1RMYCBjb25maWd1cmF0aW9uIGNoYW5nZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZyBhbmQgdGhlIGFwcHJvcHJpYXRlIGBFbmFibGVDb25maWdzYC4gVGhlIGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBsb2dpYy4gSSBzZWU6XG5cbiogICBgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4YFxuKiAgIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YFxuKiAgIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgICh3aGljaCBpcyBzdGF0aWMsIHNvIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW5saW5pbmcpXG4qICAgYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAgKGFsc28gc3RhdGljKVxuKiAgIGBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4YCAobGlrZXdpc2UsIHN0YXRpYylcblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgYW5kIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhcmUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMuIEl0IHNlZW1zIHRoZXkgYXJlOlxuXG4qICAgYGludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKWBcbiogICBgaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylgXG5cbkknbGwgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFzIGEgcmVsYXRlZCBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggdGhlIHByaW1hcnkgc3lzY3RsIGhhbmRsZXJzIGFyZSB0aG9zZSBmaXJzdCB0d28gYG1pbm1heGAgZnVuY3Rpb25zLiBJJ2xsIGFsc28gZG91YmxlLWNoZWNrLCBhcmUgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc2AgYWZmZWN0ZWQ/IE5vLCBqdXN0IHRoZSBtaW5tYXggb25lcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB0aGUgV29ydGhGdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAzLCB3aGljaCBzYXlzIHRvIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgYW5kIGFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIGluIHJlYWNoYWJsZSBwYXRocy5cblxuSGVyZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBvciBlbmFibGluZyByYW5nZSBjaGVja2luZyAoYGtfcHRyX3JhbmdlX2NoZWNrID0gdHJ1ZWApIHdpdGhpbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAgYW5kIGBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXhgLCBhbmQgaXQgYWxzbyBhZGRzIGFuIGV4cGxpY2l0IGNoZWNrIGAqdV9wdHIgXHUwMDNlIElOVF9NQVhgIGluIGBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgc3lzY3RsIGhhbmRsZXJzIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdG8gZ28gYWhlYWQgYW5kIGRlY2xhcmUgaXQgZnV6emFibGUhXG5cblNvLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlOlxuXG4qICAgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGBcbiogICBgcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heGBcblxuQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOlxuXG4qICAgYFNZU0NUTGBcbiogICBgUFJPQ19TWVNDVExgXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBhbmQgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkyMSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzYuMTc2NzkzNjMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3MDExNzksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFBST0NfU1lTQ1RMIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiUFJPQ19TWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFBST0NfU1lTQ1RMXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjM2LjI1MTUxMTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTU3MzA3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipLY29uZmlnIFNoZW5hbmlnYW5zOiBTWVNDVEwvUFJPQ19TWVNDVEwgVmVyaWZpY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBzaXR1YXRpb24uIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdGhlcmUgYXJlIHJlbGV2YW50IHNldHRpbmdzIHRvIGVuYWJsZSBvciBjb25maWd1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGUgbW9kdWxlIG9yIGZlYXR1cmUgdXNlcyBgU1lTQ1RMYCBvciBgUFJPQ19TWVNDVExgLCBvciBtYXliZSBib3RoLCBiZWNhdXNlIHRoYXQgaW1wYWN0cyBob3cgaXQncyBpbnRlZ3JhdGVkIGFuZCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGl0LiBTbywgbGV0J3Mgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgbWFrZSBzdXJlIHRob3NlIG9wdGlvbnMgYXJlIHByb3Blcmx5IHNldC4gVGhpcyBpbml0aWFsIGF1ZGl0IHdpbGwgY2xhcmlmeSB0aGUgZ3JvdW5kd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6MzguNDY3MjQ1NzQzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1NzIzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9DX1NZU0NUTHxjb25maWcgU1lTQ1RMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz02Nz1jb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTgyLVxcbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgU1lTQ1RMXFxuZnMvcHJvYy9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xNzEyPWNvbmZpZyBIQVZFX1VJRDE2XFxuLS1cXG5pbml0L0tjb25maWctMTcxNC1cXG5pbml0L0tjb25maWc6MTcxNTpjb25maWcgU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRVxcbmluaXQvS2NvbmZpZy0xNzE2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xNzE5LVxcbmluaXQvS2NvbmZpZzoxNzIwOmNvbmZpZyBTWVNDVExfQVJDSF9VTkFMSUdOX05PX1dBUk5cXG5pbml0L0tjb25maWctMTcyMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTcyNi1cXG5pbml0L0tjb25maWc6MTcyNzpjb25maWcgU1lTQ1RMX0FSQ0hfVU5BTElHTl9BTExPV1xcbmluaXQvS2NvbmZpZy0xNzI4LVxcdGJvb2xcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTI3NzU9Y29uZmlnIFJFU09VUkNFX0tVTklUX1RFU1RcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTI3ODctXFxubGliL0tjb25maWcuZGVidWc6Mjc4ODpjb25maWcgU1lTQ1RMX0tVTklUX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNzg5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0IGZvciBzeXNjdGxcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NDEuMzQyOTc3MjA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjU5Nzk2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmcy9wcm9jL0tjb25maWdgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnMvcHJvYy9LY29uZmlnYCBhbmQgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19TWVNDVExgLiAgVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgbWVudGFsbHkgZmxhZyB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGNhbiBub3cgZWZmaWNpZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlIHRlcm0gXCJTWVNDVExcIi4gVGhpcyBzaG91bGQgcXVpY2tseSByZXR1cm4gdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IGl0IGVuYWJsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDM2LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjQzLjIwODk1OTk4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0ODY1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhcIixcbiAgICBcInByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHN5c2N0bCBoYW5kbGVycyBmb3IgamlmZmllcyBjb252ZXJzaW9ucyAocHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCBhbmQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KSB0byBwcm9wZXJseSBlbmFibGUgbWluL21heCByYW5nZSBjaGVja3MgYW5kIGFkZHMgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gdXNlci1zdXBwbGllZCBtaWxsaXNlY29uZCB2YWx1ZXMuIFRoZXNlIHN5c2N0bCBwcm9jIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9wcm9jL3N5cyBzeXNjdGwgbm9kZXMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgY29udmVyc2lvbiBhbmQgYm91bmRhcnkgY2hlY2tpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4XCIsXG4gICAgXCJwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzeXNjdGwgaGFuZGxlcnMgZm9yIGppZmZpZXMgY29udmVyc2lvbnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgZW5hYmxlIG1pbi9tYXggcmFuZ2UgY2hlY2tzIGFuZCBhZGRzIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIHVzZXItc3VwcGxpZWQgbWlsbGlzZWNvbmQgdmFsdWVzLiBUaGVzZSBzeXNjdGwgcHJvYyBoYW5kbGVycyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvcHJvYy9zeXMgc3lzY3RsIG5vZGVzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGNvbnZlcnNpb24gYW5kIGJvdW5kYXJ5IGNoZWNraW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo0My4zMDM4NDAwOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTUzMTcxNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NDMuMzA0NTYwMDExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI5NTI0NDY0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmY0ODA2OTNkNGJiNDQ3Y2E2N2Q2ZWJiMjkxMWJiNjFhZGEzYjNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxODozMTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xuaW5kZXggMjEzYWUxZDZhMDE0Ny4uNDczNzQzMWZkYjE2ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuY1xuKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jXG5AQCAtMTgxLDEyICsxODEsMTUgQEAgc3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcbiBcdFx0XHRcdFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxuK1x0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcbiBcdFx0XHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcbiB7XG4rXHRpZiAoKnVfcHRyIFx1MDAzZSBJTlRfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcbiB9XG4gXG5AQCAtMTk1LDEwICsxOTgsMTAgQEAgc3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXG4gXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4tXHRcdFx0XHRcdCBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4rc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCB1bG9uZyAqa19wdHIsXG4rXHRcdFx0XHRcdFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxuIHtcbi1cdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXG4rXHRyZXR1cm4gcHJvY191bG9uZ19jb252KHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXG4gXHRcdFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcbiB9XG4gXG5AQCAtMjI5LDggKzIzMiw4IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXG4gXHRyZXR1cm4gLUVOT1NZUztcbiB9XG4gXG4tc3RhdGljIGludCBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbi1cdFx0XHRcdFx0IGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcbitzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcbitcdFx0XHRcdFx0XHRpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXG4ge1xuIFx0cmV0dXJuIC1FTk9TWVM7XG4gfVxuQEAgLTMzMyw3ICszMzYsNyBAQCBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxuIFx0XHRcdFx0ICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRyZXR1cm4gcHJvY19kb3Vsb25ndmVjX2NvbnYodGFibGUsIGRpciwgYnVmZmVyLCBsZW5wLCBwcG9zLFxuLVx0XHRcdFx0ICAgIGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzKTtcbitcdFx0XHRcdCAgICBkb19wcm9jX3Vsb25nX2NvbnZfbXNfamlmZmllc19taW5tYXgpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo0My4zMDQ1NjE0MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTMwMDEzNTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoIHJlcXVlc3QuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGFib3V0IEtNU0FOIGZ1enppbmcgdmVyc3VzIEtBU0FOIG9yIHN0YW5kYXJkIGZ1enppbmcgaXMganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUga2VybmVsIGVuZ2luZWVyaW5nOyBwdXJlbHkgYSB0cmlhZ2UgcXVlc3Rpb24uIENvbXBsZXRlbHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgZm9jdXNlZCBvbiBga2VybmVsL3RpbWUvamlmZmllcy5jYC4gSSBzZWUgYSBmZXcga2V5IGNoYW5nZXM6XG5cbjEuICBJbiBgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heGAsIHRoZSBjYWxsIHRvIGBwcm9jX2ludF9jb252YCBoYXMgYSBgZmFsc2VgIGNoYW5nZWQgdG8gYHRydWVgIGZvciB0aGUgYG1pbm1heGAgZmxhZy5cbjIuICBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYCBub3cgaW5jbHVkZXMgYSBjaGVjayBgaWYgKCp1X3B0ciBcdTAwM2UgSU5UX01BWCkgcmV0dXJuIC1FSU5WQUw7YC4gU21hcnQsIGEgZ29vZCBib3VuZGFyeSBjaGVjay5cbjMuICBgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBwcm9jX3Vsb25nX2NvbnZgIGNoYW5nZXMgdGhlIGJvb2xlYW4gZmxhZyBmcm9tIGBmYWxzZWAgdG8gYHRydWVgLlxuNC4gIEZpbmFsbHksIHRoZSBjYWxsYmFjayBuYW1lIGluIGBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXhgIGdldHMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjaGFuZ2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBlc3BlY2lhbGx5IGhvdyB0aGUgYG1pbm1heGAgZmxhZyBpbmZsdWVuY2VzIHRoZWlyIG9wZXJhdGlvbi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIGludG8gYGtlcm5lbC90aW1lL2ppZmZpZXMuY2AgYW5kIG90aGVyIHJlbGV2YW50IGNvZGUgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGFsbCBhYm91dCB2ZXJpZnlpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgdGhhdCBib29sZWFuIGZsYWchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1Mi42MDQ3MDAwNjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDczMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfaW50X2NvbnZ8cHJvY191bG9uZ19jb252XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lL2ppZmZpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdGltZS9qaWZmaWVzLmM9MTUyPXN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU2LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNTc6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNTgtXFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTU5LXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTYwOlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjEtXFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X2h6LCBzeXNjdGxfazJ1X2ludF9jb252X2h6KTtcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjMtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE2NDpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjUtXFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0xNjcte1xcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxNjg6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE2OS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfdXNlcmh6LFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3Mi1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTczOnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc0LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE3NS17XFxua2VybmVsL3RpbWUvamlmZmllcy5jOjE3NjpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc3LVxcdFxcdFxcdCAgICAgc3lzY3RsX3Uya19pbnRfY29udl9tcywgc3lzY3RsX2sydV9pbnRfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTc5LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoxODA6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMTgzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MTg0OlxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTE4NS1cXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jPTE5Nj1zdGF0aWMgaW50IHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMDAtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIwMTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAyLVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjAzLXtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA0OlxcdHJldHVybiBwcm9jX3Vsb25nX2NvbnYodV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA1LVxcdFxcdFxcdCAgICAgICBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMsIHN5c2N0bF9rMnVfdWxvbmdfY29udl9tcyk7XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjA4LSNlbHNlIC8vIENPTkZJR19TWVNDVExcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MjA5OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjEwLVxcdFxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE0LVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMTU6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X3VzZXJoel9qaWZmaWVzKGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjE2LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqa19wdHIsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjIxLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYzoyMjI6c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X21zX2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjMtXFx0XFx0XFx0XFx0ICAgICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjctXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIyODpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yMzQtXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjIzNTpzdGF0aWMgaW50IGRvX3Byb2NfdWxvbmdfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMjM2LVxcdFxcdFxcdFxcdFxcdFxcdGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYz0yNTc9aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IGRpcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0yNjAtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjI2MTpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI2Mi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MjgwPWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4My1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6Mjg0OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl91c2VyaHpfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTI4NS19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzAzPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC90aW1lL2ppZmZpZXMuYy0zMDYtXFx0cmV0dXJuIHByb2NfZG9pbnR2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMwNzpcXHRcXHRcXHRcXHQgIGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMwOC19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzExPWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNC1cXHRyZXR1cm4gcHJvY19kb2ludHZlY19jb252KHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcyxcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM6MzE1OlxcdFxcdFxcdFxcdCAgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heCk7XFxua2VybmVsL3RpbWUvamlmZmllcy5jLTMxNi19XFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmM9MzM1PWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzM4LVxcdHJldHVybiBwcm9jX2RvdWxvbmd2ZWNfY29udih0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsXFxua2VybmVsL3RpbWUvamlmZmllcy5jOjMzOTpcXHRcXHRcXHRcXHQgICAgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KTtcXG5rZXJuZWwvdGltZS9qaWZmaWVzLmMtMzQwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NTIuNjYzNzgwMjM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODk5NjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWlubWF4YCBJbXBsZW1lbnRhdGlvbiBUaHJvdWdoIENvbnZlcnNpb24gRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBtaW5tYXhgIGZ1bmN0aW9uJ3MgYmVoYXZpb3IsIEkgbmVlZCB0byBncm91bmQgbXlzZWxmIGluIGhvdyB0aGUgdW5kZXJseWluZyB0eXBlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIGNvbnZlcnNpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYHByb2NfaW50X2NvbnZgIGFuZCBgcHJvY191bG9uZ19jb252YC4gVGhlc2UgY29udmVyc2lvbnMsIG9yIHRoZWlyIGFic2VuY2UsIGFyZSB3aGVyZSB0aGUgc3VidGxldGllcyBvZiBwb3RlbnRpYWwgb3ZlcmZsb3csIHR5cGUgcHJvbW90aW9uLCBvciBldmVuIGltcGxpY2l0IGNhc3RpbmcgaXNzdWVzIHdpbGwgbGlrZWx5IHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBpbnRlZ2VyIHR5cGVzIGluIHRoZSBgbWlubWF4YCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVtIGlzIGtleSB0byBtYWtpbmcgc3VyZSBJIGRvbid0IG1pc3MgYW55IG9idmlvdXMsIG9yIHN1YnRsZSwgcG90ZW50aWFsIHByb2JsZW1zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTg6MzE6NTQuNTUzNzQ0NjUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU5MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jX2ludF9jb252fHByb2NfdWxvbmdfY29udlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc3lzY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3N5c2N0bC5jPTUwNj1pbnQgcHJvY19pbnRfdTJrX2NvbnZfdW9wKGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgY29uc3QgYm9vbCAqbmVncCxcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy01MjMtLyoqXFxua2VybmVsL3N5c2N0bC5jOjUyNDogKiBwcm9jX2ludF9jb252IC0gQ2hhbmdlIHVzZXIgb3Iga2VybmVsIHBvaW50ZXIgYmFzZWQgb24gZGlyZWN0aW9uXFxua2VybmVsL3N5c2N0bC5jLTUyNS0gKlxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTUzOS0gKi9cXG5rZXJuZWwvc3lzY3RsLmM6NTQwOmludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcXG5rZXJuZWwvc3lzY3RsLmMtNTQxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTU3Mz1zdGF0aWMgaW50IHN5c2N0bF9rZXJuX3RvX3VzZXJfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTU3Ny1cXG5rZXJuZWwvc3lzY3RsLmM6NTc4OnN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICp1X3B0ciwgaW50ICprX3B0cixcXG5rZXJuZWwvc3lzY3RsLmMtNTc5LVxcdFxcdFxcdCAgICBpbnQgZGlyLCBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwpXFxua2VybmVsL3N5c2N0bC5jLTU4MC17XFxua2VybmVsL3N5c2N0bC5jOjU4MTpcXHRyZXR1cm4gcHJvY19pbnRfY29udihuZWdwLCB1X3B0ciwga19wdHIsIGRpciwgdGJsLCBmYWxzZSxcXG5rZXJuZWwvc3lzY3RsLmMtNTgyLVxcdFxcdFxcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy01ODYtXFxua2VybmVsL3N5c2N0bC5jOjU4NzpzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbWlubWF4KGJvb2wgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbmtlcm5lbC9zeXNjdGwuYy01ODgtXFx0XFx0XFx0XFx0ICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbmtlcm5lbC9zeXNjdGwuYy01ODkte1xcbmtlcm5lbC9zeXNjdGwuYzo1OTA6XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgdHJ1ZSxcXG5rZXJuZWwvc3lzY3RsLmMtNTkxLVxcdFxcdFxcdCAgICAgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz04MjA9aW50IHByb2NfZG9pbnR2ZWMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy04MjMtXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcbmtlcm5lbC9zeXNjdGwuYzo4MjQ6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAuaW50X2NvbnYgPSBkb19wcm9jX2ludF9jb252IH0pO1xcbmtlcm5lbC9zeXNjdGwuYy04MjUtfVxcbi0tXFxua2VybmVsL3N5c2N0bC5jPTg2ND1pbnQgcHJvY19kb2ludHZlY19taW5tYXgoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBkaXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtODY3LVxcdHJldHVybiBkb19wcm9jX3ZlYyh0YWJsZSwgZGlyLCBidWZmZXIsIGxlbnAsIHBwb3MsIFBST0NfVkVDX0lOVCxcXG5rZXJuZWwvc3lzY3RsLmM6ODY4OlxcdFxcdFxcdCAgICh1bmlvbiBwcm9jX3ZlY19jb252KXsgLmludF9jb252ID0gZG9fcHJvY19pbnRfY29udl9taW5tYXggfSk7XFxua2VybmVsL3N5c2N0bC5jLTg2OS19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9OTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHByb2NfZG91OHZlY19taW5tYXgpO1xcbi0tXFxua2VybmVsL3N5c2N0bC5jLTk0OC0vKipcXG5rZXJuZWwvc3lzY3RsLmM6OTQ5OiAqIHByb2NfdWxvbmdfY29udiAtIENoYW5nZSB1c2VyIG9yIGtlcm5lbCBwb2ludGVyIGJhc2VkIG9uIGRpcmVjdGlvblxcbmtlcm5lbC9zeXNjdGwuYy05NTAtICpcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy05NjMtICovXFxua2VybmVsL3N5c2N0bC5jOjk2NDppbnQgcHJvY191bG9uZ19jb252KHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy05NjUtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibCwgYm9vbCBrX3B0cl9yYW5nZV9jaGVjayxcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMDM2PXN0YXRpYyBpbnQgcHJvY191bG9uZ19rMnVfY29udih1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cilcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYy0xMDQwLVxcbmtlcm5lbC9zeXNjdGwuYzoxMDQxOnN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLCBpbnQgZGlyLFxcbmtlcm5lbC9zeXNjdGwuYy0xMDQyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG5rZXJuZWwvc3lzY3RsLmMtMTA0My17XFxua2VybmVsL3N5c2N0bC5jOjEwNDQ6XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbmtlcm5lbC9zeXNjdGwuYy0xMDQ1LVxcdFxcdFxcdCAgICAgICBwcm9jX3Vsb25nX3Uya19jb252LCBwcm9jX3Vsb25nX2sydV9jb252KTtcXG4tLVxcbmtlcm5lbC9zeXNjdGwuYz0xMDg5PWludCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLFxcbi0tXFxua2VybmVsL3N5c2N0bC5jLTEwOTItXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfVUxPTkcsXFxua2VybmVsL3N5c2N0bC5jOjEwOTM6XFx0XFx0XFx0ICAgKHVuaW9uIHByb2NfdmVjX2NvbnYpeyAudWxvbmdfY29udiA9IGRvX3Byb2NfdWxvbmdfY29udiB9KTtcXG5rZXJuZWwvc3lzY3RsLmMtMTA5NC19XFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTEwMi0gKiBAcHBvczogZmlsZSBwb3NpdGlvblxcbmtlcm5lbC9zeXNjdGwuYzoxMTAzOiAqIEBjb252OiBDdXN0b20gY29udmVydGVyIGNhbGwgYmFjay4gRGVmYXVsdHMgdG8gZG9fcHJvY19pbnRfY29udlxcbmtlcm5lbC9zeXNjdGwuYy0xMTA0LSAqXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmM9MTExMD1pbnQgcHJvY19kb2ludHZlY19jb252KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgZGlyLCB2b2lkICpidWZmZXIsXFxuLS1cXG5rZXJuZWwvc3lzY3RsLmMtMTExNS1cXHRpZiAoIWNvbnYpXFxua2VybmVsL3N5c2N0bC5jOjExMTY6XFx0XFx0Y29udiA9IGRvX3Byb2NfaW50X2NvbnY7XFxua2VybmVsL3N5c2N0bC5jLTExMTctXFx0cmV0dXJuIGRvX3Byb2NfdmVjKHRhYmxlLCBkaXIsIGJ1ZmZlciwgbGVucCwgcHBvcywgUFJPQ19WRUNfSU5ULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1NC42MDMzNDIyMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDg1MDMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaWdnaW5nIGludG8gSmlmZmllcyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBqaWZmaWVzYCBhcmUgaGFuZGxlZC4gSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byByZWFsbHkgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCBga2VybmVsL3RpbWUvamlmZmllcy5jYCBhbmQgZm9jdXNpbmcgb24gdGhlIGFyZWFzIGFyb3VuZCBsaW5lcyAxNTAtMjUwIGFuZCB0aGVuIGFnYWluIGFyb3VuZCAzMDAtMzUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgdG8gYW5hbHl6ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGluY3JlbWVudGluZyBoYXBwZW5zLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBhbmQgaG93IGl0IGFsbCB0aWVzIGludG8gdGhlIGJyb2FkZXIgdGltZWtlZXBpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc2VjdGlvbnMgYmVjYXVzZSB0aGV5J3JlIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgcmFjZSBjb25kaXRpb25zIGFuZCBvdmVyZmxvdyBpc3N1ZXMgYXJlIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1Ni44NTgxOTUzNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvamlmZmllcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdHN0YXRpYyBpbnQgc3lzY3RsX2sydV9pbnRfY29udl9tcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGNvbnN0IGludCAqa19wdHIpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRyZXR1cm4gcHJvY19pbnRfazJ1X2NvbnZfa29wKHVfcHRyLCBrX3B0ciwgbmVncCwgc3lzY3RsX2ppZmZpZXNfdG9fbXNlY3MpO1xcbiAxNTU6XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE2MTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfaHosIHN5c2N0bF9rMnVfaW50X2NvbnZfaHopO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIGZhbHNlLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICBzeXNjdGxfdTJrX2ludF9jb252X3VzZXJoeixcXG4gMTcwOlxcdFxcdFxcdFxcdCAgICAgc3lzY3RsX2sydV9pbnRfY29udl91c2VyaHopO1xcbiAxNzE6XFx0fVxcbiAxNzI6XFx0XFxuIDE3MzpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDE3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAxNzU6XFx0e1xcbiAxNzY6XFx0XFx0cmV0dXJuIHByb2NfaW50X2NvbnYobmVncCwgdV9wdHIsIGtfcHRyLCBkaXIsIHRibCwgZmFsc2UsXFxuIDE3NzpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllc19taW5tYXgoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAxODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMTgzOlxcdHtcXG4gMTg0OlxcdFxcdHJldHVybiBwcm9jX2ludF9jb252KG5lZ3AsIHVfcHRyLCBrX3B0ciwgZGlyLCB0YmwsIHRydWUsXFxuIDE4NTpcXHRcXHRcXHRcXHQgICAgIHN5c2N0bF91MmtfaW50X2NvbnZfbXMsIHN5c2N0bF9rMnVfaW50X2NvbnZfbXMpO1xcbiAxODY6XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRzdGF0aWMgaW50IHN5c2N0bF91MmtfdWxvbmdfY29udl9tcyhjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cilcXG4gMTg5OlxcdHtcXG4gMTkwOlxcdFxcdGlmICgqdV9wdHIgXFx1MDAzZSBJTlRfTUFYKVxcbiAxOTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdHJldHVybiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIHN5c2N0bF9tc2Vjc190b19qaWZmaWVzKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RhdGljIGludCBzeXNjdGxfazJ1X3Vsb25nX2NvbnZfbXModWxvbmcgKnVfcHRyLCBjb25zdCB1bG9uZyAqa19wdHIpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRyZXR1cm4gcHJvY191bG9uZ19rMnVfY29udl9rb3AodV9wdHIsIGtfcHRyLCBzeXNjdGxfamlmZmllc190b19tc2Vjcyk7XFxuIDE5OTpcXHR9XFxuIDIwMDpcXHRcXG4gMjAxOlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIHByb2NfdWxvbmdfY29udih1X3B0ciwga19wdHIsIGRpciwgdGJsLCB0cnVlLFxcbiAyMDU6XFx0XFx0XFx0XFx0ICAgICAgIHN5c2N0bF91MmtfdWxvbmdfY29udl9tcywgc3lzY3RsX2sydV91bG9uZ19jb252X21zKTtcXG4gMjA2OlxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0I2Vsc2UgLy8gQ09ORklHX1NZU0NUTFxcbiAyMDk6XFx0c3RhdGljIGludCBkb19wcm9jX2ludF9jb252X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBpbnQgKmtfcHRyLFxcbiAyMTA6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBkaXIsIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjExOlxcdHtcXG4gMjEyOlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMTM6XFx0fVxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfdXNlcmh6X2ppZmZpZXMoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLFxcbiAyMTY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50ICprX3B0ciwgaW50IGRpcixcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRibClcXG4gMjE4OlxcdHtcXG4gMjE5OlxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnZfbXNfamlmZmllcyhib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgZG9fcHJvY19pbnRfY29udl9tc19qaWZmaWVzX21pbm1heChib29sICpuZWdwLCB1bG9uZyAqdV9wdHIsXFxuIDIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKmtfcHRyLCBpbnQgZGlyLFxcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzMzpcXHR9XFxuIDIzNDpcXHRcXG4gMjM1OlxcdHN0YXRpYyBpbnQgZG9fcHJvY191bG9uZ19jb252X21zX2ppZmZpZXNfbWlubWF4KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgdWxvbmcgKmtfcHRyLFxcbiAyMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcbiAyMzc6XFx0e1xcbiAyMzg6XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDIzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjU2Ljg1ODI4MTAzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDEyMzY4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgS2VybmVsIFN5c3RlbSBDb250cm9sKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBjb250cm9sIChzeXNjdGwpIGludGVyZmFjZSBoYW5kbGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgY29udmVyc2lvbnMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9zeXNjdGwuY2AgZmlsZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIGJlaGluZCBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLiBJdCdzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYnJpZGdlIHRoZSBnYXAgYmV0d2VlbiB0aGUga2VybmVsJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgdmFsdWVzIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGltcGxlbWVudGF0aW9uLCBhcyB0aGVzZSBhcmUgZm91bmRhdGlvbmFsIHdoZW4gZGVhbGluZyB3aXRoIHN5c2N0bHMgdGhhdCBpbnRlcmZhY2UgdG8gdGhlIHVuZGVybHlpbmcgdmFsdWVzLiBUaGlzJ2xsIHByb2JhYmx5IGludm9sdmUgZXhhbWluaW5nIGhvdyB0aGV5IGhhbmRsZSBsaW1pdHMsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB0eXBlIGNvbnZlcnNpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaGFuZGxlIGludGVnZXIgYW5kIHVuc2lnbmVkIGxvbmcgZm9ybWF0cy4gSSdtIGtlZW4gdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyLXN1cHBsaWVkIHZhbHVlcyB0cmFuc2xhdGUgaW50byBrZXJuZWwtdXNhYmxlIHZhbHVlcywgYW5kIHZpY2UgdmVyc2EuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMxOjU4Ljg3MDY1NjcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc3lzY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdGludCBwcm9jX2ludF9jb252KGJvb2wgKm5lZ3AsIHVsb25nICp1X3B0ciwgaW50ICprX3B0ciwgaW50IGRpcixcXG4gNTQxOlxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsLCBib29sIGtfcHRyX3JhbmdlX2NoZWNrLFxcbiA1NDI6XFx0XFx0XFx0ICBpbnQgKCp1c2VyX3RvX2tlcm4pKGNvbnN0IGJvb2wgKm5lZ3AsIGNvbnN0IHVsb25nICp1X3B0ciwgaW50ICprX3B0ciksXFxuIDU0MzpcXHRcXHRcXHQgIGludCAoKmtlcm5fdG9fdXNlcikoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKSlcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdGlmIChTWVNDVExfS0VSTl9UT19VU0VSKGRpcikpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4ga2Vybl90b191c2VyKG5lZ3AsIHVfcHRyLCBrX3B0cik7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdGlmIChrX3B0cl9yYW5nZV9jaGVjaykge1xcbiA1NDk6XFx0XFx0XFx0aW50IHRtcF9rLCByZXQ7XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdFxcdGlmICghdGJsKVxcbiA1NTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1MzpcXHRcXHRcXHRyZXQgPSB1c2VyX3RvX2tlcm4obmVncCwgdV9wdHIsIFxcdTAwMjZ0bXBfayk7XFxuIDU1NDpcXHRcXHRcXHRpZiAocmV0KVxcbiA1NTU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNTU2OlxcdFxcdFxcdGlmICgodGJsLVxcdTAwM2VleHRyYTEgXFx1MDAyNlxcdTAwMjYgKihpbnQgKil0YmwtXFx1MDAzZWV4dHJhMSBcXHUwMDNlIHRtcF9rKSB8fFxcbiA1NTc6XFx0XFx0XFx0ICAgICh0YmwtXFx1MDAzZWV4dHJhMiBcXHUwMDI2XFx1MDAyNiAqKGludCAqKXRibC1cXHUwMDNlZXh0cmEyIFxcdTAwM2MgdG1wX2spKVxcbiA1NTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1OTpcXHRcXHRcXHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xcbiA1NjA6XFx0XFx0fSBlbHNlXFxuIDU2MTpcXHRcXHRcXHRyZXR1cm4gdXNlcl90b19rZXJuKG5lZ3AsIHVfcHRyLCBrX3B0cik7XFxuIDU2MjpcXHRcXHRyZXR1cm4gMDtcXG4gNTYzOlxcdH1cXG4gNTY0OlxcdFxcbiA1NjU6XFx0XFxuIDU2NjpcXHRcXG4gNTY3OlxcdHN0YXRpYyBpbnQgc3lzY3RsX3VzZXJfdG9fa2Vybl9pbnRfY29udihjb25zdCBib29sICpuZWdwLCBjb25zdCB1bG9uZyAqdV9wdHIsXFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRcXHRpbnQgKmtfcHRyKVxcbiA1Njk6XFx0e1xcbiA1NzA6XFx0XFx0cmV0dXJuIHByb2NfaW50X3Uya19jb252X3VvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xcbiA1NzE6XFx0fVxcbiA1NzI6XFx0XFxuIDU3MzpcXHRzdGF0aWMgaW50IHN5c2N0bF9rZXJuX3RvX3VzZXJfaW50X2NvbnYoYm9vbCAqbmVncCwgdWxvbmcgKnVfcHRyLCBjb25zdCBpbnQgKmtfcHRyKVxcbiA1NzQ6XFx0e1xcbiA1NzU6XFx0XFx0cmV0dXJuIHByb2NfaW50X2sydV9jb252X2tvcCh1X3B0ciwga19wdHIsIG5lZ3AsIE5VTEwpO1xcbiA1NzY6XFx0fVxcbiA1Nzc6XFx0XFxuIDU3ODpcXHRzdGF0aWMgaW50IGRvX3Byb2NfaW50X2NvbnYoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqdV9wdHIsIGludCAqa19wdHIsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgaW50IGRpciwgY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGJsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMTo1OC44NzA3OTI4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDk5MDY3Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBhIEtleSBDb252ZXJzaW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoaXMgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIGZvciBhIG1vbWVudCBhbmQgdGFrZSBhIGxvb2sgYXQgYHByb2NfdWxvbmdfY29udmAgd2l0aGluIGBrZXJuZWwvc3lzY3RsLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBob3cgdW5zaWduZWQgbG9uZyB2YWx1ZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbCBpbnRlcmZhY2UsIGFuZCBJIHN1c3BlY3QgaXQgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gaG93IHdlJ3JlIHNlZWluZyB0aGUgYmVoYXZpb3Igd2UncmUgc2VlaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBjb252ZXJ0cyBhbmQgdmFsaWRhdGVzIHRoZXNlIHZhbHVlcywgd2hpY2ggY291bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgd2hhdCdzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxODozMjowMC4zNjk4NjM1NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zeXNjdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NjQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NjQ6XFx0aW50IHByb2NfdWxvbmdfY29udih1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciwgaW50IGRpcixcXG4gOTY1OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YmwsIGJvb2wga19wdHJfcmFuZ2VfY2hlY2ssXFxuIDk2NjpcXHRcXHRcXHQgICAgaW50ICgqdXNlcl90b19rZXJuKShjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0ciksXFxuIDk2NzpcXHRcXHRcXHQgICAgaW50ICgqa2Vybl90b191c2VyKSh1bG9uZyAqdV9wdHIsIGNvbnN0IHVsb25nICprX3B0cikpXFxuIDk2ODpcXHR7XFxuIDk2OTpcXHRcXHRpZiAoU1lTQ1RMX0tFUk5fVE9fVVNFUihkaXIpKVxcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIGtlcm5fdG9fdXNlcih1X3B0ciwga19wdHIpO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHRpZiAoa19wdHJfcmFuZ2VfY2hlY2spIHtcXG4gOTczOlxcdFxcdFxcdHVsb25nIHRtcF9rO1xcbiA5NzQ6XFx0XFx0XFx0aW50IHJldDtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0XFx0aWYgKCF0YmwpXFxuIDk3NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTc4OlxcdFxcdFxcdHJldCA9IHVzZXJfdG9fa2Vybih1X3B0ciwgXFx1MDAyNnRtcF9rKTtcXG4gOTc5OlxcdFxcdFxcdGlmIChyZXQpXFxuIDk4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5ODE6XFx0XFx0XFx0aWYgKCh0YmwtXFx1MDAzZWV4dHJhMSBcXHUwMDI2XFx1MDAyNiAqKHVsb25nICopdGJsLVxcdTAwM2VleHRyYTEgXFx1MDAzZSB0bXBfaykgfHxcXG4gOTgyOlxcdFxcdFxcdCAgICAodGJsLVxcdTAwM2VleHRyYTIgXFx1MDAyNlxcdTAwMjYgKih1bG9uZyAqKXRibC1cXHUwMDNlZXh0cmEyIFxcdTAwM2MgdG1wX2spKVxcbiA5ODM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDk4NDpcXHRcXHRcXHRXUklURV9PTkNFKCprX3B0ciwgdG1wX2spO1xcbiA5ODU6XFx0XFx0fSBlbHNlXFxuIDk4NjpcXHRcXHRcXHRyZXR1cm4gdXNlcl90b19rZXJuKHVfcHRyLCBrX3B0cik7XFxuIDk4NzpcXHRcXHRyZXR1cm4gMDtcXG4gOTg4OlxcdH1cXG4gOTg5OlxcdFxcbiA5OTA6XFx0LyoqXFxuIDk5MTpcXHQgKiBwcm9jX3Vsb25nX3Uya19jb252X3VvcCAtIEFzc2lnbiB1c2VyIHZhbHVlIHRvIGEga2VybmVsIHBvaW50ZXJcXG4gOTkyOlxcdCAqXFxuIDk5MzpcXHQgKiBAdV9wdHI6IHBvaW50ZXIgdG8gdXNlciBzcGFjZSB2YXJpYWJsZVxcbiA5OTQ6XFx0ICogQGtfcHRyOiBwb2ludGVyIHRvIGtlcm5lbCB2YXJpYWJsZVxcbiA5OTU6XFx0ICogQHVfcHRyX29wOiBleGVjdXRlIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFzc2lnbmluZyB0byBrX3B0clxcbiA5OTY6XFx0ICpcXG4gOTk3OlxcdCAqIFVzZXMgV1JJVEVfT05DRSB0byBhc3NpZ24gdmFsdWUgdG8ga19wdHIuIEV4ZWN1dGVzIHVfcHRyX29wIGlmXFxuIDk5ODpcXHQgKiBub3QgTlVMTC5cXG4gOTk5OlxcdCAqXFxuMTAwMDpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MuXFxuMTAwMTpcXHQgKi9cXG4xMDAyOlxcdGludCBwcm9jX3Vsb25nX3Uya19jb252X3VvcChjb25zdCB1bG9uZyAqdV9wdHIsIHVsb25nICprX3B0cixcXG4xMDAzOlxcdFxcdFxcdFxcdCAgICB1bG9uZyAoKnVfcHRyX29wKShjb25zdCB1bG9uZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMyOjAwLjM3MDAxMjUzNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg2OTcyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBtaW4vbWF4IGNoZWNrcyB3aXRoaW4gdGhlIGBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4YCBhbmQgYHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heGAgc3lzY3RsIGhhbmRsZXJzLiBTcGVjaWZpY2FsbHksIGl0J3MgbWFraW5nIHN1cmUgdGhhdCBib3VuZHMgYXJlIGFwcHJvcHJpYXRlbHkgZW5mb3JjZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uIG9mIHVzZXItcHJvdmlkZWQgdmFsdWVzIHRvIGtlcm5lbCB2YWx1ZXMsIGFuZCBpdCdzIGFkZGluZyBhbiBvdmVyZmxvdyBjaGVjay5cblxuRmlyc3QsIEkgbG9va2VkIGludG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHNlZSBpdCdzIGNoYW5naW5nIHRoZSBib29sZWFuIHBhcmFtZXRlciBvZiBgcHJvY19pbnRfY29udmAgYW5kIGBwcm9jX3Vsb25nX2NvbnZgLCBhbmQgYWRkcyBhbiBvdmVyZmxvdyBjaGVjayBpbiBgc3lzY3RsX3Uya191bG9uZ19jb252X21zYC4gTXkgcXVpY2sgcmV2aWV3IG9mIGBwcm9jX2ludF9jb252YCBhbmQgYHByb2NfdWxvbmdfY29udmAgdGhlbXNlbHZlcyBzaG93IHRoYXQgdGhleSB1c2UgdGVtcG9yYXJ5IHZhcmlhYmxlcyAoYHRtcF9rYCkgKmJlZm9yZSogYW55IGJvdW5kcyBjaGVja3Mgb3IgYXNzaWdubWVudHMsIGFuZCB0aGF0IHRoZXNlIGFyZSBwb3B1bGF0ZWQgYnkgYHVzZXJfdG9fa2VybigpYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCwgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gVGhlcmUgYXJlbid0IGFueSBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFBhZGRpbmcsIHN0cnVjdHMsIGFuZCBkeW5hbWljIGJ1ZmZlciBzaXplcyBhcmUgYWxsIHVudG91Y2hlZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgbGVha3MuXG5cbk5leHQsIEkgY29uc2lkZXJlZCB3aGV0aGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbmVjZXNzYXJ5IGhlcmUsIGFuZCBjb21wYXJlZCBpdCB0byBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKS4gS01TQU4gaXMgY29uY2VybmVkIHdpdGggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8gbGVha3MsIHdoZXJlYXMgS0FTQU4gY292ZXJzIHRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuIEdpdmVuIHRoZSBwYXRjaCdzIGZvY3VzIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsdWUgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIHN5c2N0bCBoYW5kbGVycywgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBpbnRyb2R1Y2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGFkZHJlc3NpbmcgaW50ZWdlciBhbmQgdWxvbmcgY29udmVyc2lvbiBib3VuZHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuSGVyZSdzIG15IGNsZWFyIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGZ1bmN0aW9ucywgZW5hYmxpbmcgbW9yZSByb2J1c3QgbWluL21heCByYW5nZSBjaGVja3MsIGFuZCBpdCBhZGRzIGFuIG92ZXJmbG93IGNoZWNrLiBNZW1vcnkgc2FmZXR5IGlzIGFzc3VyZWQgYmVjYXVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyB3cml0dGVuIHRvICpiZWZvcmUqIGJlaW5nIHVzZWQgb3IgY29tcGFyZWQsIGFuZCB0aGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uIG9yIGNvcHlpbmcgb2Yga2VybmVsIG1lbW9yeSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIHJlYWQgb3IgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhay4gU2luY2UgdGhlIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsdWUgdmFsaWRhdGlvbiwgc3RhbmRhcmQgS0FTQU4gdGVzdGluZyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IGFzcGVjdHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cblxuTm93IEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjc3LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE4OjMyOjA2LjI1Njk4NzI1N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3lzY3RsIGNvbnZlcnNpb24gaGFuZGxlcnMgKHByb2NfZG9pbnR2ZWNfbXNfamlmZmllc19taW5tYXggYW5kIHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkgdG8gcHJvcGVybHkgcGVyZm9ybSBtaW4vbWF4IHJhbmdlIGNoZWNrcyAoZW5hYmxpbmcga19wdHJfcmFuZ2VfY2hlY2s9dHJ1ZSBpbiBwcm9jX2ludF9jb252IGFuZCBwcm9jX3Vsb25nX2NvbnYpIGFuZCBhZGRzIGFuIElOVF9NQVggdmFsaWRhdGlvbiBjaGVjayBpbiBzeXNjdGxfdTJrX3Vsb25nX2NvbnZfbXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBpbnRyb2R1Y2UgYm91bmRzL3JhbmdlIHZhbGlkYXRpb24gZm9yIHN5c2N0bCBzY2FsYXIgaW50ZWdlciB2YWx1ZXMuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycywgc3RydWN0IHBhZGRpbmdzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgYWxsb2NhdGVkLCBtb2RpZmllZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQWxsIHZhcmlhYmxlcyB1c2VkIGluIGNvbnZlcnNpb24gKGUuZy4gdGVtcG9yYXJ5IGludGVnZXJzKSBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgZXZhbHVhdGVkIG9yIGFzc2lnbmVkLiBDb25zZXF1ZW50bHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5c2N0bCBjb252ZXJzaW9uIGhhbmRsZXJzIChwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4IGFuZCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgpIHRvIHByb3Blcmx5IHBlcmZvcm0gbWluL21heCByYW5nZSBjaGVja3MgKGVuYWJsaW5nIGtfcHRyX3JhbmdlX2NoZWNrPXRydWUgaW4gcHJvY19pbnRfY29udiBhbmQgcHJvY191bG9uZ19jb252KSBhbmQgYWRkcyBhbiBJTlRfTUFYIHZhbGlkYXRpb24gY2hlY2sgaW4gc3lzY3RsX3Uya191bG9uZ19jb252X21zLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgaW50cm9kdWNlIGJvdW5kcy9yYW5nZSB2YWxpZGF0aW9uIGZvciBzeXNjdGwgc2NhbGFyIGludGVnZXIgdmFsdWVzLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMsIHN0cnVjdCBwYWRkaW5ncywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIGFsbG9jYXRlZCwgbW9kaWZpZWQsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb252ZXJzaW9uIChlLmcuIHRlbXBvcmFyeSBpbnRlZ2VycykgYXJlIHdyaXR0ZW4gYmVmb3JlIGJlaW5nIGV2YWx1YXRlZCBvciBhc3NpZ25lZC4gQ29uc2VxdWVudGx5LCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[1] Phase: Succeeded StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 18:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 18:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2] Phase: Succeeded StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 18:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 18:32:17 +0000 UTC FinishedAt: 2026-09-06 18:32:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdsqgc/series-workflowdsqgc-convert-artifact-1497314863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 18:32:27 +0000 UTC FinishedAt: 2026-09-06 18:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 18:32:27 +0000 UTC FinishedAt: 2026-09-06 18:49:54 +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:*0376b63d-c5c2-4ba7-b868-e6459ed4c225,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-workflowdsqgc/series-workflowdsqgc-convert-artifact-1497314863/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": "ac345f14-5fce-48d3-857c-01e9faa33de9", "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-workflowdsqgc/series-workflowdsqgc-build-action-4218207221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 18:32:27 +0000 UTC FinishedAt: 2026-09-06 18:49:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0376b63d-c5c2-4ba7-b868-e6459ed4c225,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-workflowdsqgc/series-workflowdsqgc-convert-artifact-1497314863/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": "ac345f14-5fce-48d3-857c-01e9faa33de9", "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-workflowdsqgc/series-workflowdsqgc-build-action-4218207221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 18:49:54 +0000 UTC FinishedAt: 2026-09-06 18:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 18:49:54 +0000 UTC FinishedAt: 2026-09-06 18:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 18:49:54 +0000 UTC FinishedAt: 2026-09-06 18:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 18:49:54 +0000 UTC FinishedAt: 2026-09-06 18:49:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdsqgc/series-workflowdsqgc-convert-artifact-2838309758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 18:50:04 +0000 UTC FinishedAt: 2026-09-06 18:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 18:50:04 +0000 UTC FinishedAt: 2026-09-06 18:51:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac345f14-5fce-48d3-857c-01e9faa33de9,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-workflowdsqgc/series-workflowdsqgc-build-action-4218207221/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-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 18:51:36 +0000 UTC FinishedAt: 2026-09-06 18:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 18:51:36 +0000 UTC FinishedAt: 2026-09-06 18:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 18:51:36 +0000 UTC FinishedAt: 2026-09-06 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 18:51:36 +0000 UTC FinishedAt: 2026-09-06 19:07:53 +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:*0376b63d-c5c2-4ba7-b868-e6459ed4c225,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-workflowdsqgc/series-workflowdsqgc-convert-artifact-2838309758/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": "de2f6ca7-73d9-44e7-a91b-b1b98e202fc9", "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-workflowdsqgc/series-workflowdsqgc-build-action-1638135762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 18:51:36 +0000 UTC FinishedAt: 2026-09-06 19:07:43 +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:*0376b63d-c5c2-4ba7-b868-e6459ed4c225,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-workflowdsqgc/series-workflowdsqgc-convert-artifact-2838309758/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": "de2f6ca7-73d9-44e7-a91b-b1b98e202fc9", "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-workflowdsqgc/series-workflowdsqgc-build-action-1638135762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 19:07:53 +0000 UTC FinishedAt: 2026-09-06 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 19:07:53 +0000 UTC FinishedAt: 2026-09-06 19:07:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 19:07:53 +0000 UTC FinishedAt: 2026-09-06 19:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 19:07:53 +0000 UTC FinishedAt: 2026-09-06 19:10:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de2f6ca7-73d9-44e7-a91b-b1b98e202fc9,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-workflowdsqgc/series-workflowdsqgc-build-action-1638135762/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-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"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:*ac345f14-5fce-48d3-857c-01e9faa33de9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de2f6ca7-73d9-44e7-a91b-b1b98e202fc9,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-workflowdsqgc/series-workflowdsqgc-build-action-4218207221/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-workflowdsqgc/series-workflowdsqgc-build-action-1638135762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 19:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 19:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"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-workflowdsqgc/series-workflowdsqgc-convert-artifact-4237897603/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 19:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 19:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 19:10:29 +0000 UTC FinishedAt: 2026-09-06 19:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 19:10:39 +0000 UTC FinishedAt: 2026-09-06 22:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdsqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["proc_doulongvec_ms_jiffies_minmax","proc_dointvec_ms_jiffies_minmax"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSCTL"],"series_id":"8df0e9e8-9874-4bb5-9c0e-7735456eb071","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 19:10:39 +0000 UTC FinishedAt: 2026-09-06 22:12:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac345f14-5fce-48d3-857c-01e9faa33de9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de2f6ca7-73d9-44e7-a91b-b1b98e202fc9,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-workflowdsqgc/series-workflowdsqgc-build-action-4218207221/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-workflowdsqgc/series-workflowdsqgc-build-action-1638135762/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-workflowdsqgc/series-workflowdsqgc-convert-artifact-4237897603/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,}