Name: series-workflowwt4gx Phase: Succeeded StartedAt: 2026-08-20 05:37:43 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[0] Phase: Succeeded StartedAt: 2026-08-20 05:37:43 +0000 UTC FinishedAt: 2026-08-20 06:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 05:37:43 +0000 UTC FinishedAt: 2026-08-20 06:10:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9bb628b2-bbc7-4cf6-815a-e3d4ab08357b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_mb_release", "ext4_process_freed_data", "ext4_init_fs_context" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9pbml0X2ZzX2NvbnRleHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IG1vdW50IHRvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIHJlbGVhc2luZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIChgZXh0NF9tYl9yZWxlYXNlYCkuIFRoaXMgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVyZSBgc19kaXNjYXJkX3dvcmtgIGNvdWxkIGJlIHJlLWFybWVkIGJ5IHRoZSBsYXN0IGNvbW1pdC4gVGhpcyB0eXBlIG9mIGJ1ZyAodXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGlzIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCA0YjYxMTJlNWQ2YzU5Li41OGIyMTA2MzdiNTdiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01NzYxLDYgJiM0Mzs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gZmFpbGVkX21vdW50NzpcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiBmYWlsZWRfbW91bnQ2OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG4mIzQzO1x0ICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbiYjNDM7XHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuIFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50NTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTFjZTE1Y2UxMmQ4NTZmYmM4NGQyNTI5YjQ0MmQ4NTU4M2RlMjNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA4OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDRiNjExMmU1ZDZjNTkuLjU4YjIxMDYzN2I1N2IgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTU3NjEsNiAmIzQzOzU3NjEsMTIgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIGZhaWxlZF9tb3VudDc6CiAJZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpOwogZmFpbGVkX21vdW50NjoKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlCiYjNDM7CSAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2JpLSZndDtzX2pvdXJuYWwpCiYjNDM7CQlleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKTsKIAlleHQ0X21iX3JlbGVhc2Uoc2IpOwogCWV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpOwogZmFpbGVkX21vdW50NToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBleHQ0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgbW91bnQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGQgYSBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgd2l0aCB0aGUgYXJndW1lbnRzIGBzYmlgIGFuZCBgc2JpLSZndDtzX2pvdXJuYWxgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBjbGVhbmluZyB1cCBhIGpvdXJuYWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBlcmJsb2NrLCBsaWtlbHkgd2hlbiBhIG1vdW50IG9wZXJhdGlvbiBoYXMgZmFpbGVkLiBUaGUgbGFiZWwgYGZhaWxlZF9tb3VudDZgIGlzIGEgZGVjZW50IGNsdWU7IHRoYXQgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGNhbGwgaXMgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBlcnJvciBwYXRoIG9mIGBleHQ0X2ZpbGxfc3VwZXJgLCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgNTc2MSBhbmQgc2VlIHByZWNpc2VseSB3aGVyZSB0aGlzIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaXMgYmVpbmcgaW5qZWN0ZWQsIHdoYXQgb3RoZXIgY29udGV4dHVhbCBjb2RlIGlzIGFyb3VuZCBpdCwgYW5kIHdoYXQgZmFpbHVyZSBzY2VuYXJpb3MgaXQmIzM5O3MgaW50ZW5kZWQgdG8gaGFuZGxlLiBJdCYjMzk7cyBhIGNsZWFudXAgc3RlcDsgaG9wZWZ1bGx5LCBpdCBwcmV2ZW50cyByZXNvdXJjZSBsZWFrcyBvciBjb3JydXB0aW9uIGlmIHRoZSBtb3VudCBmYWlscyBtaWQtb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhaWxlZF9tb3VudDY6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjItXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG5mcy9leHQ0L3N1cGVyLmM6NTc2MzpmYWlsZWRfbW91bnQ2OlxuZnMvZXh0NC9zdXBlci5jLTU3NjQtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGluLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIHRob3VnaCB0aGUgdGhvdWdodHMgYXJlIG15IG93bjoKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIENvbnRleHQqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCBpcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGV4cGVjdGVkIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgJiMzNDt3aHkmIzM0OyB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIGhvdyBJIGRpc3NlY3QgdGhlICYjMzQ7aG93JiMzNDsuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBvdGhlcnMsIGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYWlsZWRfbW91bnQ2OiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzYyLVx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjU3NjM6ZmFpbGVkX21vdW50NjpcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWxseSBVbnVzZWQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgb3V0cHV0IGZyb20sIHByb2JhYmx5LCBhIGJ1aWxkIG9yIGFuYWx5c2lzIHRvb2wsIGFuZCBpdCBsb29rcyBsaWtlIGAtLXNob3ctZnVuY3Rpb25gIGlzIHRoZSBjdWxwcml0LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGRlZmF1bHQsIHNvIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuIEhvd2V2ZXIsIHRoZSBvdXRwdXQgaXMgZmxhZ2dpbmcgYGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkYC4gSG1tLCB0aGF0JiMzOTtzIG5vdCBpZGVhbC4gQSAmIzM0O21heWJlX3VudXNlZCYjMzQ7IGF0dHJpYnV0ZSBzaG91bGRuJiMzOTt0IGJlIHNob3dpbmcgdXAgaWYgdGhlIGZ1bmN0aW9uICppcyogYWN0dWFsbHkgdXNlZCwgcmlnaHQ/IFRoZSB0b29sICpzaG91bGQqIGJlIGV4Y2x1ZGluZyB0cnVseSB1bnVzZWQgZnVuY3Rpb25zLiBTbywgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodCB3aXRoIGl0cyBhbmFseXNpcy4KCkkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSB0b29sIHRoaW5rcyBpcyBnb2luZyBvbi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY29uZmlybSBpdCBteXNlbGYuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgZnVuY3Rpb24mIzM5O3MgdXNlLiBSZWFkaW5nIHRoZSBjb2RlIGlzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCByb3V0ZSBoZXJlLCBsaWtlbHkgaW52b2x2aW5nIGdyZXBwaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgY2hlY2tpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgb3IgdHJ1bHkgdW51c2VkIGFuZCB3cm9uZ2x5IGZsYWdnZWQsIGJlY2F1c2UgdGhpcyBjYW4gcG9pbnQgdG8gYSBkZWVwZXIgaXNzdWUgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBhIHRvb2wsIG9yIGV2ZW4gYSBzdWJ0bGUgZXJyb3IgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzAwOlx0XHRcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XG41NzAxOlx0XHRcdGlmIChlcnIpXG41NzAyOlx0XHRcdFx0Z290byBmYWlsZWRfbW91bnQ4O1xuNTcwMzpcdFx0fVxuNTcwNDpcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXG41NzA1Olx0XG41NzA2Olx0XHQvKlxuNTcwNzpcdFx0ICogU2F2ZSB0aGUgb3JpZ2luYWwgYmRldiBtYXBwaW5nJiMzOTtzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxuNTcwODpcdFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxuNTcwOTpcdFx0ICovXG41NzEwOlx0XHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXHUwMDI2c2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX21hcHBpbmctXHUwMDNld2JfZXJyLFxuNTcxMTpcdFx0XHRcdFx0IFx1MDAyNnNiaS1cdTAwM2VzX2JkZXZfd2JfZXJyKTtcbjU3MTI6XHRcdEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgfD0gRVhUNF9PUlBIQU5fRlM7XG41NzEzOlx0XHRleHQ0X29ycGhhbl9jbGVhbnVwKHNiLCBlcyk7XG41NzE0Olx0XHRFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xuNTcxNTpcdFx0LypcbjU3MTY6XHRcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcbjU3MTc6XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcbjU3MTg6XHRcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXG41NzE5Olx0XHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxuNTcyMDpcdFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cbjU3MjE6XHRcdCAqL1xuNTcyMjpcdFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcbjU3MjM6XHRcdGlmIChuZWVkc19yZWNvdmVyeSkge1xuNTcyNDpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZWNvdmVyeSBjb21wbGV0ZVwmIzM0Oyk7XG41NzI1Olx0XHRcdGVyciA9IGV4dDRfbWFya19yZWNvdmVyeV9jb21wbGV0ZShzYiwgZXMpO1xuNTcyNjpcdFx0XHRpZiAoZXJyKVxuNTcyNzpcdFx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3Mjg6XHRcdH1cbjU3Mjk6XHRcbjU3MzA6XHRcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXHUwMDI2XHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXHUwMDNlc19iZGV2KSkge1xuNTczMTpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuNTczMjpcdFx0XHRcdCBcJiMzNDttb3VudGluZyB3aXRoIFxcXCYjMzQ7ZGlzY2FyZFxcXCYjMzQ7IG9wdGlvbiwgYnV0IHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBkaXNjYXJkXCYjMzQ7KTtcbjU3MzM6XHRcdFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcbjU3MzQ6XHRcdH1cbjU3MzU6XHRcbjU3MzY6XHRcdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG41NzM3Olx0XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xuNTczODpcdFx0XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCxcbjU3Mzk6XHRcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbjU3NDA6XHRcdH1cbjU3NDE6XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gMjQqNjAqNjA7IC8qIE9uY2UgYSBkYXkgKi9cbjU3NDI6XHRcbjU3NDM6XHRcdC8qIEVuYWJsZSBtZXNzYWdlIHJhdGVsaW1pdGluZy4gRGVmYXVsdCBpcyAxMCBtZXNzYWdlcyBwZXIgNSBzZWNzLiAqL1xuNTc0NDpcdFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XG41NzQ1Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc193YXJuaW5nX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XG41NzQ2Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc19tc2dfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NDc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2JpLVx1MDAzZXNfd2FybmluZ19jb3VudCwgMCk7XG41NzQ4Olx0XHRhdG9taWNfc2V0KFx1MDAyNnNiaS1cdTAwM2VzX21zZ19jb3VudCwgMCk7XG41NzQ5Olx0XG41NzUwOlx0XHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cbjU3NTE6XHRcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xuNTc1MjpcdFx0aWYgKGVycilcbjU3NTM6XHRcdFx0Z290byBmYWlsZWRfbW91bnQ5O1xuNTc1NDpcdFxuNTc1NTpcdFx0cmV0dXJuIDA7XG41NzU2Olx0XG41NzU3Olx0ZmFpbGVkX21vdW50OTpcbjU3NTg6XHRcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuNTc1OTpcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG41NzYwOlx0XHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuNTc2MTpcdGZhaWxlZF9tb3VudDc6XG41NzYyOlx0XHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG41NzYzOlx0ZmFpbGVkX21vdW50NjpcbjU3NjQ6XHRcdC8qXG41NzY1Olx0XHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcbjU3NjY6XHRcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG41NzY3Olx0XHQgKi9cbjU3Njg6XHRcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKVxuNTc2OTpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTc3MDpcdFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbjU3NzE6XHRcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuNTc3MjpcdGZhaWxlZF9tb3VudDU6XG41NzczOlx0XHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XG41Nzc0Olx0XHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbjU3NzU6XHRcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XG41Nzc2Olx0ZmFpbGVkX21vdW50NGE6XG41Nzc3Olx0XHRkcHV0KHNiLVx1MDAzZXNfcm9vdCk7XG41Nzc4Olx0XHRzYi1cdTAwM2VzX3Jvb3QgPSBOVUxMO1xuNTc3OTpcdGZhaWxlZF9tb3VudDQ6XG41NzgwOlx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFwmIzM0O21vdW50IGZhaWxlZFwmIzM0Oyk7XG41NzgxOlx0XHRpZiAoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXG41NzgyOlx0XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbjU3ODM6XHRmYWlsZWRfbW91bnRfd3E6XG41Nzg0Olx0XHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuNTc4NTpcdFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuNTc4NjpcdFxuNTc4NzpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcbjU3ODg6XHRcdHNiaS1cdTAwM2VzX2VhX2Jsb2NrX2NhY2hlID0gTlVMTDtcbjU3ODk6XHRcbjU3OTA6XHRcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKSB7XG41NzkxOlx0XHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG41NzkyOlx0XHR9XG41NzkzOlx0ZmFpbGVkX21vdW50M2E6XG41Nzk0Olx0XHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbjU3OTU6XHRmYWlsZWRfbW91bnQzOlxuNTc5NjpcdFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbjU3OTc6XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuNTc5ODpcdFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbjU3OTk6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGluaXRpYWxpemluZyBhbiBleHQ0IGZpbGVzeXN0ZW0sIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUga2VybmVsIHN0YXJ0cyB0cmFuc2xhdGluZyB0aGUgcmF3IGJsb2NrIGRldmljZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gYWN0dWFsbHkgd29yayB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGVudGlyZSBwcm9jZXNzIGtpY2tzIG9mZi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBnb2VzIGZyb20gYSByYXcgZGV2aWNlIHRvIGEgbW91bnRhYmxlIGZpbGVzeXN0ZW0gc3RydWN0dXJlLiBJIGJldHRlciB0cmFjZSB0aGUgY2FsbCBncmFwaCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBzZXRzIGl0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzNDUtXG5mcy9leHQ0L3N1cGVyLmM6NTM0NjpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MzQ3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTgyMj1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4NDEtXG5mcy9leHQ0L3N1cGVyLmM6NTg0MjpcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTg0My1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXh0NCBKb3VybmFsIERlc3RydWN0aW9uIC0gQSBRdWVzdGlvbiBvZiBSZWR1bmRhbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgaXQmIzM5O3MgYWRkaW5nIGBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKWAgYXQgYGZhaWxlZF9tb3VudDY6YC4gRmFpciBlbm91Z2gsIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGNsZWFuIHVwIGlmIHRoZSBtb3VudCBmYWlscy4gQnV0IHRoZW4sIEkgc2VlIGFub3RoZXIgY2FsbCB0byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktJmd0O3Nfam91cm5hbClgIGxhdGVyIG9uLCBhdCBgZmFpbGVkX21vdW50X3dxOmAuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuIElmIGBmYWlsZWRfbW91bnQ2OmAgaXMgaGl0LCBzaG91bGRuJiMzOTt0IGBzYmktJmd0O3Nfam91cm5hbGAgYmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGUgZmlyc3QgYGV4dDRfam91cm5hbF9kZXN0cm95YCBjYWxsPyBPdGhlcndpc2UsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBkZXN0cm95aW5nIHRoZSBqb3VybmFsIHR3aWNlLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcyDigJMgZG91YmxlLWZyZWVzLCBjb3JydXB0aW9uLCB0aGUgd29ya3MuIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHRvIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGRvdWJsZSBkZXN0cnVjdGlvbiBncmFjZWZ1bGx5LCBidXQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpc24mIzM5O3QuCgpUaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGNhc2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoaXMgc2NlbmFyaW8uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmaXJzdCBkZXN0cnVjdGlvbiBpcyBoYW5kbGVkLCBhbmQgdGhlIHNlY29uZCBpcyBza2lwcGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzEyLVx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjEzMTM6XHRcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cdFx0aWYgKChlcnIgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAhYWJvcnRlZCkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XG5mcy9leHQ0L3N1cGVyLmM6NTA0NDpcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA0NS1cdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbmZzL2V4dDQvc3VwZXIuYzo1NzY5Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzAtXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzkwLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbmZzL2V4dDQvc3VwZXIuYzo1NzkxOlx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3OTItXHR9XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYwOTYtb3V0X2pvdXJuYWw6XG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcbmZzL2V4dDQvc3VwZXIuYy02MDk4LW91dF9iZGV2OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cdGlmIChlcnIpIHtcbmZzL2V4dDQvc3VwZXIuYzo2MjE0Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIxNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcG9pbnRzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgam91cm5hbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBoYW5kbGVzIHRoZSBqb3VybmFsIGlub2RlLCBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBqb3VybmFsLCBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIG9uLWRpc2sgam91cm5hbCBtZXRhZGF0YS4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb246CgoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBkZXN0cnVjdGlvbiwgcGFydGljdWxhcmx5IGlmIHRoZSBmaWxlc3lzdGVtIGlzIHN0aWxsIGFjdGl2ZT8gV2hhdCBsb2NrcyBhcmUgdXNlZCwgYW5kIHdoYXQmIzM5O3MgdGhlaXIgc2NvcGU/IElzIHRoZXJlIGEgcmlzayBvZiBkZWFkbG9jaz8KKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBEb2VzIGl0IGVuc3VyZSBhbGwgam91cm5hbCBibG9ja3MgYXJlIHByb3Blcmx5IHJlbGVhc2VkIGJhY2sgdG8gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzPyBEb2VzIGl0IGNvcnJlY3RseSBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wbGV0ZSBjbGVhbnVwIG9yIGRhbmdsaW5nIHBvaW50ZXJzPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgZXJyb3JzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzPyBXaGF0IGhhcHBlbnMgaWYgaXQgZW5jb3VudGVycyBhIHdyaXRlIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNsZWFyIG1ldGFkYXRhIG9uIGRpc2s/IElzIHRoZXJlIGEgZ3JhY2VmdWwgZmFsbGJhY2sgbWVjaGFuaXNtPwoqICAgKipUcmFuc2FjdGlvbiBIYW5kbGluZzoqKiBEb2VzIGl0IGNvcnJlY3RseSBmbHVzaCBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSBkZWFsbG9jYXRpbmcgdGhlIGpvdXJuYWw/IEFyZSB0aGVyZSBzY2VuYXJpb3Mgd2hlcmUgYSB0cmFuc2FjdGlvbiBtaWdodCBiZSBsZWZ0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZGVzdHJveSBwcm9jZXNzIGlzIGludGVycnVwdGVkPwoqICAgKipJbm9kZSBIYW5kbGluZzoqKiBIb3cgaXMgdGhlIGpvdXJuYWwgaW5vZGUgaGFuZGxlZD8gRG9lcyBpdCBwcm9wZXJseSB1cGRhdGUgdGhlIGlub2RlJiMzOTtzIHN0YXRlIHRvIHJlZmxlY3QgdGhhdCB0aGUgam91cm5hbCBpcyBnb25lPyBBbnkgY29uc2lkZXJhdGlvbnMgYXJvdW5kIHRoZSBsYXN0IG1vdW50IHRpbWUsIHdoaWNoIG1pZ2h0IG5lZWQgdG8gYmUgY2xlYXJlZD8KKiAgICoqUGVyc2lzdGVuY2U6KiogRG9lcyBpdCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBmdW5jdGlvbiBhcmUgcGVyc2lzdGVkIHRvIGRpc2sgdG8gZ3VhcmFudGVlIGEgY29uc2lzdGVudCBmaWxlc3lzdGVtIHN0YXRlIGFmdGVyIGEgcmVib290PwoqICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gdGhlIGZpbGVzeXN0ZW0gbGlmZWN5Y2xlPyBJcyB0aGVyZSBhIGNsZWFuIGNhbGwtY2hhaW4gZm9yIHRoaXMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/CgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHJvYnVzdCB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgZmlsZXN5c3RlbSBpbnN0YWJpbGl0eSwgd2hpY2ggSSBjYW4gdGhlbiBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBhbnkga25vd24gaXNzdWVzLCBvciBDVkUmIzM5O3MgcmVsYXRpbmcgdG8gam91cm5hbCBkZXN0cnVjdGlvbiBpbiBleHQ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9qYmQyLmg9NDE2PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuaC00MzUtICovXG5mcy9leHQ0L2V4dDRfamJkMi5oOjQzNjpzdGF0aWMgaW5saW5lIGludCBleHQ0X2pvdXJuYWxfZGVzdHJveShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIGpvdXJuYWxfdCAqam91cm5hbClcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzEyLVx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjEzMTM6XHRcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cdFx0aWYgKChlcnIgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAhYWJvcnRlZCkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XG5mcy9leHQ0L3N1cGVyLmM6NTA0NDpcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA0NS1cdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbmZzL2V4dDQvc3VwZXIuYzo1NzY5Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzAtXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzkwLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbmZzL2V4dDQvc3VwZXIuYzo1NzkxOlx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3OTItXHR9XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYwOTYtb3V0X2pvdXJuYWw6XG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcbmZzL2V4dDQvc3VwZXIuYy02MDk4LW91dF9iZGV2OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cdGlmIChlcnIpIHtcbmZzL2V4dDQvc3VwZXIuYzo2MjE0Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIxNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGV4dDRfam91cm5hbF9kZXN0cm95YC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGBmcy9leHQ0L2V4dDRfamJkMi5oYC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgam91cm5hbCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZm9yIGV4dDQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBzeXN0ZW0gdW5tb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiBqb3VybmFsIHJlcGxheSBhZnRlciBhIGNyYXNoLiBJJiMzOTttIGhvcGluZyB0byBzZWUgdGhlIHNwZWNpZmljIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZGVhbGxvY2F0aW5nIHRoZSBqb3VybmFsIG1ldGFkYXRhLCBmcmVlaW5nIGFzc29jaWF0ZWQgYnVmZmVycywgYW5kIGVuc3VyaW5nIHRoYXQgbm8gbGluZ2VyaW5nIHJlc291cmNlcyBjb21wcm9taXNlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBqYmQyIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHR9XG4gNDMxOlx0XG4gNDMyOlx0LypcbiA0MzM6XHQgKiBQYXNzIGpvdXJuYWwgZXhwbGljaXRseSBhcyBpdCBtYXkgbm90IGJlIGNhY2hlZCBpbiB0aGUgc2JpLVx1MDAzZXNfam91cm5hbCBpbiBzb21lXG4gNDM0Olx0ICogY2FzZXNcbiA0MzU6XHQgKi9cbiA0MzY6XHRzdGF0aWMgaW5saW5lIGludCBleHQ0X2pvdXJuYWxfZGVzdHJveShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIGpvdXJuYWxfdCAqam91cm5hbClcbiA0Mzc6XHR7XG4gNDM4Olx0XHRpbnQgZXJyID0gMDtcbiA0Mzk6XHRcbiA0NDA6XHRcdC8qXG4gNDQxOlx0XHQgKiBBdCB0aGlzIHBvaW50IG9ubHkgdHdvIHRoaW5ncyBjYW4gYmUgb3BlcmF0aW5nIG9uIHRoZSBqb3VybmFsLlxuIDQ0MjpcdFx0ICogSkJEMiB0aHJlYWQgcGVyZm9ybWluZyB0cmFuc2FjdGlvbiBjb21taXQgYW5kIHNfc2JfdXBkX3dvcmtcbiA0NDM6XHRcdCAqIGlzc3Vpbmcgc2IgdXBkYXRlIHRocm91Z2ggdGhlIGpvdXJuYWwuIE9uY2Ugd2Ugc2V0XG4gNDQ0Olx0XHQgKiBFWFQ0X0pPVVJOQUxfREVTVFJPWSwgbmV3IGV4dDRfaGFuZGxlX2Vycm9yKCkgY2FsbHMgd2lsbCBub3RcbiA0NDU6XHRcdCAqIHF1ZXVlIHNfc2JfdXBkX3dvcmsgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgbWFrZXMgc3VyZSBhbnlcbiA0NDY6XHRcdCAqIGV4dDRfaGFuZGxlX2Vycm9yKCkgY2FsbHMgZnJvbSB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiBjb21taXQgYXJlXG4gNDQ3Olx0XHQgKiBmaW5pc2hlZC4gSGVuY2Ugbm8gbmV3IHNfc2JfdXBkX3dvcmsgY2FuIGJlIHF1ZXVlZCBhZnRlciB3ZVxuIDQ0ODpcdFx0ICogZmx1c2ggaXQgaGVyZS5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0ZXh0NF9zZXRfbW91bnRfZmxhZyhzYmktXHUwMDNlc19zYiwgRVhUNF9NRl9KT1VSTkFMX0RFU1RST1kpO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0ZXh0NF9mb3JjZV9jb21taXQoc2JpLVx1MDAzZXNfc2IpO1xuIDQ1MzpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19zYl91cGRfd29yayk7XG4gNDU0Olx0XG4gNDU1Olx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfZGVzdHJveShqb3VybmFsKTtcbiA0NTY6XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0cmV0dXJuIGVycjtcbiA0NTk6XHR9XG4gNDYwOlx0XG4gNDYxOlx0I2VuZGlmXHQvKiBfRVhUNF9KQkQyX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpvdXJuYWwgRGVzdHJ1Y3Rpb24gaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGZ1bmN0aW9uIGFuZCBJIHNlZSBpdCYjMzk7cyBzZXR0aW5nIGBzYmktJmd0O3Nfam91cm5hbCA9IE5VTEw7YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBqb3VybmFsIG1pZ2h0IGJlIGFjY2Vzc2VkIGFmdGVyIGl0JiMzOTtzIGJlZW4gZGVzdHJveWVkLiBUaGUgcGF0aCB0byB0aGUgaXNzdWUgbG9va3MgdG8gYmUgYGZhaWxlZF9tb3VudDY6YCB3aGljaCwgaWYgdHJpZ2dlcmVkLCB3b3VsZCBsZWFkIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgYmVpbmcgY2FsbGVkLiBUaGVuLCBpZiBzb21ldGhpbmcgaW4gYGZhaWxlZF9tb3VudF93cTpgIGxhdGVyIHRyaWVzIHRvIHVzZSB0aGUgam91cm5hbCwgd2UmIzM5O3JlIGluIHRyb3VibGUuCgpIbW0sIHRoZSBjb21tZW50cyBzYXkgdGhhdCB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIGBleHQ0X21iX3JlbGVhc2Uoc2IpYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbWVudCBub3RlcywgJiMzNDtUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC4mIzM0OyBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nOiBTbywgYGV4dDRfbWJfcmVsZWFzZShzYilgIGlzIHJlc3BvbnNpYmxlIGZvciBmbHVzaGluZywgYW5kIHRoYXQgZmx1c2hpbmcgY2FuIHJlLWFybSBgc19kaXNjYXJkX3dvcmtgLCB3aGljaCwgaWYgdGhlIGpvdXJuYWwgaXMgYWxyZWFkeSBkZXN0cm95ZWQsIHdpbGwgY2F1c2UgYSBjcmFzaC4gUmlnaHQ/IFRoZSBjb21taXQgaW1wbGllcyBgZXh0NF9tYl9yZWxlYXNlYCBpcyBmbHVzaGluZyBgc19kaXNjYXJkX3dvcmtgLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGBleHQ0X21iX3JlbGVhc2VgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLiBHb3R0YSBkaWcgZGVlcGVyIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMwOTM9ZXh0ZXJuIGludCBleHQ0X21iX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuZnMvZXh0NC9leHQ0LmgtMzA5NS1leHRlcm4gZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTE1LWVycl9tYl9yZWxlYXNlOlxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTctZXJyX291dDpcbi0tXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTEyMz1zdGF0aWMgdm9pZCBtYnRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MTI3Olx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVx0a2ZyZWUoc2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX3F1ZXVlKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0yMjM3PXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2Jlc3RfZm91bmQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0yMjYyLVx0ICogZG91YmxlIGFsbG9jYXRlIGJsb2Nrcy4gVGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlx0ICogaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTIyNjQtXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0zODcxPXN0YXRpYyBpbnQgZXh0NF9tYl9jbGVhbnVwX3BhKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdycClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0zODg1LVxuZnMvZXh0NC9tYmFsbG9jLmM6Mzg4Njp2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDY4NT1zdGF0aWMgdm9pZCBleHQ0X21iX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00NzIwLSAqIGNvbnRleHQuICBXZSBkb24mIzM5O3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXG5mcy9leHQ0L21iYWxsb2MuYzo0NzIxOiAqIHBhX2ZyZWUgaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoKSwgYnV0IG9uIGZhaWx1cmUsIHdlJiMzOTt2ZSBhbHJlYWR5XG5mcy9leHQ0L21iYWxsb2MuYy00NzIyLSAqIHplcm9lZCBvdXQgYWMtXHUwMDNlYWNfYl9leC5mZV9sZW4sIHNvIGdyb3VwX3BhLVx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDc5MD1zdGF0aWMgdm9pZCBleHQ0X21iX3VzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTQ4MDQtXHQgKiBpbnN0ZWFkIHdlIGNvcnJlY3QgcGEgbGF0ZXIsIGFmdGVyIGJsb2NrcyBhcmUgbWFya2VkXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1Olx0ICogaW4gb24tZGlzayBiaXRtYXAgLS0gc2VlIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KClcbmZzL2V4dDQvbWJhbGxvYy5jLTQ4MDYtXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ4NzY9ZXh0NF9tYl91c2VfcHJlYWxsb2NhdGVkKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTAxOS1cdFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcbmZzL2V4dDQvbWJhbGxvYy5jOjUwMjA6XHRcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy01MDIxLVx0XHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01MzUxPWV4dDRfbWJfbmV3X2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTM5NS1cdCAqIFdlIHdpbGwgbGF0ZXIgYWRkIHRoZSBuZXcgcGEgdG8gdGhlIHJpZ2h0IGJ1Y2tldFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcdCAqIGFmdGVyIHVwZGF0aW5nIHRoZSBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy01Mzk3LVx0ICovXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQxNj1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQxOC1cdFx0XHRzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cdFx0dHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoc2IsIE5VTEwsIGdyb3VwLCBiaXQsIG5leHQgLSBiaXQpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcdFx0dHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHBhLCAoZ3JwX2Jsa19zdGFydCAmIzQzO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0Ny1cdFx0XHRcdFx0XHQgICAgRVhUNF9DMkIoc2JpLCBiaXQpKSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDY4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ2OTpleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYnVkZHkgKmU0YixcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXHRcdFx0XHRzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cbmZzL2V4dDQvbWJhbGxvYy5jOjU0NzY6XHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoc2IsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXHRCVUdfT04ocGEtXHUwMDNlcGFfZGVsZXRlZCA9PSAwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDk5PWV4dDRfbWJfZGlzY2FyZF9ncm91cF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXHRcdGlmIChwYS1cdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XG5mcy9leHQ0L21iYWxsb2MuYzo1NTgxOlx0XHRcdGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShcdTAwMjZlNGIsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXHRcdFx0Y2FsbF9yY3UoXHUwMDI2KHBhKS1cdTAwM2V1LnBhX3JjdSwgZXh0NF9tYl9wYV9jYWxsYmFjayk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVx0XHR9IGVsc2Uge1xuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcdFx0XHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXHUwMDI2ZTRiLCBiaXRtYXBfYmgsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODUtXHRcdFx0ZXh0NF9tYl9wYV9mcmVlKHBhKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NjA3PXZvaWQgZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cdFx0bGlzdF9kZWwoXHUwMDI2cGEtXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo1NzA0Olx0XHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXHUwMDI2ZTRiLCBiaXRtYXBfYmgsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXHRcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTkzNT1leHQ0X21iX2Rpc2NhcmRfbGdfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVx0XHRsaXN0X2RlbChcdTAwMjZwYS1cdTAwM2VwYV9ncm91cF9saXN0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjYwMDA6XHRcdGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShcdTAwMjZlNGIsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXHRcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjAxOD1zdGF0aWMgdm9pZCBleHQ0X21iX2FkZF9uX3RyaW0oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmM6NjA2NjpzdGF0aWMgdm9pZCBleHQ0X21iX3JlbGVhc2VfY29udGV4dChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuZnMvZXh0NC9tYmFsbG9jLmMtNjA2Ny17XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjIyOT1leHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cdH1cbmZzL2V4dDQvbWJhbGxvYy5jOjYzNTQ6XHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XG5mcy9leHQ0L21iYWxsb2MuYy02MzU1LVx0a21lbV9jYWNoZV9mcmVlKGV4dDRfYWNfY2FjaGVwLCBhYyk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NzI3Nz1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9mcmVlX2dyb3VwX2NsdXN0ZXJzX3NldCk7XG5mcy9leHQ0L21iYWxsb2MuYzo3Mjc4OkVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X21iX3JlbGVhc2UpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMjItXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjEzMjM6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTEzMjQtXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzY1LVx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG5mcy9leHQ0L3N1cGVyLmM6NTc2NjpcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG5mcy9leHQ0L3N1cGVyLmMtNTc2Ny1cdCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzY5LVx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjU3NzA6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzEtXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGV4dDRfbWJfcmVsZWFzZWAgaW4gYGZzL2V4dDQvbWJhbGxvYy5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcmVsZWFzZSBvZiBtZXRhZGF0YSBibG9ja3MuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgZXh0NCBibG9jayBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcHJvY2VzcywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgc3lzdGVtLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGl0IGltcGxlbWVudHMgdG8gZGVhbCB3aXRoIGluY29uc2lzdGVuY2llcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBmYW1pbGlhciB0ZXJyaXRvcnksIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIG1pZ2h0IGJlIG51YW5jZXMgdGhhdCBJIGNhbiBsZWFybiBmcm9tLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4ODA6XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuMzg4MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7XG4zODgyOlx0XHR9XG4zODgzOlx0XHRyZXR1cm4gY291bnQ7XG4zODg0Olx0fVxuMzg4NTpcdFxuMzg4NjpcdHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4zODg3Olx0e1xuMzg4ODpcdFx0ZXh0NF9ncm91cF90IG5ncm91cHMgPSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpO1xuMzg4OTpcdFx0ZXh0NF9ncm91cF90IGk7XG4zODkwOlx0XHRpbnQgbnVtX21ldGFfZ3JvdXBfaW5mb3M7XG4zODkxOlx0XHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm8sICoqKmdyb3VwX2luZm87XG4zODkyOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbjM4OTM6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZXRfZ3JvdXBpbmZvX2NhY2hlKHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuMzg5NDpcdFx0aW50IGNvdW50O1xuMzg5NTpcdFxuMzg5NjpcdFx0LypcbjM4OTc6XHRcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcbjM4OTg6XHRcdCAqL1xuMzg5OTpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuMzkwMDpcdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuMzkwMTpcdFxuMzkwMjpcdFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbjM5MDM6XHRcdGlmIChncm91cF9pbmZvKSB7XG4zOTA0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncm91cHM7IGkmIzQzOyYjNDM7KSB7XG4zOTA1Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zOTA2Olx0XHRcdFx0Z3JpbmZvID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgaSk7XG4zOTA3Olx0XHRcdFx0aWYgKCFncmluZm8pXG4zOTA4Olx0XHRcdFx0XHRjb250aW51ZTtcbjM5MDk6XHRcdFx0XHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xuMzkxMDpcdFx0XHRcdGV4dDRfbG9ja19ncm91cChzYiwgaSk7XG4zOTExOlx0XHRcdFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcbjM5MTI6XHRcdFx0XHRpZiAoY291bnQpXG4zOTEzOlx0XHRcdFx0XHRtYl9kZWJ1ZyhzYiwgXCYjMzQ7bWJhbGxvYzogJWQgUEFzIGxlZnRcXG5cJiMzNDssXG4zOTE0Olx0XHRcdFx0XHRcdCBjb3VudCk7XG4zOTE1Olx0XHRcdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xuMzkxNjpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XG4zOTE3Olx0XHRcdH1cbjM5MTg6XHRcdFx0bnVtX21ldGFfZ3JvdXBfaW5mb3MgPSAobmdyb3VwcyAmIzQzO1xuMzkxOTpcdFx0XHRcdFx0RVhUNF9ERVNDX1BFUl9CTE9DSyhzYikgLSAxKSBcdTAwM2VcdTAwM2VcbjM5MjA6XHRcdFx0XHRFWFQ0X0RFU0NfUEVSX0JMT0NLX0JJVFMoc2IpO1xuMzkyMTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fbWV0YV9ncm91cF9pbmZvczsgaSYjNDM7JiM0MzspXG4zOTIyOlx0XHRcdFx0a2ZyZWUoZ3JvdXBfaW5mb1tpXSk7XG4zOTIzOlx0XHRcdGt2ZnJlZShncm91cF9pbmZvKTtcbjM5MjQ6XHRcdH1cbjM5MjU6XHRcdGV4dDRfbWJfYXZnX2ZyYWdtZW50X3NpemVfZGVzdHJveShzYmkpO1xuMzkyNjpcdFx0ZXh0NF9tYl9sYXJnZXN0X2ZyZWVfb3JkZXJzX2Rlc3Ryb3koc2JpKTtcbjM5Mjc6XHRcdGtmcmVlKHNiaS1cdTAwM2VzX21iX29mZnNldHMpO1xuMzkyODpcdFx0a2ZyZWUoc2JpLVx1MDAzZXNfbWJfbWF4cyk7XG4zOTI5Olx0XHRpcHV0KHNiaS1cdTAwM2VzX2J1ZGR5X2NhY2hlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCoqCgpPa2F5LCBzbyBgZXh0NF9tYl9yZWxlYXNlYCBjYWxscyBgZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspYC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoLCBhbmQgaXQgc2F5czogKiYjMzQ7VGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuJiMzNDsqCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBoYW5nIG9uIGEgc2Vjb25kLiBJZiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBhbHJlYWR5IGZsdXNoaW5nIHRoaXMgd29yaywgaG93IGNhbiB0aGUgKmxhc3QgY29tbWl0KiByZS1hcm0gYHNfZGlzY2FyZF93b3JrYD8gQWgsIHJpZ2h0LiBUaGUgY29tbWVudCBtZWFucyB0aGUgKmZpbmFsIGNvbW1pdCBvZiB0aGUgam91cm5hbCogY2FuIHJlLWFybSBpdC4gVGhlIGlzc3VlIG11c3QgYmUgdGhhdCBpZiB0aGUgam91cm5hbCBpcyBkZXN0cm95ZWQgYmVmb3JlIGBleHQ0X21iX3JlbGVhc2VgLCB0aGUgam91cm5hbCBkZXN0cnVjdGlvbiBmb3JjZXMgYSBjb21taXQgd2hpY2ggKm1pZ2h0KiByZS1hcm0gdGhlIHdvcmsgcXVldWUsIHRoZW4gYGV4dDRfbWJfcmVsZWFzZWAgd2FpdHMgZm9yIGl0LiBJZiB0aGUgam91cm5hbCAqaXNuJiMzOTt0KiBkZXN0cm95ZWQgZmlyc3QsIGBleHQ0X21iX3JlbGVhc2VgIGZsdXNoZXMgdGhlIHdvcmtxdWV1ZSBhbmQgdGhlbiBsYXRlciBvbiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGZvcmNlcyBhbm90aGVyIGNvbW1pdCwgd2hpY2ggbWlnaHQgcmUtYXJtIGl0LiBCdXQgbm93LCBpdCYjMzk7cyBhcm1lZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC9mcmVlZCEgVGhpcyBsZWFkcyB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IGV4ZWN1dGVzIGFmdGVyIHRoZSBgc2JpYCBpcyBsb25nIGdvbmUuCgpTbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZSB0aGF0IGNvdWxkIGhhcHBlbiBkdXJpbmcgYSBtb3VudCBmYWlsdXJlLiBIbW0sIGlzIHRoaXMgYSByZWFjaGFibGUgc2NlbmFyaW8/IFllcywgbW91bnQgZmFpbHVyZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgVUFGIGluIGEgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGgsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkxldCYjMzk7cyBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0VYVDRfRlNgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gQnV0IHdoYXQgYWJvdXQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gYHNfZGlzY2FyZF93b3JrYCBvciBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgPyBJIG5lZWQgdG8gY2hlY2sgdGhvc2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBzX2Rpc2NhcmRfd29ya2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NfZGlzY2FyZF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9iYWxsb2MuYz02ODk9aW50IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcylcbi0tXG5mcy9leHQ0L2JhbGxvYy5jLTcwOC1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNnNiaS1cdTAwM2VzX3JldHJ5X2FsbG9jX3BlbmRpbmcpO1xuZnMvZXh0NC9iYWxsb2MuYzo3MDk6XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9iYWxsb2MuYy03MTAtXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzYmktXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE2NzctXHRzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlzY2FyZF9saXN0O1xuZnMvZXh0NC9leHQ0Lmg6MTY3ODpcdHN0cnVjdCB3b3JrX3N0cnVjdCBzX2Rpc2NhcmRfd29yaztcbmZzL2V4dDQvZXh0NC5oLTE2NzktXHRhdG9taWNfdCBzX3JldHJ5X2FsbG9jX3BlbmRpbmc7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9MzY0Mj1zdGF0aWMgdm9pZCBleHQ0X2Rpc2NhcmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMzY0NC1cdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih3b3JrLFxuZnMvZXh0NC9tYmFsbG9jLmM6MzY0NTpcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLCBzX2Rpc2NhcmRfd29yayk7XG5mcy9leHQ0L21iYWxsb2MuYy0zNjQ2LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cdTAwM2VzX3NiO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM3MTY9aW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTM3ODItXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6Mzc4MzpcdElOSVRfV09SSyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmssIGV4dDRfZGlzY2FyZF93b3JrKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTM3ODQtXHRhdG9taWNfc2V0KFx1MDAyNnNiaS1cdTAwM2VzX3JldHJ5X2FsbG9jX3BlbmRpbmcsIDApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM4ODY9dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0zODk4LVx0ICovXG5mcy9leHQ0L21iYWxsb2MuYzozODk5Olx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9tYmFsbG9jLmMtMzkwMC1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX2xpc3QpKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00MDE5PXZvaWQgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MDM3LVx0XHRpZiAod2FrZSlcbmZzL2V4dDQvbWJhbGxvYy5jOjQwMzg6XHRcdFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9tYmFsbG9jLmMtNDAzOS1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc2NC1cdC8qXG5mcy9leHQ0L3N1cGVyLmM6NTc2NTpcdCAqIFRoZSBsYXN0IGNvbW1pdCBjYW4gcmUtYXJtIHNfZGlzY2FyZF93b3JrLCBzbyBkZXN0cm95IHRoZVxuZnMvZXh0NC9zdXBlci5jLTU3NjYtXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgZXh0NCBGaWxlc3lzdGVtIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgZXh0NCBidWcgZml4IHJlbGF0ZWQgdG8gYHNfZGlzY2FyZF93b3JrYC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgc19kaXNjYXJkX3dvcmtgIGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBleHQ0X21iX2luaXRgLCBhbmQgdGhlbiBnZXRzIHF1ZXVlZCB1cCBieSBgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFgLiBUaGF0JiMzOTtzIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGxpa2UgYSB0cmFuc2FjdGlvbiBjb21taXQgdHJpZ2dlcmVkIGR1cmluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHdhcyBxdWV1aW5nIHVwIHRoaXMgd29yaywgYnV0IGJlY2F1c2UgYGV4dDRfbWJfcmVsZWFzZWAgaGFkIGFscmVhZHkgYmVlbiBjYWxsZWQsIHRoZSB3b3JrIHdhcyBsZWZ0IHBlbmRpbmcuCgpUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGludm9sdmVzIGNoYW5naW5nIHRoZSBlcnJvciBwYXRoIGluIGBfX2V4dDRfZmlsbF9zdXBlcmAgdG8gY2FsbCBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgICpiZWZvcmUqIGBleHQ0X21iX3JlbGVhc2VgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZnV6emluZyB0YXJnZXRzLgoKT2J2aW91c2x5LCBgZXh0NF9maWxsX3N1cGVyYCAob3IgcmF0aGVyLCBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZCkgaXMgYSBrZXkgZW50cnkgcG9pbnQuIFRoaXMgaXMgdGhlIG1vdW50IHBhdGgsIHJpZ2h0PyBBbmQgd2Uga25vdyBzeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIG1vdW50IGNhbGxzIGZvciBleHQ0LiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFdlIGFsc28gd2FudCB0byBoaXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLgoKSSBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbWJfcmVsZWFzZWAgYmVjYXVzZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBBbmQgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBpbnZvbHZlZCBhcyB3ZWxsLiBXYWl0IGEgbWludXRlLi4uaXNuJiMzOTt0IGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgZGVmaW5lZCBhcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0NF9qYmQyLmhgPyBUaGF0IG1lYW5zIGl0IG1pZ2h0IG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MhIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgaW5saW5lcyB0aGF0LiBJZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgaW5kaXJlY3RseSB0YXJnZXRlZC4gUGVyaGFwcyB0aGF0IGNhbiBiZSBkb25lIGJ5IGhpdHRpbmcgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfam91cm5hbF9kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2piZDIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5oPTQxNj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM1LSAqL1xuZnMvZXh0NC9leHQ0X2piZDIuaDo0MzY6c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXG5mcy9leHQ0L2V4dDRfamJkMi5oLTQzNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEV4dDQgRmlsZXN5c3RlbSBDb2RlKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLCB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBzdGF0aWMgaW5saW5lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEdpdmVuIHRoYXQsIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gYF9fZXh0NF9maWxsX3N1cGVyYCBhbmQgYGV4dDRfbWJfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgc3RhdGljLCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4gQmV0dGVyIHRvIGRvdWJsZS1jaGVjayB0aGF0IGVhcmx5IHRoYW4gd2FzdGUgdGltZSBkb3duIGEgd3JvbmcgcGF0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19leHQ0X2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTUzMzk9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MzQ1LVxuZnMvZXh0NC9zdXBlci5jOjUzNDY6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTM0Ny17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4MjI9c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODQxLVxuZnMvZXh0NC9zdXBlci5jOjU4NDI6XHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU4NDMtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIElubGluaW5nIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiYjMzQ7IEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSwgJiMzNDtJdCAqY291bGQqIHBvdGVudGlhbGx5IGJlIGlubGluZWQsIGJ1dCBpdCYjMzk7cyBhIHNpemFibGUgY2h1bmsgb2YgY29kZS4mIzM0OyBTaXplIGlzIGEga2V5IGZhY3Rvci4gQSBsYXJnZSBmdW5jdGlvbiBpcyBsZXNzIGxpa2VseSB0byBiZSBpbmxpbmVkLCBldmVuIGlmIHN0YXRpYy4gQnV0IHRoZW4gYSB0aG91Z2h0IGhpdHMgbWU6ICYjMzQ7V2FpdCBhIHNlY29uZCwgYGV4dDRfZmlsbF9zdXBlcmAgaXMgKmFsc28qIHN0YXRpYyEmIzM0OyBUaGF0IG1ha2VzIG1lIHBhdXNlLiBOb3cgSSYjMzk7bSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBleHQ0X2dldF90cmVlYCB0byBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIGltcGFjdHMgaG93IHRoZSBjb21waWxlciB3aWxsIGhhbmRsZSB0aGVtLCBhbmQgd2hldGhlciBpbmxpbmluZyBpcyBhIGZhY3RvciB0byBjb25zaWRlciBpbiB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG5mcy9leHQ0L3N1cGVyLmM6OTI6c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTEyNi1cdC5wYXJzZV9wYXJhbVx0PSBleHQ0X3BhcnNlX3BhcmFtLFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcdC5nZXRfdHJlZVx0PSBleHQ0X2dldF90cmVlLFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cdC5yZWNvbmZpZ3VyZVx0PSBleHQ0X3JlY29uZmlndXJlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODIyPXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTg3MS1cbmZzL2V4dDQvc3VwZXIuYzo1ODcyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODk2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbnMgaW4gZXh0NCoqCgpIbW0sIHNvIGBleHQ0X2dldF90cmVlYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIHJlZmFjdG9yaW5nIG9wcG9ydHVuaXRpZXMuIFN0YXRpYyBmdW5jdGlvbnMgY2FuIHNvbWV0aW1lcyBiZSBwcm9ibGVtYXRpYyBpbiBhIG1vZHVsYXIgY29udGV4dCwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBUaGV5IHR5cGljYWxseSBsaW1pdCB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIHJldXNlIG91dHNpZGUgdGhlaXIgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UuCgpOb3csIGxldCBtZSB0aGluay4uLiB3aGVyZSBlbHNlIG1pZ2h0IEkgZmluZCB0aGlzIHBhdHRlcm4/IFdoYXQgYWJvdXQgYGV4dDRfbWJfcmVsZWFzZWA/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBpdHMgZGVjbGFyYXRpb24uIElzIGl0IHN0YXRpYyBhcyB3ZWxsPyBJZiBpdCAqaXMqLCB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LiBJZiBpdCYjMzk7cyAqbm90KiwgdGhlbiBwZXJoYXBzIGl04oCZcyBwYXJ0IG9mIHNvbWUgbW9yZSBnZW5lcmFsIEFQSS4gVGhlIGJlaGF2aW9yIG9mIGBleHQ0X21iX3JlbGVhc2VgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBvciBsYWNrIHRoZXJlb2YsIG1pZ2h0IGJlIHRlbGxpbmcgbWUgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgc3RydWN0dXJlIGFuZCBpbnRlbmRlZCBzY29wZSBvZiB0aGF0IGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmM9MjIzNz1zdGF0aWMgdm9pZCBleHQ0X21iX3VzZV9iZXN0X2ZvdW5kKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cdCAqIGRvdWJsZSBhbGxvY2F0ZSBibG9ja3MuIFRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZFxuZnMvZXh0NC9tYmFsbG9jLmM6MjI2MzpcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy0yMjY0LVx0ICovXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9Mzg3MT1zdGF0aWMgaW50IGV4dDRfbWJfY2xlYW51cF9wYShzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncnApXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cbmZzL2V4dDQvbWJhbGxvYy5jOjM4ODY6dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvbWJhbGxvYy5jLTM4ODcte1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ2ODU9c3RhdGljIHZvaWQgZXh0NF9tYl9jb2xsZWN0X3N0YXRzKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJiMzOTt0IG5lZWQgdGhpcyBmb3IgTUJfR1JPVVBfUEEgYmVjYXVzZSB3ZSBvbmx5IGNoYW5nZVxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSYjMzk7dmUgYWxyZWFkeVxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVx1MDAzZWFjX2JfZXguZmVfbGVuLCBzbyBncm91cF9wYS1cdTAwM2VwYV9mcmVlIGlzIG5vdCBjaGFuZ2VkLlxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ3OTA9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVx0ICogaW5zdGVhZCB3ZSBjb3JyZWN0IHBhIGxhdGVyLCBhZnRlciBibG9ja3MgYXJlIG1hcmtlZFxuZnMvZXh0NC9tYmFsbG9jLmM6NDgwNTpcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXG5mcy9leHQ0L21iYWxsb2MuYy00ODA2LVx0ICogT3RoZXIgQ1BVcyBhcmUgcHJldmVudGVkIGZyb20gYWxsb2NhdGluZyBmcm9tIHRoaXMgcGEgYnkgbGdfbXV0ZXhcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00ODc2PWV4dDRfbWJfdXNlX3ByZWFsbG9jYXRlZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXHRcdCAqICAgICAgZXh0NF9tYl9uZXdfYmxvY2tzXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlx0XHQgKiAgICAgICBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cdFx0ICogICAgICAgIGV4dDRfbWJfcHV0X3BhXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTM1MT1leHQ0X21iX25ld19ncm91cF9wYShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXHQgKiBXZSB3aWxsIGxhdGVyIGFkZCB0aGUgbmV3IHBhIHRvIHRoZSByaWdodCBidWNrZXRcbmZzL2V4dDQvbWJhbGxvYy5jOjUzOTY6XHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtNTM5Ny1cdCAqL1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU0MTY9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG5mcy9leHQ0L21iYWxsb2MuYzo1NDE3OmV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaCxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXHRcdFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU0NDUtXHRcdHRyYWNlX2V4dDRfbWJhbGxvY19kaXNjYXJkKHNiLCBOVUxMLCBncm91cCwgYml0LCBuZXh0IC0gYml0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjU0NDY6XHRcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShwYSwgKGdycF9ibGtfc3RhcnQgJiM0MztcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NDctXHRcdFx0XHRcdFx0ICAgIEVYVDRfQzJCKHNiaSwgYml0KSksXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbmZzL2V4dDQvbWJhbGxvYy5jOjU0Njk6ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsXG5mcy9leHQ0L21iYWxsb2MuYy01NDcwLVx0XHRcdFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzUtXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2Olx0dHJhY2VfZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKHNiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NDc3LVx0QlVHX09OKHBhLVx1MDAzZXBhX2RlbGV0ZWQgPT0gMCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NTgwLVx0XHRpZiAocGEtXHUwMDNlcGFfdHlwZSA9PSBNQl9HUk9VUF9QQSkge1xuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcdFx0XHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXHUwMDI2ZTRiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTgyLVx0XHRcdGNhbGxfcmN1KFx1MDAyNihwYSktXHUwMDNldS5wYV9yY3UsIGV4dDRfbWJfcGFfY2FsbGJhY2spO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4My1cdFx0fSBlbHNlIHtcbmZzL2V4dDQvbWJhbGxvYy5jOjU1ODQ6XHRcdFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTg1LVx0XHRcdGV4dDRfbWJfcGFfZnJlZShwYSk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDMtXHRcdGxpc3RfZGVsKFx1MDAyNnBhLVx1MDAzZXBhX2dyb3VwX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NTcwNDpcdFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NzA1LVx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTk5OS1cdFx0bGlzdF9kZWwoXHUwMDI2cGEtXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo2MDAwOlx0XHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXHUwMDI2ZTRiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy02MDAxLVx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjA2NS0gKi9cbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbmZzL2V4dDQvbWJhbGxvYy5jLTYwNjcte1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYzNTMtXHR9XG5mcy9leHQ0L21iYWxsb2MuYzo2MzU0Olx0ZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoYWMpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cdGttZW1fY2FjaGVfZnJlZShleHQ0X2FjX2NhY2hlcCwgYWMpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NzI3ODpFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9tYl9yZWxlYXNlKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTcyNzktRVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfcmVhZF9ibG9ja19iaXRtYXBfbm93YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIGV4dDQgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIGFuZCB0cnlpbmcgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBgZXh0NF9tYl9yZWxlYXNlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQsIGxpa2VseSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMsIGFzIGl0IHByb2JhYmx5IHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlIGZyb20gYSBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwZXJzcGVjdGl2ZSwgZ2l2ZW4gaXQmIzM5O3MgYSBnZW5lcmFsbHkgaW1wb3J0YW50IGZ1bmN0aW9uLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGV4dDRfcHV0X3N1cGVyYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRlYWxzIHdpdGggdW5tb3VudGluZyB0aGUgZmlsZXN5c3RlbSwgYW5kIHRoYXQgaXQgZW5kcyB1cCBjYWxsaW5nIGBleHQ0X21iX3JlbGVhc2VgIHRvby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBpbnZlc3RpZ2F0ZSBgZXh0NF9tYl9yZWxlYXNlYCBzbyBJIGRvbiYjMzk7dCBtaXNzIGFueSBjcml0aWNhbCBjb250ZXh0LCBhbmQgSSBzaG91bGQgYWxzbyBzZWUgaG93IHRoZSBjYWxscyB0byBgZXh0NF9tYl9yZWxlYXNlYCBhcmUgaGFuZGxlZCBpbiBgZXh0NF9wdXRfc3VwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3B1dF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9MTI2OT1zdGF0aWMgdm9pZCBleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxuZnMvZXh0NC9zdXBlci5jOjEyODI6c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0xMjgzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTY2OT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjc3LVx0LmV2aWN0X2lub2RlXHQ9IGV4dDRfZXZpY3RfaW5vZGUsXG5mcy9leHQ0L3N1cGVyLmM6MTY3ODpcdC5wdXRfc3VwZXJcdD0gZXh0NF9wdXRfc3VwZXIsXG5mcy9leHQ0L3N1cGVyLmMtMTY3OS1cdC5zeW5jX2ZzXHQ9IGV4dDRfc3luY19mcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBFWFQ0IEZpbGVzeXN0ZW0gTW91bnQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgbW91bnQgcHJvY2VzcyBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZXh0NF9wdXRfc3VwZXJgLCBJIHJlbWVtYmVyIHRoYXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGluZm9ybWF0aXZlIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGV4dGVybmFsIGNhbGxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgc3ltYm9sLiBgZXh0NF9tYl9yZWxlYXNlYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBmb2N1cyBvbiBpbiB0aGlzIGNvbnRleHQuCgpIb2xkIG9uLCBJIGFsc28gcmVjYWxsIHRoYXQgYGV4dDRfZmlsbF9zdXBlcmAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCBmb3IgdHJhY2luZywgYnV0IHNvIGlzIGBleHQ0X2dldF90cmVlYC4gSG1tLCB0aGlzIGlzIGJlY29taW5nIHRyaWNreS4gQXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBtb3VudCBwYXRoIHRoYXQgbWlnaHQgYmUgZWFzaWVyIHRvIGZvbGxvdz8gSSBuZWVkIHRvIGZpbmQgYW4gZW50cnkgcG9pbnQgdGhhdCYjMzk7cyBleHBvc2VkLiBMZXQgbWUgY2hlY2sgYGV4dDRfaW5pdF9mc19jb250ZXh0YCAtLSB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgY29udGV4dC4gSSYjMzk7bGwgc2VlIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTk0PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbmZzL2V4dDQvc3VwZXIuYy05Ni1zdGF0aWMgdm9pZCBleHQ0X2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEzND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzYtXHQubmFtZVx0XHRcdD0gXCYjMzQ7ZXh0MlwmIzM0OyxcbmZzL2V4dDQvc3VwZXIuYzoxMzc6XHQuaW5pdF9mc19jb250ZXh0XHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxuZnMvZXh0NC9zdXBlci5jLTEzOC1cdC5wYXJhbWV0ZXJzXHRcdD0gZXh0NF9wYXJhbV9zcGVjcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQzX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE1Mi1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQzXCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjE1MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXG5mcy9leHQ0L3N1cGVyLmMtMTU0LVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDM2PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwNTAtXG5mcy9leHQ0L3N1cGVyLmM6MjA1MTppbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTIwNTIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz03NTE5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQ0X2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTc1MjEtXHQubmFtZVx0XHRcdD0gXCYjMzQ7ZXh0NFwmIzM0OyxcbmZzL2V4dDQvc3VwZXIuYzo3NTIyOlx0LmluaXRfZnNfY29udGV4dFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcbmZzL2V4dDQvc3VwZXIuYy03NTIzLVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBleHQ0IEZpbGVzeXN0ZW0gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGV4dDQgY29kZS4uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdXNlZnVsOyBJIGNhbiBwb3RlbnRpYWxseSB1c2UgdGhpcyBmdW5jdGlvbiBhbmQgYGV4dDRfbWJfcmVsZWFzZWAgYXMgY3J1Y2lhbCBmb2N1cyBwb2ludHMgZm9yIGFuYWx5c2lzLCBnaXZlbiB0aGV5JiMzOTtyZSBub3QgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYGV4dDRfbWJfcmVsZWFzZWAuLi4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBpbiBlcnJvciBwYXRocyBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MsIGFuZCBhbHNvIGluIGBleHQ0X3B1dF9zdXBlcmAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjbGVhbnVwLiBIbW0sIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50IGluIHRlcm1zIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGxpZmVjeWNsZT8gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGRvZXNuJiMzOTt0IHByb3ZpZGUgYSB1c2VmdWwgcG9pbnQgdG8gbG9vayBhdCBtb3JlIGJyb2FkbHkuIFdoYXQgYWJvdXQgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYD8gQWggeWVzLCBpdCBxdWV1ZXMgYHNfZGlzY2FyZF93b3JrYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgdG91Y2hlcyBvbiBwb3RlbnRpYWwgYmFja2dyb3VuZCB0YXNrcyBhbmQgZGF0YSBzYW5pdGl6YXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZXNlIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMxMTU9ZXh0ZXJuIGludCBleHQ0X3RyaW1fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc3RyaW1fcmFuZ2UgKik7XG5mcy9leHQ0L2V4dDQuaDozMTE2OmV4dGVybiB2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpO1xuZnMvZXh0NC9leHQ0LmgtMzExNy1leHRlcm4gdm9pZCBleHQ0X21iX21hcmtfYmIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsb2NrLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM5NzM9c3RhdGljIHZvaWQgZXh0NF9mcmVlX2RhdGFfaW5fYnVkZHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MDE4LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmM6NDAxOTp2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXG5mcy9leHQ0L21iYWxsb2MuYy00MDIwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTA5PXN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUxNC1cbmZzL2V4dDQvc3VwZXIuYzo1MTU6XHRleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YShzYiwgdHhuLVx1MDAzZXRfdGlkKTtcbmZzL2V4dDQvc3VwZXIuYy01MTYtXHRleHQ0X21heWJlX3VwZGF0ZV9zdXBlcmJsb2NrKHNiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTQKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZpeCoqCgpPa2F5LCBzbyBgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0LCBhbG9uZyB3aXRoIGBleHQ0X21iX3JlbGVhc2VgLCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIHRob3NlIHN5bWJvbHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBBaCwgeWVzLCBgQ09ORklHX0pCRDJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19FWFQ0X0ZTYC4gUGVyZmVjdCwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIGRpc3RpbGwgdGhpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBEZWZpbml0ZWx5LCB5ZXMuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgZXh0NF9tYl9yZWxlYXNlYCwgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYCwgYW5kIGFsc28gYGV4dDRfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBzZWVtcyByZWxldmFudCB0byBpbml0aWFsaXNhdGlvbiB3aGljaCBpcyBwYXJ0IG9mIHRoZSB2dWxuZXJhYmlsaXR5LgoqICAgKipFbmFibGVDb25maWdzKio6IE9ubHkgYEVYVDRfRlNgIGlzIHJlcXVpcmVkLgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aXRoaW4gZXh0NCYjMzk7cyBtb3VudCBlcnJvciBoYW5kbGluZy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgdGltaW5nIG9mIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gaW4gcmVsYXRpb24gdG8gYGV4dDRfbWJfcmVsZWFzZWAmIzM5O3MgZmx1c2hpbmcgb2YgYHNfZGlzY2FyZF93b3JrYC4gSWYgdGhlIGpvdXJuYWwgaXNuJiMzOTt0IGZ1bGx5IGNsZWFuZWQgdXAgKmJlZm9yZSogdGhhdCByZWxlYXNlIGZ1bmN0aW9uIGRvZXMgaXRzIHRoaW5nLCBhIGxhdGVyIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gY2FuIHJlLWVuYWJsZSBgc19kaXNjYXJkX3dvcmtgLiBUaGlzIHNldHMgdXAgdGhlIHBlcmZlY3Qgc2NlbmFyaW8gZm9yIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IHRyaWVzIHRvIGV4ZWN1dGUgaXRzIHdvcmsgKmFmdGVyKiB0aGUgc3VwZXJibG9jayYjMzk7cyBkYXRhIGlzIGZyZWVkLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHRlc3QgdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2V4dDRfcHJvY2Vzc19mcmVlZF9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfaW5pdF9mc19jb250ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uNThiMjEwNjM3YjU3YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGUKJiM0MzsJICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzYmktJmd0O3Nfam91cm5hbCkKJiM0MzsJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCWV4dDRfbWJfcmVsZWFzZShzYik7CiAJZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ1Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGV4dDQgRXJyb3IgUGF0aCBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBhbiBlcnJvciBwYXRoIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4dDQvc3VwZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwcmV2aW91cyBjb21taXQgaW50cm9kdWNlZCB0aGUgcG90ZW50aWFsIGZvciBgc19kaXNjYXJkX3dvcmtgIHRvIGJlIHJlLWFybWVkLCB3aGljaCwgZHVyaW5nIGEgbW91bnQgZmFpbHVyZSwgY291bGQgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVhaywgb3IgZXZlbiBhIGNyYXNoLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpcyB0aGUgYWRkaXRpb24gb2YgYGV4dDRfam91cm5hbF9kZXN0cm95KClgICpiZWZvcmUqIGBleHQ0X21iX3JlbGVhc2UoKWAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIFRoaXMgZGVzdHJ1Y3Rpb24gb2YgdGhlIGpvdXJuYWwgKmJlZm9yZSogZnJlZWluZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlIHRvIHByZXZlbnQgdGhlIGFmb3JlbWVudGlvbmVkIGlzc3Vlcy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldC4gSXQgZW5zdXJlcyB0aGF0IHRoZSBqb3VybmFsIGlzIHByb3Blcmx5IGNsZWFuZWQgdXAgYmVmb3JlIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGZyZWVkIG1lbW9yeS4gVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3Nlc3NtZW50OyB0aGUgYWRkZWQgYGlmIChzYmktJmd0O3Nfam91cm5hbClgIGNoZWNrIGlzIGEgbmljZSB0b3VjaCwgZW5zdXJpbmcgdGhlIGpvdXJuYWwgYWN0dWFsbHkgZXhpc3RzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgaXQsIGZvciBleGFtcGxlIGluIGEgbm9uLWpvdXJuYWxlZCBmaWxlc3lzdGVtLCB3aGljaCBjb3VsZCB0aGVuIGNhdXNlIG90aGVyIHByb2JsZW1zLgoKSSBzZWUgbm8gZXZpZGVuY2UgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBmaXggaXMgcHVyZWx5IGFuIGVycm9yIHBhdGggY2xlYW51cDsgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gc2NydXRpbnkuIFN0YW5kYXJkIHRvb2xzLCBsaWtlIEtBU0FOLCBzaG91bGQgZWFzaWx5IGNhdGNoIHRoZSB0eXBlcyBvZiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gTXkgZGV0ZXJtaW5hdGlvbiBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1NS4yMDUzODkzMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MjQ4NDgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gICAgXCJleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YVwiLFxuICAgIFwiZXh0NF9pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1NS4yMDUzOTQ2ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTAwNjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDExY2UxNWNlMTJkODU2ZmJjODRkMjUyOWI0NDJkODU1ODNkZTIzZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggNGI2MTEyZTVkNmM1OS4uNThiMjEwNjM3YjU3YiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIGZhaWxlZF9tb3VudDc6XFxuIFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG4gZmFpbGVkX21vdW50NjpcXG4rXFx0LypcXG4rXFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuK1xcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuK1xcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbiBcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4gZmFpbGVkX21vdW50NTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDg6NTUuNjMxMTAxNDQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODEwNTU5ODcyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgICBcImV4dDRfaW5pdF9mc19jb250ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aC4gSWYgdGhlIGpvdXJuYWwgaXMgbm90IGRlc3Ryb3llZCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBzX2Rpc2NhcmRfd29yaywgYSBzdWJzZXF1ZW50IGpvdXJuYWwgZGVzdHJveSBjYW4gZm9yY2UgYSBjb21taXQgdGhhdCByZS1hcm1zIHNfZGlzY2FyZF93b3JrLCBsZWFkaW5nIHRvIGEgVUFGIHdoZW4gdGhlIHdvcmtxdWV1ZSBleGVjdXRlcyB0aGUgd29yayBhZnRlciB0aGUgc3VwZXJibG9jayBpbmZvIGlzIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTFjZTE1Y2UxMmQ4NTZmYmM4NGQyNTI5YjQ0MmQ4NTU4M2RlMjNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCA0YjYxMTJlNWQ2YzU5Li41OGIyMTA2MzdiNTdiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01NzYxLDYgKzU3NjEsMTIgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBmYWlsZWRfbW91bnQ3OlxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuIGZhaWxlZF9tb3VudDY6XG4rXHQvKlxuK1x0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG4rXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxuK1x0ICovXG4rXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbitcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdGV4dDRfbWJfcmVsZWFzZShzYik7XG4gXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbiBmYWlsZWRfbW91bnQ1OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDg6NTUuNjMxMTAyNzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNTg2MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgZnMvZXh0NC9zdXBlci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgbW91bnQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGQgYSBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgd2l0aCB0aGUgYXJndW1lbnRzIGBzYmlgIGFuZCBgc2JpLVx1MDAzZXNfam91cm5hbGAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkncmUgY2xlYW5pbmcgdXAgYSBqb3VybmFsIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwZXJibG9jaywgbGlrZWx5IHdoZW4gYSBtb3VudCBvcGVyYXRpb24gaGFzIGZhaWxlZC4gVGhlIGxhYmVsIGBmYWlsZWRfbW91bnQ2YCBpcyBhIGRlY2VudCBjbHVlOyB0aGF0IHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgYW5hbHlzaXMuIEknbSBndWVzc2luZyB0aGlzIGNhbGwgaXMgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBlcnJvciBwYXRoIG9mIGBleHQ0X2ZpbGxfc3VwZXJgLCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBMZXQncyBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSA1NzYxIGFuZCBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoaXMgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBiZWluZyBpbmplY3RlZCwgd2hhdCBvdGhlciBjb250ZXh0dWFsIGNvZGUgaXMgYXJvdW5kIGl0LCBhbmQgd2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBpdCdzIGludGVuZGVkIHRvIGhhbmRsZS4gSXQncyBhIGNsZWFudXAgc3RlcDsgaG9wZWZ1bGx5LCBpdCBwcmV2ZW50cyByZXNvdXJjZSBsZWFrcyBvciBjb3JydXB0aW9uIGlmIHRoZSBtb3VudCBmYWlscyBtaWQtb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1OS42MzY5Njc1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg0NDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYWlsZWRfbW91bnQ2OlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzYyLVxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc2MzpmYWlsZWRfbW91bnQ2OlxcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA4OjU5LjY4MzgxNjQ1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzQ3MDM0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGluLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCBhcyB0aG91Z2ggdGhlIHRob3VnaHRzIGFyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCBpcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGV4cGVjdGVkIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgXCJ3aHlcIiB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIGhvdyBJIGRpc3NlY3QgdGhlIFwiaG93XCIuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIG90aGVycywgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gZ3Jhc3AgaXRzIHRydWUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MDIuMzU4NTIzMzYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTY0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhaWxlZF9tb3VudDY6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjItXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NzYzOmZhaWxlZF9tb3VudDY6XFxuZnMvZXh0NC9zdXBlci5jLTU3NjQtXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MDIuNDAyNjkxNDAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTc5NjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbGx5IFVudXNlZCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgb3V0cHV0IGZyb20sIHByb2JhYmx5LCBhIGJ1aWxkIG9yIGFuYWx5c2lzIHRvb2wsIGFuZCBpdCBsb29rcyBsaWtlIGAtLXNob3ctZnVuY3Rpb25gIGlzIHRoZSBjdWxwcml0LiBUaGF0J3MgdXN1YWxseSB0aGUgZGVmYXVsdCwgc28gdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBIb3dldmVyLCB0aGUgb3V0cHV0IGlzIGZsYWdnaW5nIGBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZGAuIEhtbSwgdGhhdCdzIG5vdCBpZGVhbC4gQSBcIm1heWJlX3VudXNlZFwiIGF0dHJpYnV0ZSBzaG91bGRuJ3QgYmUgc2hvd2luZyB1cCBpZiB0aGUgZnVuY3Rpb24gKmlzKiBhY3R1YWxseSB1c2VkLCByaWdodD8gVGhlIHRvb2wgKnNob3VsZCogYmUgZXhjbHVkaW5nIHRydWx5IHVudXNlZCBmdW5jdGlvbnMuIFNvLCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQgd2l0aCBpdHMgYW5hbHlzaXMuXG5cbkknbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIHRvb2wgdGhpbmtzIGlzIGdvaW5nIG9uLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjb25maXJtIGl0IG15c2VsZi4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBmdW5jdGlvbidzIHVzZS4gUmVhZGluZyB0aGUgY29kZSBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgcm91dGUgaGVyZSwgbGlrZWx5IGludm9sdmluZyBncmVwcGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGNoZWNraW5nIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGFjdHVhbGx5IHVzZWQgb3IgdHJ1bHkgdW51c2VkIGFuZCB3cm9uZ2x5IGZsYWdnZWQsIGJlY2F1c2UgdGhpcyBjYW4gcG9pbnQgdG8gYSBkZWVwZXIgaXNzdWUgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBhIHRvb2wsIG9yIGV2ZW4gYSBzdWJ0bGUgZXJyb3IgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowNS45NTI0ODk1NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzAwOlxcdFxcdFxcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XFxuNTcwMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU3MDI6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ4O1xcbjU3MDM6XFx0XFx0fVxcbjU3MDQ6XFx0I2VuZGlmICAvKiBDT05GSUdfUVVPVEEgKi9cXG41NzA1OlxcdFxcbjU3MDY6XFx0XFx0LypcXG41NzA3OlxcdFxcdCAqIFNhdmUgdGhlIG9yaWdpbmFsIGJkZXYgbWFwcGluZydzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxcbjU3MDg6XFx0XFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxcbjU3MDk6XFx0XFx0ICovXFxuNTcxMDpcXHRcXHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXFx1MDAyNnNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX21hcHBpbmctXFx1MDAzZXdiX2VycixcXG41NzExOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c2JpLVxcdTAwM2VzX2JkZXZfd2JfZXJyKTtcXG41NzEyOlxcdFxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIHw9IEVYVDRfT1JQSEFOX0ZTO1xcbjU3MTM6XFx0XFx0ZXh0NF9vcnBoYW5fY2xlYW51cChzYiwgZXMpO1xcbjU3MTQ6XFx0XFx0RVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xcbjU3MTU6XFx0XFx0LypcXG41NzE2OlxcdFxcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcXG41NzE3OlxcdFxcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcXG41NzE4OlxcdFxcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXFxuNTcxOTpcXHRcXHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxcbjU3MjA6XFx0XFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cXG41NzIxOlxcdFxcdCAqL1xcbjU3MjI6XFx0XFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcXG41NzIzOlxcdFxcdGlmIChuZWVkc19yZWNvdmVyeSkge1xcbjU3MjQ6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXFxcInJlY292ZXJ5IGNvbXBsZXRlXFxcIik7XFxuNTcyNTpcXHRcXHRcXHRlcnIgPSBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc2IsIGVzKTtcXG41NzI2OlxcdFxcdFxcdGlmIChlcnIpXFxuNTcyNzpcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDk7XFxuNTcyODpcXHRcXHR9XFxuNTcyOTpcXHRcXG41NzMwOlxcdFxcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXFx1MDAyNlxcdTAwMjYgIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzYi1cXHUwMDNlc19iZGV2KSkge1xcbjU3MzE6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORyxcXG41NzMyOlxcdFxcdFxcdFxcdCBcXFwibW91bnRpbmcgd2l0aCBcXFxcXFxcImRpc2NhcmRcXFxcXFxcIiBvcHRpb24sIGJ1dCB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZGlzY2FyZFxcXCIpO1xcbjU3MzM6XFx0XFx0XFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcXG41NzM0OlxcdFxcdH1cXG41NzM1OlxcdFxcbjU3MzY6XFx0XFx0aWYgKGVzLVxcdTAwM2VzX2Vycm9yX2NvdW50KSB7XFxuNTczNzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1xcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xcbjU3Mzg6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG41NzM5OlxcdFxcdFxcdFxcdFxcdCAgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG41NzQwOlxcdFxcdH1cXG41NzQxOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuNTc0MjpcXHRcXG41NzQzOlxcdFxcdC8qIEVuYWJsZSBtZXNzYWdlIHJhdGVsaW1pdGluZy4gRGVmYXVsdCBpcyAxMCBtZXNzYWdlcyBwZXIgNSBzZWNzLiAqL1xcbjU3NDQ6XFx0XFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzQ1OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfd2FybmluZ19yYXRlbGltaXRfc3RhdGUsIDUgKiBIWiwgMTApO1xcbjU3NDY6XFx0XFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19tc2dfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzQ3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc193YXJuaW5nX2NvdW50LCAwKTtcXG41NzQ4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc19tc2dfY291bnQsIDApO1xcbjU3NDk6XFx0XFxuNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuNTc2NjpcXHRcXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxcbjU3Njc6XFx0XFx0ICovXFxuNTc2ODpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuNTc2OTpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc4NTpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3ODY6XFx0XFxuNTc4NzpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzg4OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTc4OTpcXHRcXG41NzkwOlxcdFxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbCkge1xcbjU3OTE6XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuNTc5MjpcXHRcXHR9XFxuNTc5MzpcXHRmYWlsZWRfbW91bnQzYTpcXG41Nzk0OlxcdFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbjU3OTU6XFx0ZmFpbGVkX21vdW50MzpcXG41Nzk2OlxcdFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuNTc5NzpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfc2JfdXBkX3dvcmspO1xcbjU3OTg6XFx0XFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG41Nzk5OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjA1Ljk1Mjk3NzU3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjY5MTA0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRXh0NCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaW5pdGlhbGl6aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSwgcmlnaHQ/IEl0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGtlcm5lbCBzdGFydHMgdHJhbnNsYXRpbmcgdGhlIHJhdyBibG9jayBkZXZpY2UgaW50byBzb21ldGhpbmcgd2UgY2FuIGFjdHVhbGx5IHdvcmsgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBlbnRpcmUgcHJvY2VzcyBraWNrcyBvZmYuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZ29lcyBmcm9tIGEgcmF3IGRldmljZSB0byBhIG1vdW50YWJsZSBmaWxlc3lzdGVtIHN0cnVjdHVyZS4gSSBiZXR0ZXIgdHJhY2UgdGhlIGNhbGwgZ3JhcGggYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBzZXRzIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowOC44MTk4OTEyNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjAzNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTM0NS1cXG5mcy9leHQ0L3N1cGVyLmM6NTM0NjpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNTM0Ny17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTgyMj1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg0MS1cXG5mcy9leHQ0L3N1cGVyLmM6NTg0MjpcXHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01ODQzLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowOC44Njg1MDQ2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5NDYyMTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHQ0IEpvdXJuYWwgRGVzdHJ1Y3Rpb24gLSBBIFF1ZXN0aW9uIG9mIFJlZHVuZGFuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgaXQncyBhZGRpbmcgYGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbClgIGF0IGBmYWlsZWRfbW91bnQ2OmAuIEZhaXIgZW5vdWdoLCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBjbGVhbiB1cCBpZiB0aGUgbW91bnQgZmFpbHMuIEJ1dCB0aGVuLCBJIHNlZSBhbm90aGVyIGNhbGwgdG8gYGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbClgIGxhdGVyIG9uLCBhdCBgZmFpbGVkX21vdW50X3dxOmAuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGZhaWxlZF9tb3VudDY6YCBpcyBoaXQsIHNob3VsZG4ndCBgc2JpLVx1MDAzZXNfam91cm5hbGAgYmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGUgZmlyc3QgYGV4dDRfam91cm5hbF9kZXN0cm95YCBjYWxsPyBPdGhlcndpc2UsIHdlJ3JlIHBvdGVudGlhbGx5IGRlc3Ryb3lpbmcgdGhlIGpvdXJuYWwgdHdpY2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBkb3VibGUtZnJlZXMsIGNvcnJ1cHRpb24sIHRoZSB3b3Jrcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgdG8gbWFrZSBzdXJlIGl0IGhhbmRsZXMgZG91YmxlIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIGJ1dCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGlzbid0LlxuXG5UaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGNhc2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSwgc28gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZyB0aGlzIHNjZW5hcmlvLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZmlyc3QgZGVzdHJ1Y3Rpb24gaXMgaGFuZGxlZCwgYW5kIHRoZSBzZWNvbmQgaXMgc2tpcHBlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxMy42NjMxMjkxNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzUwODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfam91cm5hbF9kZXN0cm95XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMTItXFx0XFx0YWJvcnRlZCA9IGlzX2pvdXJuYWxfYWJvcnRlZChzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMTM6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTEzMTQtXFx0XFx0aWYgKChlcnIgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAhYWJvcnRlZCkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NjQ9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDMtb3V0OlxcbmZzL2V4dDQvc3VwZXIuYzo1MDQ0OlxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDQ1LVxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzY4LVxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbClcXG5mcy9leHQ0L3N1cGVyLmM6NTc2OTpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MC1cXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3OTAtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuZnMvZXh0NC9zdXBlci5jOjU3OTE6XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTU3OTItXFx0fVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjA5Ni1vdXRfam91cm5hbDpcXG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTYwOTgtb3V0X2JkZXY6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjEwMz1zdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cXHRpZiAoZXJyKSB7XFxuZnMvZXh0NC9zdXBlci5jOjYyMTQ6XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koRVhUNF9TQihzYiksIGpvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy02MjE1LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxcbmZzL2V4dDQvc3VwZXIuYzo2MjMyOlxcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxMy43MDc4ODQxNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MTIwNTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGV4dDRfam91cm5hbF9kZXN0cm95YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxldCdzIGRpdmUgaW50byB0aGUgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBqb3VybmFsLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3Mgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgaGFuZGxlcyB0aGUgam91cm5hbCBpbm9kZSwgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbCwgYW55IG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBvbi1kaXNrIGpvdXJuYWwgbWV0YWRhdGEuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uOlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBkZXN0cnVjdGlvbiwgcGFydGljdWxhcmx5IGlmIHRoZSBmaWxlc3lzdGVtIGlzIHN0aWxsIGFjdGl2ZT8gV2hhdCBsb2NrcyBhcmUgdXNlZCwgYW5kIHdoYXQncyB0aGVpciBzY29wZT8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrP1xuKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBEb2VzIGl0IGVuc3VyZSBhbGwgam91cm5hbCBibG9ja3MgYXJlIHByb3Blcmx5IHJlbGVhc2VkIGJhY2sgdG8gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzPyBEb2VzIGl0IGNvcnJlY3RseSBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wbGV0ZSBjbGVhbnVwIG9yIGRhbmdsaW5nIHBvaW50ZXJzP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBjaGVja3MgZm9yIGVycm9ycyBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIGl0IGVuY291bnRlcnMgYSB3cml0ZSBlcnJvciB3aGVuIHRyeWluZyB0byBjbGVhciBtZXRhZGF0YSBvbiBkaXNrPyBJcyB0aGVyZSBhIGdyYWNlZnVsIGZhbGxiYWNrIG1lY2hhbmlzbT9cbiogICAqKlRyYW5zYWN0aW9uIEhhbmRsaW5nOioqIERvZXMgaXQgY29ycmVjdGx5IGZsdXNoIGFueSBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMgYmVmb3JlIGRlYWxsb2NhdGluZyB0aGUgam91cm5hbD8gQXJlIHRoZXJlIHNjZW5hcmlvcyB3aGVyZSBhIHRyYW5zYWN0aW9uIG1pZ2h0IGJlIGxlZnQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBkZXN0cm95IHByb2Nlc3MgaXMgaW50ZXJydXB0ZWQ/XG4qICAgKipJbm9kZSBIYW5kbGluZzoqKiBIb3cgaXMgdGhlIGpvdXJuYWwgaW5vZGUgaGFuZGxlZD8gRG9lcyBpdCBwcm9wZXJseSB1cGRhdGUgdGhlIGlub2RlJ3Mgc3RhdGUgdG8gcmVmbGVjdCB0aGF0IHRoZSBqb3VybmFsIGlzIGdvbmU/IEFueSBjb25zaWRlcmF0aW9ucyBhcm91bmQgdGhlIGxhc3QgbW91bnQgdGltZSwgd2hpY2ggbWlnaHQgbmVlZCB0byBiZSBjbGVhcmVkP1xuKiAgICoqUGVyc2lzdGVuY2U6KiogRG9lcyBpdCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBmdW5jdGlvbiBhcmUgcGVyc2lzdGVkIHRvIGRpc2sgdG8gZ3VhcmFudGVlIGEgY29uc2lzdGVudCBmaWxlc3lzdGVtIHN0YXRlIGFmdGVyIGEgcmVib290P1xuKiAgICoqSW50ZWdyYXRpb246KiogSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIHRoZSBmaWxlc3lzdGVtIGxpZmVjeWNsZT8gSXMgdGhlcmUgYSBjbGVhbiBjYWxsLWNoYWluIGZvciB0aGlzLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHJvYnVzdCB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgZmlsZXN5c3RlbSBpbnN0YWJpbGl0eSwgd2hpY2ggSSBjYW4gdGhlbiBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBhbnkga25vd24gaXNzdWVzLCBvciBDVkUncyByZWxhdGluZyB0byBqb3VybmFsIGRlc3RydWN0aW9uIGluIGV4dDQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxOC4zNjkwOTQxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1Mzg3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuaD00MTY9c3RhdGljIGlubGluZSBpbnQgZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM1LSAqL1xcbmZzL2V4dDQvZXh0NF9qYmQyLmg6NDM2OnN0YXRpYyBpbmxpbmUgaW50IGV4dDRfam91cm5hbF9kZXN0cm95KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgam91cm5hbF90ICpqb3VybmFsKVxcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM3LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMxMi1cXHRcXHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTMxMzpcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cXHRcXHRpZiAoKGVyciBcXHUwMDNjIDApIFxcdTAwMjZcXHUwMDI2ICFhYm9ydGVkKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XFxuZnMvZXh0NC9zdXBlci5jOjUwNDQ6XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNDUtXFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKVxcbmZzL2V4dDQvc3VwZXIuYzo1NzY5OlxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy01NzcwLVxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc5MC1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpIHtcXG5mcy9leHQ0L3N1cGVyLmM6NTc5MTpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc5Mi1cXHR9XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjA2ND1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MDk2LW91dF9qb3VybmFsOlxcbmZzL2V4dDQvc3VwZXIuYzo2MDk3OlxcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjA5OC1vdXRfYmRldjpcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MjEzLVxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3N1cGVyLmM6NjIxNDpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTYyMTUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MjMxLWVycl9vdXQ6XFxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koRVhUNF9TQihzYiksIGpvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy02MjMzLVxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjE4LjQxNTYzODA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU1MzgzMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGBmcy9leHQ0L2V4dDRfamJkMi5oYC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgam91cm5hbCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZm9yIGV4dDQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBzeXN0ZW0gdW5tb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiBqb3VybmFsIHJlcGxheSBhZnRlciBhIGNyYXNoLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgc3BlY2lmaWMgY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBkZWFsbG9jYXRpbmcgdGhlIGpvdXJuYWwgbWV0YWRhdGEsIGZyZWVpbmcgYXNzb2NpYXRlZCBidWZmZXJzLCBhbmQgZW5zdXJpbmcgdGhhdCBubyBsaW5nZXJpbmcgcmVzb3VyY2VzIGNvbXByb21pc2UgZGF0YSBpbnRlZ3JpdHkuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBhbmQgamJkMiBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjIyLjI3MTAyMzUxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHR9XFxuIDQzMTpcXHRcXG4gNDMyOlxcdC8qXFxuIDQzMzpcXHQgKiBQYXNzIGpvdXJuYWwgZXhwbGljaXRseSBhcyBpdCBtYXkgbm90IGJlIGNhY2hlZCBpbiB0aGUgc2JpLVxcdTAwM2VzX2pvdXJuYWwgaW4gc29tZVxcbiA0MzQ6XFx0ICogY2FzZXNcXG4gNDM1OlxcdCAqL1xcbiA0MzY6XFx0c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuIDQzNzpcXHR7XFxuIDQzODpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0LypcXG4gNDQxOlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQgb25seSB0d28gdGhpbmdzIGNhbiBiZSBvcGVyYXRpbmcgb24gdGhlIGpvdXJuYWwuXFxuIDQ0MjpcXHRcXHQgKiBKQkQyIHRocmVhZCBwZXJmb3JtaW5nIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgc19zYl91cGRfd29ya1xcbiA0NDM6XFx0XFx0ICogaXNzdWluZyBzYiB1cGRhdGUgdGhyb3VnaCB0aGUgam91cm5hbC4gT25jZSB3ZSBzZXRcXG4gNDQ0OlxcdFxcdCAqIEVYVDRfSk9VUk5BTF9ERVNUUk9ZLCBuZXcgZXh0NF9oYW5kbGVfZXJyb3IoKSBjYWxscyB3aWxsIG5vdFxcbiA0NDU6XFx0XFx0ICogcXVldWUgc19zYl91cGRfd29yayBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBtYWtlcyBzdXJlIGFueVxcbiA0NDY6XFx0XFx0ICogZXh0NF9oYW5kbGVfZXJyb3IoKSBjYWxscyBmcm9tIHRoZSBydW5uaW5nIHRyYW5zYWN0aW9uIGNvbW1pdCBhcmVcXG4gNDQ3OlxcdFxcdCAqIGZpbmlzaGVkLiBIZW5jZSBubyBuZXcgc19zYl91cGRfd29yayBjYW4gYmUgcXVldWVkIGFmdGVyIHdlXFxuIDQ0ODpcXHRcXHQgKiBmbHVzaCBpdCBoZXJlLlxcbiA0NDk6XFx0XFx0ICovXFxuIDQ1MDpcXHRcXHRleHQ0X3NldF9tb3VudF9mbGFnKHNiaS1cXHUwMDNlc19zYiwgRVhUNF9NRl9KT1VSTkFMX0RFU1RST1kpO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRleHQ0X2ZvcmNlX2NvbW1pdChzYmktXFx1MDAzZXNfc2IpO1xcbiA0NTM6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0ZXJyID0gamJkMl9qb3VybmFsX2Rlc3Ryb3koam91cm5hbCk7XFxuIDQ1NjpcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbCA9IE5VTEw7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdHJldHVybiBlcnI7XFxuIDQ1OTpcXHR9XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdCNlbmRpZlxcdC8qIF9FWFQ0X0pCRDJfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToyMi4yNzExMDAyNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTk2Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEpvdXJuYWwgRGVzdHJ1Y3Rpb24gaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGV4dDRfam91cm5hbF9kZXN0cm95YCBmdW5jdGlvbiBhbmQgSSBzZWUgaXQncyBzZXR0aW5nIGBzYmktXHUwMDNlc19qb3VybmFsID0gTlVMTDtgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHByZXZlbnRzIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8uIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGpvdXJuYWwgbWlnaHQgYmUgYWNjZXNzZWQgYWZ0ZXIgaXQncyBiZWVuIGRlc3Ryb3llZC4gVGhlIHBhdGggdG8gdGhlIGlzc3VlIGxvb2tzIHRvIGJlIGBmYWlsZWRfbW91bnQ2OmAgd2hpY2gsIGlmIHRyaWdnZXJlZCwgd291bGQgbGVhZCB0byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGJlaW5nIGNhbGxlZC4gVGhlbiwgaWYgc29tZXRoaW5nIGluIGBmYWlsZWRfbW91bnRfd3E6YCBsYXRlciB0cmllcyB0byB1c2UgdGhlIGpvdXJuYWwsIHdlJ3JlIGluIHRyb3VibGUuXG5cbkhtbSwgdGhlIGNvbW1lbnRzIHNheSB0aGF0IHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYGV4dDRfbWJfcmVsZWFzZShzYilgLiBTcGVjaWZpY2FsbHksIHRoZSBjb21tZW50IG5vdGVzLCBcIlRoZSBsYXN0IGNvbW1pdCBjYW4gcmUtYXJtIHNfZGlzY2FyZF93b3JrLCBzbyBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlwiIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6IFNvLCBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgcmVzcG9uc2libGUgZm9yIGZsdXNoaW5nLCBhbmQgdGhhdCBmbHVzaGluZyBjYW4gcmUtYXJtIGBzX2Rpc2NhcmRfd29ya2AsIHdoaWNoLCBpZiB0aGUgam91cm5hbCBpcyBhbHJlYWR5IGRlc3Ryb3llZCwgd2lsbCBjYXVzZSBhIGNyYXNoLiBSaWdodD8gVGhlIGNvbW1pdCBpbXBsaWVzIGBleHQ0X21iX3JlbGVhc2VgIGlzIGZsdXNoaW5nIGBzX2Rpc2NhcmRfd29ya2AuIExldCBtZSBjaGVjayB0aGUgY29kZSBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gc2VlIGlmIHRoYXQncyBhY2N1cmF0ZS4gR290dGEgZGlnIGRlZXBlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MjcuMjQxMDY5ODI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4MjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTUtZXh0ZXJuIGV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0Olxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0xMjM9c3RhdGljIHZvaWQgbWJ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVxcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjEyNzpcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVxcdGtmcmVlKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX3F1ZXVlKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg1PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkwPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3Nj1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTE9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE2PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDY5OmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NS1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDQ6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMDpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NDpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyNzg6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzIyLVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc2NS1cXHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcXG5mcy9leHQ0L3N1cGVyLmM6NTc2NjpcXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxcbmZzL2V4dDQvc3VwZXIuYy01NzY3LVxcdCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjktXFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jOjU3NzA6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MjcuMjg3NTU3MjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTU3OTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgZXh0NF9tYl9yZWxlYXNlYCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWxlYXNlIG9mIG1ldGFkYXRhIGJsb2Nrcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhbGxvY2F0aW9uIGNvbnRleHQuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGV4dDQgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHByb2Nlc3MsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgc3lzdGVtLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGl0IGltcGxlbWVudHMgdG8gZGVhbCB3aXRoIGluY29uc2lzdGVuY2llcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGZhbWlsaWFyIHRlcnJpdG9yeSwgYnV0IEkgYWxzbyBleHBlY3QgdGhlcmUgbWlnaHQgYmUgbnVhbmNlcyB0aGF0IEkgY2FuIGxlYXJuIGZyb20uIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MzAuNzAzMzU0NjE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21iYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODgwOlxcdFxcdFxcdGNvdW50Kys7XFxuMzg4MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7XFxuMzg4MjpcXHRcXHR9XFxuMzg4MzpcXHRcXHRyZXR1cm4gY291bnQ7XFxuMzg4NDpcXHR9XFxuMzg4NTpcXHRcXG4zODg2OlxcdHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMzg4NzpcXHR7XFxuMzg4ODpcXHRcXHRleHQ0X2dyb3VwX3Qgbmdyb3VwcyA9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYik7XFxuMzg4OTpcXHRcXHRleHQ0X2dyb3VwX3QgaTtcXG4zODkwOlxcdFxcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcXG4zODkxOlxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcXG4zODkyOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjM4OTM6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbjM4OTQ6XFx0XFx0aW50IGNvdW50O1xcbjM4OTU6XFx0XFxuMzg5NjpcXHRcXHQvKlxcbjM4OTc6XFx0XFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxcbjM4OTg6XFx0XFx0ICovXFxuMzg5OTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAwOlxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbjM5MDE6XFx0XFxuMzkwMjpcXHRcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG4zOTAzOlxcdFxcdGlmIChncm91cF9pbmZvKSB7XFxuMzkwNDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbmdyb3VwczsgaSsrKSB7XFxuMzkwNTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4zOTA2OlxcdFxcdFxcdFxcdGdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpO1xcbjM5MDc6XFx0XFx0XFx0XFx0aWYgKCFncmluZm8pXFxuMzkwODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zOTA5OlxcdFxcdFxcdFxcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XFxuMzkxMDpcXHRcXHRcXHRcXHRleHQ0X2xvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTE6XFx0XFx0XFx0XFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcXG4zOTEyOlxcdFxcdFxcdFxcdGlmIChjb3VudClcXG4zOTEzOlxcdFxcdFxcdFxcdFxcdG1iX2RlYnVnKHNiLCBcXFwibWJhbGxvYzogJWQgUEFzIGxlZnRcXFxcblxcXCIsXFxuMzkxNDpcXHRcXHRcXHRcXHRcXHRcXHQgY291bnQpO1xcbjM5MTU6XFx0XFx0XFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTY6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcXG4zOTE3OlxcdFxcdFxcdH1cXG4zOTE4OlxcdFxcdFxcdG51bV9tZXRhX2dyb3VwX2luZm9zID0gKG5ncm91cHMgK1xcbjM5MTk6XFx0XFx0XFx0XFx0XFx0RVhUNF9ERVNDX1BFUl9CTE9DSyhzYikgLSAxKSBcXHUwMDNlXFx1MDAzZVxcbjM5MjA6XFx0XFx0XFx0XFx0RVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKTtcXG4zOTIxOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fbWV0YV9ncm91cF9pbmZvczsgaSsrKVxcbjM5MjI6XFx0XFx0XFx0XFx0a2ZyZWUoZ3JvdXBfaW5mb1tpXSk7XFxuMzkyMzpcXHRcXHRcXHRrdmZyZWUoZ3JvdXBfaW5mbyk7XFxuMzkyNDpcXHRcXHR9XFxuMzkyNTpcXHRcXHRleHQ0X21iX2F2Z19mcmFnbWVudF9zaXplX2Rlc3Ryb3koc2JpKTtcXG4zOTI2OlxcdFxcdGV4dDRfbWJfbGFyZ2VzdF9mcmVlX29yZGVyc19kZXN0cm95KHNiaSk7XFxuMzkyNzpcXHRcXHRrZnJlZShzYmktXFx1MDAzZXNfbWJfb2Zmc2V0cyk7XFxuMzkyODpcXHRcXHRrZnJlZShzYmktXFx1MDAzZXNfbWJfbWF4cyk7XFxuMzkyOTpcXHRcXHRpcHV0KHNiaS1cXHUwMDNlc19idWRkeV9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjMwLjcwMzcwMDc1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDA5ODk0MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBgZXh0NF9tYl9yZWxlYXNlYCBjYWxscyBgZmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspYC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoLCBhbmQgaXQgc2F5czogKlwiVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXCIqXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBzZWNvbmQuIElmIGBleHQ0X21iX3JlbGVhc2VgIGlzIGFscmVhZHkgZmx1c2hpbmcgdGhpcyB3b3JrLCBob3cgY2FuIHRoZSAqbGFzdCBjb21taXQqIHJlLWFybSBgc19kaXNjYXJkX3dvcmtgPyBBaCwgcmlnaHQuIFRoZSBjb21tZW50IG1lYW5zIHRoZSAqZmluYWwgY29tbWl0IG9mIHRoZSBqb3VybmFsKiBjYW4gcmUtYXJtIGl0LiBUaGUgaXNzdWUgbXVzdCBiZSB0aGF0IGlmIHRoZSBqb3VybmFsIGlzIGRlc3Ryb3llZCBiZWZvcmUgYGV4dDRfbWJfcmVsZWFzZWAsIHRoZSBqb3VybmFsIGRlc3RydWN0aW9uIGZvcmNlcyBhIGNvbW1pdCB3aGljaCAqbWlnaHQqIHJlLWFybSB0aGUgd29yayBxdWV1ZSwgdGhlbiBgZXh0NF9tYl9yZWxlYXNlYCB3YWl0cyBmb3IgaXQuIElmIHRoZSBqb3VybmFsICppc24ndCogZGVzdHJveWVkIGZpcnN0LCBgZXh0NF9tYl9yZWxlYXNlYCBmbHVzaGVzIHRoZSB3b3JrcXVldWUgYW5kIHRoZW4gbGF0ZXIgb24gYGV4dDRfam91cm5hbF9kZXN0cm95YCBmb3JjZXMgYW5vdGhlciBjb21taXQsIHdoaWNoIG1pZ2h0IHJlLWFybSBpdC4gQnV0IG5vdywgaXQncyBhcm1lZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC9mcmVlZCEgVGhpcyBsZWFkcyB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IGV4ZWN1dGVzIGFmdGVyIHRoZSBgc2JpYCBpcyBsb25nIGdvbmUuXG5cblNvLCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlIHRoYXQgY291bGQgaGFwcGVuIGR1cmluZyBhIG1vdW50IGZhaWx1cmUuIEhtbSwgaXMgdGhpcyBhIHJlYWNoYWJsZSBzY2VuYXJpbz8gWWVzLCBtb3VudCBmYWlsdXJlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBVQUYgaW4gYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCwgc28gaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkxldCdzIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfRVhUNF9GU2AgaXMgb2J2aW91c2x5IHJlcXVpcmVkLiBCdXQgd2hhdCBhYm91dCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byBgc19kaXNjYXJkX3dvcmtgIG9yIGBleHQ0X2pvdXJuYWxfZGVzdHJveWA/IEkgbmVlZCB0byBjaGVjayB0aG9zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgc19kaXNjYXJkX3dvcmtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjM3LjcxMzU5Nzk0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NjQwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic19kaXNjYXJkX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9iYWxsb2MuYz02ODk9aW50IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcylcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtNzA4LVxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnNiaS1cXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nKTtcXG5mcy9leHQ0L2JhbGxvYy5jOjcwOTpcXHRcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L2JhbGxvYy5jLTcxMC1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZzYmktXFx1MDAzZXNfcmV0cnlfYWxsb2NfcGVuZGluZyk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTY3Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlzY2FyZF9saXN0O1xcbmZzL2V4dDQvZXh0NC5oOjE2Nzg6XFx0c3RydWN0IHdvcmtfc3RydWN0IHNfZGlzY2FyZF93b3JrO1xcbmZzL2V4dDQvZXh0NC5oLTE2NzktXFx0YXRvbWljX3Qgc19yZXRyeV9hbGxvY19wZW5kaW5nO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9MzY0Mj1zdGF0aWMgdm9pZCBleHQ0X2Rpc2NhcmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy0zNjQ0LVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih3b3JrLFxcbmZzL2V4dDQvbWJhbGxvYy5jOjM2NDU6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbywgc19kaXNjYXJkX3dvcmspO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTM2NDYtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM3MTY9aW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzc4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6Mzc4MzpcXHRJTklUX1dPUksoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX3dvcmssIGV4dDRfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy0zNzg0LVxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nLCAwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4ODY9dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTM4OTgtXFx0ICovXFxuZnMvZXh0NC9tYmFsbG9jLmM6Mzg5OTpcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy0zOTAwLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDAxOT12b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00MDM3LVxcdFxcdGlmICh3YWtlKVxcbmZzL2V4dDQvbWJhbGxvYy5jOjQwMzg6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDAzOS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVxcdC8qXFxuZnMvZXh0NC9zdXBlci5jOjU3NjU6XFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuZnMvZXh0NC9zdXBlci5jLTU3NjYtXFx0ICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MzcuNzY4MjY4MjkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDgyOTQwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIGV4dDQgRmlsZXN5c3RlbSBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBleHQ0IGJ1ZyBmaXggcmVsYXRlZCB0byBgc19kaXNjYXJkX3dvcmtgLiBJJ20gc2VlaW5nIHRoYXQgYHNfZGlzY2FyZF93b3JrYCBnZXRzIGluaXRpYWxpemVkIGR1cmluZyBgZXh0NF9tYl9pbml0YCwgYW5kIHRoZW4gZ2V0cyBxdWV1ZWQgdXAgYnkgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYC4gVGhhdCdzIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGxpa2UgYSB0cmFuc2FjdGlvbiBjb21taXQgdHJpZ2dlcmVkIGR1cmluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHdhcyBxdWV1aW5nIHVwIHRoaXMgd29yaywgYnV0IGJlY2F1c2UgYGV4dDRfbWJfcmVsZWFzZWAgaGFkIGFscmVhZHkgYmVlbiBjYWxsZWQsIHRoZSB3b3JrIHdhcyBsZWZ0IHBlbmRpbmcuXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGVycm9yIHBhdGggaW4gYF9fZXh0NF9maWxsX3N1cGVyYCB0byBjYWxsIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcgdGFyZ2V0cy5cblxuT2J2aW91c2x5LCBgZXh0NF9maWxsX3N1cGVyYCAob3IgcmF0aGVyLCBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQpIGlzIGEga2V5IGVudHJ5IHBvaW50LiBUaGlzIGlzIHRoZSBtb3VudCBwYXRoLCByaWdodD8gQW5kIHdlIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgZnV6emluZyBtb3VudCBjYWxscyBmb3IgZXh0NC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFdlIGFsc28gd2FudCB0byBoaXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLlxuXG5JIG5lZWQgdG8gbG9vayBhdCBgZXh0NF9tYl9yZWxlYXNlYCBiZWNhdXNlIGl0J3MgcGFydCBvZiB0aGUgb3JpZ2luYWwgcHJvYmxlbS4gQW5kIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaXMgaW52b2x2ZWQgYXMgd2VsbC4gV2FpdCBhIG1pbnV0ZS4uLmlzbid0IGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgZGVmaW5lZCBhcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0NF9qYmQyLmhgPyBUaGF0IG1lYW5zIGl0IG1pZ2h0IG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MhIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgaW5saW5lcyB0aGF0LiBJZiBpdCdzIGlubGluZWQsIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgaW5kaXJlY3RseSB0YXJnZXRlZC4gUGVyaGFwcyB0aGF0IGNhbiBiZSBkb25lIGJ5IGhpdHRpbmcgdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjQzLjkxNjU2NDk0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NDc1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5oPTQxNj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuaC00MzUtICovXFxuZnMvZXh0NC9leHQ0X2piZDIuaDo0MzY6c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuZnMvZXh0NC9leHQ0X2piZDIuaC00Mzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo0My45NTkwMTY3NDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMjE0Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEV4dDQgRmlsZXN5c3RlbSBDb2RlKipcblxuQWxyaWdodCwgeWVwLCBjb25maXJtZWQsIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCBpcyBgc3RhdGljIGlubGluZWAuIFRoYXQncyBpbXBvcnRhbnQuIEdpdmVuIHRoYXQsIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gYF9fZXh0NF9maWxsX3N1cGVyYCBhbmQgYGV4dDRfbWJfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGluZGVlZCBkZWNsYXJlZCBhcyBzdGF0aWMsIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24gYW5kIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIEJldHRlciB0byBkb3VibGUtY2hlY2sgdGhhdCBlYXJseSB0aGFuIHdhc3RlIHRpbWUgZG93biBhIHdyb25nIHBhdGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NDguNzgxMTY4NjE0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk2NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTUzMzk9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNDUtXFxuZnMvZXh0NC9zdXBlci5jOjUzNDY6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUzNDcte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4MjI9c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4NDEtXFxuZnMvZXh0NC9zdXBlci5jOjU4NDI6XFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTg0My1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NDguODI1MTM4NTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzY0ODIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIElubGluaW5nIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoaW5raW5nLCBcIk9rYXksIHRoaXMgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cIiBJIGltbWVkaWF0ZWx5IHJlYWxpemUsIFwiSXQgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBpbmxpbmVkLCBidXQgaXQncyBhIHNpemFibGUgY2h1bmsgb2YgY29kZS5cIiBTaXplIGlzIGEga2V5IGZhY3Rvci4gQSBsYXJnZSBmdW5jdGlvbiBpcyBsZXNzIGxpa2VseSB0byBiZSBpbmxpbmVkLCBldmVuIGlmIHN0YXRpYy4gQnV0IHRoZW4gYSB0aG91Z2h0IGhpdHMgbWU6IFwiV2FpdCBhIHNlY29uZCwgYGV4dDRfZmlsbF9zdXBlcmAgaXMgKmFsc28qIHN0YXRpYyFcIiBUaGF0IG1ha2VzIG1lIHBhdXNlLiBOb3cgSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBgZXh0NF9nZXRfdHJlZWAgdG8gc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbXBhY3RzIGhvdyB0aGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgdGhlbSwgYW5kIHdoZXRoZXIgaW5saW5pbmcgaXMgYSBmYWN0b3IgdG8gY29uc2lkZXIgaW4gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1My43MDE2MjQwNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTA4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZ2V0X3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XFxuZnMvZXh0NC9zdXBlci5jOjkyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYy05My1zdGF0aWMgaW50IGV4dDRfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXh0NF9jb250ZXh0X29wcyA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTI2LVxcdC5wYXJzZV9wYXJhbVxcdD0gZXh0NF9wYXJzZV9wYXJhbSxcXG5mcy9leHQ0L3N1cGVyLmM6MTI3OlxcdC5nZXRfdHJlZVxcdD0gZXh0NF9nZXRfdHJlZSxcXG5mcy9leHQ0L3N1cGVyLmMtMTI4LVxcdC5yZWNvbmZpZ3VyZVxcdD0gZXh0NF9yZWNvbmZpZ3VyZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01ODIyPXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODcxLVxcbmZzL2V4dDQvc3VwZXIuYzo1ODcyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTU4NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1My43NDY1MzY3NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTA4ODQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgU3RhdGljIEZ1bmN0aW9ucyBpbiBleHQ0KipcblxuSG1tLCBzbyBgZXh0NF9nZXRfdHJlZWAgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMsIGlzbid0IGl0PyBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSdtIGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgcmVmYWN0b3Jpbmcgb3Bwb3J0dW5pdGllcy4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHByb2JsZW1hdGljIGluIGEgbW9kdWxhciBjb250ZXh0LCBkZXBlbmRpbmcgb24gaG93IHRoZXkncmUgdXNlZC4gVGhleSB0eXBpY2FsbHkgbGltaXQgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciByZXVzZSBvdXRzaWRlIHRoZWlyIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgdW5sZXNzIHNwZWNpZmljYWxseSBleHBvc2VkIHRocm91Z2ggYSB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlLlxuXG5Ob3csIGxldCBtZSB0aGluay4uLiB3aGVyZSBlbHNlIG1pZ2h0IEkgZmluZCB0aGlzIHBhdHRlcm4/IFdoYXQgYWJvdXQgYGV4dDRfbWJfcmVsZWFzZWA/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gSXMgaXQgc3RhdGljIGFzIHdlbGw/IElmIGl0ICppcyosIHRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0J3MgKm5vdCosIHRoZW4gcGVyaGFwcyBpdOKAmXMgcGFydCBvZiBzb21lIG1vcmUgZ2VuZXJhbCBBUEkuIFRoZSBiZWhhdmlvciBvZiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbGFjayB0aGVyZW9mLCBtaWdodCBiZSB0ZWxsaW5nIG1lIHNvbWV0aGluZyBpbXBvcnRhbnQgYWJvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaW50ZW5kZWQgc2NvcGUgb2YgdGhhdCBjb2RlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjQ0NzYyNzM4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMzAxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvbWJhbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg1PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkwPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3Nj1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTE9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE2PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDY5OmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NS1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDQ6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMDpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NDpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyNzg6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1Ny40OTE2NjMyNDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MDM2NDE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgYW5kIHRyeWluZyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIGBleHQ0X21iX3JlbGVhc2VgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgIGlzIGEgYmlnIGNsdWUg4oCTIGl0IG1lYW5zIGl0J3MgZXhwb3J0ZWQsIGxpa2VseSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMsIGFzIGl0IHByb2JhYmx5IHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyB1c2FnZSBmcm9tIGEgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcGVyc3BlY3RpdmUsIGdpdmVuIGl0J3MgYSBnZW5lcmFsbHkgaW1wb3J0YW50IGZ1bmN0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGBleHQ0X3B1dF9zdXBlcmAuIEkga25vdyB0aGF0IGZ1bmN0aW9uLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0IGRlYWxzIHdpdGggdW5tb3VudGluZyB0aGUgZmlsZXN5c3RlbSwgYW5kIHRoYXQgaXQgZW5kcyB1cCBjYWxsaW5nIGBleHQ0X21iX3JlbGVhc2VgIHRvby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBpbnZlc3RpZ2F0ZSBgZXh0NF9tYl9yZWxlYXNlYCBzbyBJIGRvbid0IG1pc3MgYW55IGNyaXRpY2FsIGNvbnRleHQsIGFuZCBJIHNob3VsZCBhbHNvIHNlZSBob3cgdGhlIGNhbGxzIHRvIGBleHQ0X21iX3JlbGVhc2VgIGFyZSBoYW5kbGVkIGluIGBleHQ0X3B1dF9zdXBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDEuNTMyMDMwMDY3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU2NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3B1dF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTEyNjk9c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxcbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjc3LVxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTY3ODpcXHQucHV0X3N1cGVyXFx0PSBleHQ0X3B1dF9zdXBlcixcXG5mcy9leHQ0L3N1cGVyLmMtMTY3OS1cXHQuc3luY19mc1xcdD0gZXh0NF9zeW5jX2ZzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowMS41NzY2MDA4NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NTI5NDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgRVhUNCBGaWxlc3lzdGVtIE1vdW50IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBtb3VudCBwcm9jZXNzIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYGV4dDRfcHV0X3N1cGVyYCwgSSByZW1lbWJlciB0aGF0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGluZm9ybWF0aXZlIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGV4dGVybmFsIGNhbGxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgc3ltYm9sLiBgZXh0NF9tYl9yZWxlYXNlYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBmb2N1cyBvbiBpbiB0aGlzIGNvbnRleHQuXG5cbkhvbGQgb24sIEkgYWxzbyByZWNhbGwgdGhhdCBgZXh0NF9maWxsX3N1cGVyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgbm90IGlkZWFsIGZvciB0cmFjaW5nLCBidXQgc28gaXMgYGV4dDRfZ2V0X3RyZWVgLiBIbW0sIHRoaXMgaXMgYmVjb21pbmcgdHJpY2t5LiBBcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIG1vdW50IHBhdGggdGhhdCBtaWdodCBiZSBlYXNpZXIgdG8gZm9sbG93PyBJIG5lZWQgdG8gZmluZCBhbiBlbnRyeSBwb2ludCB0aGF0J3MgZXhwb3NlZC4gTGV0IG1lIGNoZWNrIGBleHQ0X2luaXRfZnNfY29udGV4dGAgLS0gdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEknbGwgc2VlIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowNS41MjE4OTc4OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk5NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfaW5pdF9mc19jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9OTQ9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmMtOTYtc3RhdGljIHZvaWQgZXh0NF9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEzND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzNi1cXHQubmFtZVxcdFxcdFxcdD0gXFxcImV4dDJcXFwiLFxcbmZzL2V4dDQvc3VwZXIuYzoxMzc6XFx0LmluaXRfZnNfY29udGV4dFxcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXh0NC9zdXBlci5jLTEzOC1cXHQucGFyYW1ldGVyc1xcdFxcdD0gZXh0NF9wYXJhbV9zcGVjcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNTA9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNTItXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQzXFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6MTUzOlxcdC5pbml0X2ZzX2NvbnRleHRcXHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxcbmZzL2V4dDQvc3VwZXIuYy0xNTQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjAzNj1zdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTIwNTAtXFxuZnMvZXh0NC9zdXBlci5jOjIwNTE6aW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtMjA1Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NzUxOT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0NF9mc190eXBlID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTc1MjEtXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQ0XFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6NzUyMjpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcXG5mcy9leHQ0L3N1cGVyLmMtNzUyMy1cXHQucGFyYW1ldGVyc1xcdFxcdD0gZXh0NF9wYXJhbV9zcGVjcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDUuNTY2OTA2MjYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjQxNjg2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgZXh0NCBGaWxlc3lzdGVtIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZXh0NCBjb2RlLi4uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHVzZWZ1bDsgSSBjYW4gcG90ZW50aWFsbHkgdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGBleHQ0X21iX3JlbGVhc2VgIGFzIGNydWNpYWwgZm9jdXMgcG9pbnRzIGZvciBhbmFseXNpcywgZ2l2ZW4gdGhleSdyZSBub3QgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYGV4dDRfbWJfcmVsZWFzZWAuLi4gUmlnaHQsIGl0J3MgY2FsbGVkIGluIGVycm9yIHBhdGhzIGR1cmluZyB0aGUgbW91bnQgcHJvY2VzcywgYW5kIGFsc28gaW4gYGV4dDRfcHV0X3N1cGVyYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGNsZWFudXAuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbGlmZWN5Y2xlPyBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgZG9lc24ndCBwcm92aWRlIGEgdXNlZnVsIHBvaW50IHRvIGxvb2sgYXQgbW9yZSBicm9hZGx5LiBXaGF0IGFib3V0IGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWA/IEFoIHllcywgaXQgcXVldWVzIGBzX2Rpc2NhcmRfd29ya2AuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgdG91Y2hlcyBvbiBwb3RlbnRpYWwgYmFja2dyb3VuZCB0YXNrcyBhbmQgZGF0YSBzYW5pdGl6YXRpb24uIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlc2UgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjEwLjAzMTA3NzQ2MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzExNT1leHRlcm4gaW50IGV4dDRfdHJpbV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzdHJpbV9yYW5nZSAqKTtcXG5mcy9leHQ0L2V4dDQuaDozMTE2OmV4dGVybiB2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpO1xcbmZzL2V4dDQvZXh0NC5oLTMxMTctZXh0ZXJuIHZvaWQgZXh0NF9tYl9tYXJrX2JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM5NzM9c3RhdGljIHZvaWQgZXh0NF9mcmVlX2RhdGFfaW5fYnVkZHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQwMTgtICovXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDAxOTp2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDAyMC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA5PXN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTE0LVxcbmZzL2V4dDQvc3VwZXIuYzo1MTU6XFx0ZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEoc2IsIHR4bi1cXHUwMDNldF90aWQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MTYtXFx0ZXh0NF9tYXliZV91cGRhdGVfc3VwZXJibG9jayhzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjEwLjA3ODE4NDE5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI2ODAyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZpeCoqXG5cbk9rYXksIHNvIGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCwgYWxvbmcgd2l0aCBgZXh0NF9tYl9yZWxlYXNlYCwgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBrZWVwIG15IGV5ZSBvbiB0aG9zZSBzeW1ib2xzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBBaCwgeWVzLCBgQ09ORklHX0pCRDJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19FWFQ0X0ZTYC4gUGVyZmVjdCwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5MZXQncyBkaXN0aWxsIHRoaXM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBEZWZpbml0ZWx5LCB5ZXMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGV4dDRfbWJfcmVsZWFzZWAsIGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWAsIGFuZCBhbHNvIGBleHQ0X2luaXRfZnNfY29udGV4dGAuIFRoaXMgc2VlbXMgcmVsZXZhbnQgdG8gaW5pdGlhbGlzYXRpb24gd2hpY2ggaXMgcGFydCBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogT25seSBgRVhUNF9GU2AgaXMgcmVxdWlyZWQuXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aXRoaW4gZXh0NCdzIG1vdW50IGVycm9yIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSB0aW1pbmcgb2Ygam91cm5hbCBkZXN0cnVjdGlvbiBpbiByZWxhdGlvbiB0byBgZXh0NF9tYl9yZWxlYXNlYCdzIGZsdXNoaW5nIG9mIGBzX2Rpc2NhcmRfd29ya2AuIElmIHRoZSBqb3VybmFsIGlzbid0IGZ1bGx5IGNsZWFuZWQgdXAgKmJlZm9yZSogdGhhdCByZWxlYXNlIGZ1bmN0aW9uIGRvZXMgaXRzIHRoaW5nLCBhIGxhdGVyIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gY2FuIHJlLWVuYWJsZSBgc19kaXNjYXJkX3dvcmtgLiBUaGlzIHNldHMgdXAgdGhlIHBlcmZlY3Qgc2NlbmFyaW8gZm9yIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IHRyaWVzIHRvIGV4ZWN1dGUgaXRzIHdvcmsgKmFmdGVyKiB0aGUgc3VwZXJibG9jaydzIGRhdGEgaXMgZnJlZWQuIEl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHRlc3QgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5NCwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTYuNjA0OTg5MTMyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwOTcwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhXCIsXG4gICAgXCJleHQ0X2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgICBcImV4dDRfaW5pdF9mc19jb250ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aC4gSWYgdGhlIGpvdXJuYWwgaXMgbm90IGRlc3Ryb3llZCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBzX2Rpc2NhcmRfd29yaywgYSBzdWJzZXF1ZW50IGpvdXJuYWwgZGVzdHJveSBjYW4gZm9yY2UgYSBjb21taXQgdGhhdCByZS1hcm1zIHNfZGlzY2FyZF93b3JrLCBsZWFkaW5nIHRvIGEgVUFGIHdoZW4gdGhlIHdvcmtxdWV1ZSBleGVjdXRlcyB0aGUgd29yayBhZnRlciB0aGUgc3VwZXJibG9jayBpbmZvIGlzIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTYuNjg3MDkzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxMDc3MTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjE2LjY4NzY0Mjc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1MTAyMTgxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDRiNjExMmU1ZDZjNTkuLjU4YjIxMDYzN2I1N2IgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU3NjEsNiArNTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbitcdC8qXG4rXHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcbitcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG4rXHQgKi9cbitcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKVxuK1x0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoxNi42ODc2NDQwNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEwMTg5MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBleHQ0IEVycm9yIFBhdGggRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBhbiBlcnJvciBwYXRoIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4dDQvc3VwZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBhIHByZXZpb3VzIGNvbW1pdCBpbnRyb2R1Y2VkIHRoZSBwb3RlbnRpYWwgZm9yIGBzX2Rpc2NhcmRfd29ya2AgdG8gYmUgcmUtYXJtZWQsIHdoaWNoLCBkdXJpbmcgYSBtb3VudCBmYWlsdXJlLCBjb3VsZCBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrLCBvciBldmVuIGEgY3Jhc2guIFRoZSBjb3JlIG9mIHRoaXMgZml4IGlzIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3koKWAgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZSgpYCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdy4gVGhpcyBkZXN0cnVjdGlvbiBvZiB0aGUgam91cm5hbCAqYmVmb3JlKiBmcmVlaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3Igc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUgdG8gcHJldmVudCB0aGUgYWZvcmVtZW50aW9uZWQgaXNzdWVzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIHNhZmV0eSBuZXQuIEl0IGVuc3VyZXMgdGhhdCB0aGUgam91cm5hbCBpcyBwcm9wZXJseSBjbGVhbmVkIHVwIGJlZm9yZSBwb3RlbnRpYWxseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmcmVlZCBtZW1vcnkuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgbXkgYXNzZXNzbWVudDsgdGhlIGFkZGVkIGBpZiAoc2JpLVx1MDAzZXNfam91cm5hbClgIGNoZWNrIGlzIGEgbmljZSB0b3VjaCwgZW5zdXJpbmcgdGhlIGpvdXJuYWwgYWN0dWFsbHkgZXhpc3RzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgaXQsIGZvciBleGFtcGxlIGluIGEgbm9uLWpvdXJuYWxlZCBmaWxlc3lzdGVtLCB3aGljaCBjb3VsZCB0aGVuIGNhdXNlIG90aGVyIHByb2JsZW1zLlxuXG5JIHNlZSBubyBldmlkZW5jZSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGZpeCBpcyBwdXJlbHkgYW4gZXJyb3IgcGF0aCBjbGVhbnVwOyBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gU3RhbmRhcmQgdG9vbHMsIGxpa2UgS0FTQU4sIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhlIHR5cGVzIG9mIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE15IGRldGVybWluYXRpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoyNS4xOTc4Mzc1OTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IG1vdW50IHRvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIHJlbGVhc2luZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIChgZXh0NF9tYl9yZWxlYXNlYCkuIFRoaXMgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVyZSBgc19kaXNjYXJkX3dvcmtgIGNvdWxkIGJlIHJlLWFybWVkIGJ5IHRoZSBsYXN0IGNvbW1pdC4gVGhpcyB0eXBlIG9mIGJ1ZyAodXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGlzIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 05:37:43 +0000 UTC FinishedAt: 2026-08-20 06:10:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "cb8a75eec0877810b50aa1c5a833f929525cd2ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9bb628b2-bbc7-4cf6-815a-e3d4ab08357b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_mb_release", "ext4_process_freed_data", "ext4_init_fs_context" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X21iX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7ZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9pbml0X2ZzX2NvbnRleHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IG1vdW50IHRvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIHJlbGVhc2luZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIChgZXh0NF9tYl9yZWxlYXNlYCkuIFRoaXMgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVyZSBgc19kaXNjYXJkX3dvcmtgIGNvdWxkIGJlIHJlLWFybWVkIGJ5IHRoZSBsYXN0IGNvbW1pdC4gVGhpcyB0eXBlIG9mIGJ1ZyAodXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGlzIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCA0YjYxMTJlNWQ2YzU5Li41OGIyMTA2MzdiNTdiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01NzYxLDYgJiM0Mzs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gZmFpbGVkX21vdW50NzpcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiBmYWlsZWRfbW91bnQ2OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG4mIzQzO1x0ICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbiYjNDM7XHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuIFx0ZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7XG4gZmFpbGVkX21vdW50NTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTFjZTE1Y2UxMmQ4NTZmYmM4NGQyNTI5YjQ0MmQ4NTU4M2RlMjNlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA4OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDRiNjExMmU1ZDZjNTkuLjU4YjIxMDYzN2I1N2IgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTU3NjEsNiAmIzQzOzU3NjEsMTIgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIGZhaWxlZF9tb3VudDc6CiAJZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpOwogZmFpbGVkX21vdW50NjoKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlCiYjNDM7CSAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2JpLSZndDtzX2pvdXJuYWwpCiYjNDM7CQlleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKTsKIAlleHQ0X21iX3JlbGVhc2Uoc2IpOwogCWV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpOwogZmFpbGVkX21vdW50NToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBleHQ0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgbW91bnQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGQgYSBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgd2l0aCB0aGUgYXJndW1lbnRzIGBzYmlgIGFuZCBgc2JpLSZndDtzX2pvdXJuYWxgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBjbGVhbmluZyB1cCBhIGpvdXJuYWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBlcmJsb2NrLCBsaWtlbHkgd2hlbiBhIG1vdW50IG9wZXJhdGlvbiBoYXMgZmFpbGVkLiBUaGUgbGFiZWwgYGZhaWxlZF9tb3VudDZgIGlzIGEgZGVjZW50IGNsdWU7IHRoYXQgd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGNhbGwgaXMgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBlcnJvciBwYXRoIG9mIGBleHQ0X2ZpbGxfc3VwZXJgLCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgNTc2MSBhbmQgc2VlIHByZWNpc2VseSB3aGVyZSB0aGlzIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaXMgYmVpbmcgaW5qZWN0ZWQsIHdoYXQgb3RoZXIgY29udGV4dHVhbCBjb2RlIGlzIGFyb3VuZCBpdCwgYW5kIHdoYXQgZmFpbHVyZSBzY2VuYXJpb3MgaXQmIzM5O3MgaW50ZW5kZWQgdG8gaGFuZGxlLiBJdCYjMzk7cyBhIGNsZWFudXAgc3RlcDsgaG9wZWZ1bGx5LCBpdCBwcmV2ZW50cyByZXNvdXJjZSBsZWFrcyBvciBjb3JydXB0aW9uIGlmIHRoZSBtb3VudCBmYWlscyBtaWQtb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhaWxlZF9tb3VudDY6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjItXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG5mcy9leHQ0L3N1cGVyLmM6NTc2MzpmYWlsZWRfbW91bnQ2OlxuZnMvZXh0NC9zdXBlci5jLTU3NjQtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGluLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIHRob3VnaCB0aGUgdGhvdWdodHMgYXJlIG15IG93bjoKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIENvbnRleHQqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCBpcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGV4cGVjdGVkIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgJiMzNDt3aHkmIzM0OyB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIGhvdyBJIGRpc3NlY3QgdGhlICYjMzQ7aG93JiMzNDsuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBvdGhlcnMsIGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYWlsZWRfbW91bnQ2OiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzYyLVx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjU3NjM6ZmFpbGVkX21vdW50NjpcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWxseSBVbnVzZWQgRnVuY3Rpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgb3V0cHV0IGZyb20sIHByb2JhYmx5LCBhIGJ1aWxkIG9yIGFuYWx5c2lzIHRvb2wsIGFuZCBpdCBsb29rcyBsaWtlIGAtLXNob3ctZnVuY3Rpb25gIGlzIHRoZSBjdWxwcml0LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGRlZmF1bHQsIHNvIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuIEhvd2V2ZXIsIHRoZSBvdXRwdXQgaXMgZmxhZ2dpbmcgYGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkYC4gSG1tLCB0aGF0JiMzOTtzIG5vdCBpZGVhbC4gQSAmIzM0O21heWJlX3VudXNlZCYjMzQ7IGF0dHJpYnV0ZSBzaG91bGRuJiMzOTt0IGJlIHNob3dpbmcgdXAgaWYgdGhlIGZ1bmN0aW9uICppcyogYWN0dWFsbHkgdXNlZCwgcmlnaHQ/IFRoZSB0b29sICpzaG91bGQqIGJlIGV4Y2x1ZGluZyB0cnVseSB1bnVzZWQgZnVuY3Rpb25zLiBTbywgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodCB3aXRoIGl0cyBhbmFseXNpcy4KCkkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSB0b29sIHRoaW5rcyBpcyBnb2luZyBvbi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY29uZmlybSBpdCBteXNlbGYuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgZnVuY3Rpb24mIzM5O3MgdXNlLiBSZWFkaW5nIHRoZSBjb2RlIGlzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCByb3V0ZSBoZXJlLCBsaWtlbHkgaW52b2x2aW5nIGdyZXBwaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgY2hlY2tpbmcgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgb3IgdHJ1bHkgdW51c2VkIGFuZCB3cm9uZ2x5IGZsYWdnZWQsIGJlY2F1c2UgdGhpcyBjYW4gcG9pbnQgdG8gYSBkZWVwZXIgaXNzdWUgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBhIHRvb2wsIG9yIGV2ZW4gYSBzdWJ0bGUgZXJyb3IgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzAwOlx0XHRcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XG41NzAxOlx0XHRcdGlmIChlcnIpXG41NzAyOlx0XHRcdFx0Z290byBmYWlsZWRfbW91bnQ4O1xuNTcwMzpcdFx0fVxuNTcwNDpcdCNlbmRpZiAgLyogQ09ORklHX1FVT1RBICovXG41NzA1Olx0XG41NzA2Olx0XHQvKlxuNTcwNzpcdFx0ICogU2F2ZSB0aGUgb3JpZ2luYWwgYmRldiBtYXBwaW5nJiMzOTtzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxuNTcwODpcdFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxuNTcwOTpcdFx0ICovXG41NzEwOlx0XHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXHUwMDI2c2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX21hcHBpbmctXHUwMDNld2JfZXJyLFxuNTcxMTpcdFx0XHRcdFx0IFx1MDAyNnNiaS1cdTAwM2VzX2JkZXZfd2JfZXJyKTtcbjU3MTI6XHRcdEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgfD0gRVhUNF9PUlBIQU5fRlM7XG41NzEzOlx0XHRleHQ0X29ycGhhbl9jbGVhbnVwKHNiLCBlcyk7XG41NzE0Olx0XHRFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xuNTcxNTpcdFx0LypcbjU3MTY6XHRcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcbjU3MTc6XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcbjU3MTg6XHRcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXG41NzE5Olx0XHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxuNTcyMDpcdFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cbjU3MjE6XHRcdCAqL1xuNTcyMjpcdFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcbjU3MjM6XHRcdGlmIChuZWVkc19yZWNvdmVyeSkge1xuNTcyNDpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDtyZWNvdmVyeSBjb21wbGV0ZVwmIzM0Oyk7XG41NzI1Olx0XHRcdGVyciA9IGV4dDRfbWFya19yZWNvdmVyeV9jb21wbGV0ZShzYiwgZXMpO1xuNTcyNjpcdFx0XHRpZiAoZXJyKVxuNTcyNzpcdFx0XHRcdGdvdG8gZmFpbGVkX21vdW50OTtcbjU3Mjg6XHRcdH1cbjU3Mjk6XHRcbjU3MzA6XHRcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXHUwMDI2XHUwMDI2ICFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMoc2ItXHUwMDNlc19iZGV2KSkge1xuNTczMTpcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuNTczMjpcdFx0XHRcdCBcJiMzNDttb3VudGluZyB3aXRoIFxcXCYjMzQ7ZGlzY2FyZFxcXCYjMzQ7IG9wdGlvbiwgYnV0IHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBkaXNjYXJkXCYjMzQ7KTtcbjU3MzM6XHRcdFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcbjU3MzQ6XHRcdH1cbjU3MzU6XHRcbjU3MzY6XHRcdGlmIChlcy1cdTAwM2VzX2Vycm9yX2NvdW50KSB7XG41NzM3Olx0XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gNSo2MDtcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xuNTczODpcdFx0XHRtb2RfdGltZXIoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JlcG9ydCxcbjU3Mzk6XHRcdFx0XHRcdCAgamlmZmllcyAmIzQzOyBzZWNzX3RvX2ppZmZpZXMoc2JpLVx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcbjU3NDA6XHRcdH1cbjU3NDE6XHRcdHNiaS1cdTAwM2VzX2Vycl9yZXBvcnRfc2VjID0gMjQqNjAqNjA7IC8qIE9uY2UgYSBkYXkgKi9cbjU3NDI6XHRcbjU3NDM6XHRcdC8qIEVuYWJsZSBtZXNzYWdlIHJhdGVsaW1pdGluZy4gRGVmYXVsdCBpcyAxMCBtZXNzYWdlcyBwZXIgNSBzZWNzLiAqL1xuNTc0NDpcdFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXHUwMDI2c2JpLVx1MDAzZXNfZXJyX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XG41NzQ1Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc193YXJuaW5nX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7XG41NzQ2Olx0XHRyYXRlbGltaXRfc3RhdGVfaW5pdChcdTAwMjZzYmktXHUwMDNlc19tc2dfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcbjU3NDc6XHRcdGF0b21pY19zZXQoXHUwMDI2c2JpLVx1MDAzZXNfd2FybmluZ19jb3VudCwgMCk7XG41NzQ4Olx0XHRhdG9taWNfc2V0KFx1MDAyNnNiaS1cdTAwM2VzX21zZ19jb3VudCwgMCk7XG41NzQ5Olx0XG41NzUwOlx0XHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cbjU3NTE6XHRcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xuNTc1MjpcdFx0aWYgKGVycilcbjU3NTM6XHRcdFx0Z290byBmYWlsZWRfbW91bnQ5O1xuNTc1NDpcdFxuNTc1NTpcdFx0cmV0dXJuIDA7XG41NzU2Olx0XG41NzU3Olx0ZmFpbGVkX21vdW50OTpcbjU3NTg6XHRcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuNTc1OTpcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG41NzYwOlx0XHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuNTc2MTpcdGZhaWxlZF9tb3VudDc6XG41NzYyOlx0XHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG41NzYzOlx0ZmFpbGVkX21vdW50NjpcbjU3NjQ6XHRcdC8qXG41NzY1Olx0XHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcbjU3NjY6XHRcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG41NzY3Olx0XHQgKi9cbjU3Njg6XHRcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKVxuNTc2OTpcdFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuNTc3MDpcdFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbjU3NzE6XHRcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuNTc3MjpcdGZhaWxlZF9tb3VudDU6XG41NzczOlx0XHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XG41Nzc0Olx0XHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbjU3NzU6XHRcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XG41Nzc2Olx0ZmFpbGVkX21vdW50NGE6XG41Nzc3Olx0XHRkcHV0KHNiLVx1MDAzZXNfcm9vdCk7XG41Nzc4Olx0XHRzYi1cdTAwM2VzX3Jvb3QgPSBOVUxMO1xuNTc3OTpcdGZhaWxlZF9tb3VudDQ6XG41NzgwOlx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFwmIzM0O21vdW50IGZhaWxlZFwmIzM0Oyk7XG41NzgxOlx0XHRpZiAoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXG41NzgyOlx0XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbjU3ODM6XHRmYWlsZWRfbW91bnRfd3E6XG41Nzg0Olx0XHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuNTc4NTpcdFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuNTc4NjpcdFxuNTc4NzpcdFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcbjU3ODg6XHRcdHNiaS1cdTAwM2VzX2VhX2Jsb2NrX2NhY2hlID0gTlVMTDtcbjU3ODk6XHRcbjU3OTA6XHRcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKSB7XG41NzkxOlx0XHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG41NzkyOlx0XHR9XG41NzkzOlx0ZmFpbGVkX21vdW50M2E6XG41Nzk0Olx0XHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbjU3OTU6XHRmYWlsZWRfbW91bnQzOlxuNTc5NjpcdFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbjU3OTc6XHRcdGZsdXNoX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfc2JfdXBkX3dvcmspO1xuNTc5ODpcdFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcbjU3OTk6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNiaS1cdTAwM2VzX2Vycl9yZXBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGluaXRpYWxpemluZyBhbiBleHQ0IGZpbGVzeXN0ZW0sIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUga2VybmVsIHN0YXJ0cyB0cmFuc2xhdGluZyB0aGUgcmF3IGJsb2NrIGRldmljZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gYWN0dWFsbHkgd29yayB3aXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGVudGlyZSBwcm9jZXNzIGtpY2tzIG9mZi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBnb2VzIGZyb20gYSByYXcgZGV2aWNlIHRvIGEgbW91bnRhYmxlIGZpbGVzeXN0ZW0gc3RydWN0dXJlLiBJIGJldHRlciB0cmFjZSB0aGUgY2FsbCBncmFwaCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBzZXRzIGl0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzNDUtXG5mcy9leHQ0L3N1cGVyLmM6NTM0NjpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MzQ3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTgyMj1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU4NDEtXG5mcy9leHQ0L3N1cGVyLmM6NTg0MjpcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XG5mcy9leHQ0L3N1cGVyLmMtNTg0My1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXh0NCBKb3VybmFsIERlc3RydWN0aW9uIC0gQSBRdWVzdGlvbiBvZiBSZWR1bmRhbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgaXQmIzM5O3MgYWRkaW5nIGBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKWAgYXQgYGZhaWxlZF9tb3VudDY6YC4gRmFpciBlbm91Z2gsIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGNsZWFuIHVwIGlmIHRoZSBtb3VudCBmYWlscy4gQnV0IHRoZW4sIEkgc2VlIGFub3RoZXIgY2FsbCB0byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktJmd0O3Nfam91cm5hbClgIGxhdGVyIG9uLCBhdCBgZmFpbGVkX21vdW50X3dxOmAuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuIElmIGBmYWlsZWRfbW91bnQ2OmAgaXMgaGl0LCBzaG91bGRuJiMzOTt0IGBzYmktJmd0O3Nfam91cm5hbGAgYmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGUgZmlyc3QgYGV4dDRfam91cm5hbF9kZXN0cm95YCBjYWxsPyBPdGhlcndpc2UsIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBkZXN0cm95aW5nIHRoZSBqb3VybmFsIHR3aWNlLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBwcm9ibGVtcyDigJMgZG91YmxlLWZyZWVzLCBjb3JydXB0aW9uLCB0aGUgd29ya3MuIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHRvIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGRvdWJsZSBkZXN0cnVjdGlvbiBncmFjZWZ1bGx5LCBidXQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpc24mIzM5O3QuCgpUaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGNhc2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoaXMgc2NlbmFyaW8uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmaXJzdCBkZXN0cnVjdGlvbiBpcyBoYW5kbGVkLCBhbmQgdGhlIHNlY29uZCBpcyBza2lwcGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzEyLVx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjEzMTM6XHRcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cdFx0aWYgKChlcnIgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAhYWJvcnRlZCkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XG5mcy9leHQ0L3N1cGVyLmM6NTA0NDpcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA0NS1cdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbmZzL2V4dDQvc3VwZXIuYzo1NzY5Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzAtXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzkwLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbmZzL2V4dDQvc3VwZXIuYzo1NzkxOlx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3OTItXHR9XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYwOTYtb3V0X2pvdXJuYWw6XG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcbmZzL2V4dDQvc3VwZXIuYy02MDk4LW91dF9iZGV2OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cdGlmIChlcnIpIHtcbmZzL2V4dDQvc3VwZXIuYzo2MjE0Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIxNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3JpdGljYWwgcG9pbnRzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgam91cm5hbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBoYW5kbGVzIHRoZSBqb3VybmFsIGlub2RlLCBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBqb3VybmFsLCBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIG9uLWRpc2sgam91cm5hbCBtZXRhZGF0YS4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb246CgoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBkZXN0cnVjdGlvbiwgcGFydGljdWxhcmx5IGlmIHRoZSBmaWxlc3lzdGVtIGlzIHN0aWxsIGFjdGl2ZT8gV2hhdCBsb2NrcyBhcmUgdXNlZCwgYW5kIHdoYXQmIzM5O3MgdGhlaXIgc2NvcGU/IElzIHRoZXJlIGEgcmlzayBvZiBkZWFkbG9jaz8KKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBEb2VzIGl0IGVuc3VyZSBhbGwgam91cm5hbCBibG9ja3MgYXJlIHByb3Blcmx5IHJlbGVhc2VkIGJhY2sgdG8gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzPyBEb2VzIGl0IGNvcnJlY3RseSBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wbGV0ZSBjbGVhbnVwIG9yIGRhbmdsaW5nIHBvaW50ZXJzPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgZXJyb3JzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzPyBXaGF0IGhhcHBlbnMgaWYgaXQgZW5jb3VudGVycyBhIHdyaXRlIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNsZWFyIG1ldGFkYXRhIG9uIGRpc2s/IElzIHRoZXJlIGEgZ3JhY2VmdWwgZmFsbGJhY2sgbWVjaGFuaXNtPwoqICAgKipUcmFuc2FjdGlvbiBIYW5kbGluZzoqKiBEb2VzIGl0IGNvcnJlY3RseSBmbHVzaCBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGJlZm9yZSBkZWFsbG9jYXRpbmcgdGhlIGpvdXJuYWw/IEFyZSB0aGVyZSBzY2VuYXJpb3Mgd2hlcmUgYSB0cmFuc2FjdGlvbiBtaWdodCBiZSBsZWZ0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZGVzdHJveSBwcm9jZXNzIGlzIGludGVycnVwdGVkPwoqICAgKipJbm9kZSBIYW5kbGluZzoqKiBIb3cgaXMgdGhlIGpvdXJuYWwgaW5vZGUgaGFuZGxlZD8gRG9lcyBpdCBwcm9wZXJseSB1cGRhdGUgdGhlIGlub2RlJiMzOTtzIHN0YXRlIHRvIHJlZmxlY3QgdGhhdCB0aGUgam91cm5hbCBpcyBnb25lPyBBbnkgY29uc2lkZXJhdGlvbnMgYXJvdW5kIHRoZSBsYXN0IG1vdW50IHRpbWUsIHdoaWNoIG1pZ2h0IG5lZWQgdG8gYmUgY2xlYXJlZD8KKiAgICoqUGVyc2lzdGVuY2U6KiogRG9lcyBpdCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBmdW5jdGlvbiBhcmUgcGVyc2lzdGVkIHRvIGRpc2sgdG8gZ3VhcmFudGVlIGEgY29uc2lzdGVudCBmaWxlc3lzdGVtIHN0YXRlIGFmdGVyIGEgcmVib290PwoqICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gdGhlIGZpbGVzeXN0ZW0gbGlmZWN5Y2xlPyBJcyB0aGVyZSBhIGNsZWFuIGNhbGwtY2hhaW4gZm9yIHRoaXMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/CgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHJvYnVzdCB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgZmlsZXN5c3RlbSBpbnN0YWJpbGl0eSwgd2hpY2ggSSBjYW4gdGhlbiBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBhbnkga25vd24gaXNzdWVzLCBvciBDVkUmIzM5O3MgcmVsYXRpbmcgdG8gam91cm5hbCBkZXN0cnVjdGlvbiBpbiBleHQ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9qYmQyLmg9NDE2PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuaC00MzUtICovXG5mcy9leHQ0L2V4dDRfamJkMi5oOjQzNjpzdGF0aWMgaW5saW5lIGludCBleHQ0X2pvdXJuYWxfZGVzdHJveShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIGpvdXJuYWxfdCAqam91cm5hbClcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM3LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzEyLVx0XHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjEzMTM6XHRcdGVyciA9IGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cdFx0aWYgKChlcnIgXHUwMDNjIDApIFx1MDAyNlx1MDAyNiAhYWJvcnRlZCkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00OTY0PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XG5mcy9leHQ0L3N1cGVyLmM6NTA0NDpcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNTA0NS1cdHJldHVybiAtRUlOVkFMO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbmZzL2V4dDQvc3VwZXIuYzo1NzY5Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzAtXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzkwLVx0aWYgKHNiaS1cdTAwM2VzX2pvdXJuYWwpIHtcbmZzL2V4dDQvc3VwZXIuYzo1NzkxOlx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jLTU3OTItXHR9XG4tLVxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTYwOTYtb3V0X2pvdXJuYWw6XG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcbmZzL2V4dDQvc3VwZXIuYy02MDk4LW91dF9iZGV2OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cdGlmIChlcnIpIHtcbmZzL2V4dDQvc3VwZXIuYzo2MjE0Olx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIxNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGV4dDRfam91cm5hbF9kZXN0cm95YC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGBmcy9leHQ0L2V4dDRfamJkMi5oYC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgam91cm5hbCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZm9yIGV4dDQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBzeXN0ZW0gdW5tb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiBqb3VybmFsIHJlcGxheSBhZnRlciBhIGNyYXNoLiBJJiMzOTttIGhvcGluZyB0byBzZWUgdGhlIHNwZWNpZmljIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gZGVhbGxvY2F0aW5nIHRoZSBqb3VybmFsIG1ldGFkYXRhLCBmcmVlaW5nIGFzc29jaWF0ZWQgYnVmZmVycywgYW5kIGVuc3VyaW5nIHRoYXQgbm8gbGluZ2VyaW5nIHJlc291cmNlcyBjb21wcm9taXNlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCBqYmQyIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHR9XG4gNDMxOlx0XG4gNDMyOlx0LypcbiA0MzM6XHQgKiBQYXNzIGpvdXJuYWwgZXhwbGljaXRseSBhcyBpdCBtYXkgbm90IGJlIGNhY2hlZCBpbiB0aGUgc2JpLVx1MDAzZXNfam91cm5hbCBpbiBzb21lXG4gNDM0Olx0ICogY2FzZXNcbiA0MzU6XHQgKi9cbiA0MzY6XHRzdGF0aWMgaW5saW5lIGludCBleHQ0X2pvdXJuYWxfZGVzdHJveShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIGpvdXJuYWxfdCAqam91cm5hbClcbiA0Mzc6XHR7XG4gNDM4Olx0XHRpbnQgZXJyID0gMDtcbiA0Mzk6XHRcbiA0NDA6XHRcdC8qXG4gNDQxOlx0XHQgKiBBdCB0aGlzIHBvaW50IG9ubHkgdHdvIHRoaW5ncyBjYW4gYmUgb3BlcmF0aW5nIG9uIHRoZSBqb3VybmFsLlxuIDQ0MjpcdFx0ICogSkJEMiB0aHJlYWQgcGVyZm9ybWluZyB0cmFuc2FjdGlvbiBjb21taXQgYW5kIHNfc2JfdXBkX3dvcmtcbiA0NDM6XHRcdCAqIGlzc3Vpbmcgc2IgdXBkYXRlIHRocm91Z2ggdGhlIGpvdXJuYWwuIE9uY2Ugd2Ugc2V0XG4gNDQ0Olx0XHQgKiBFWFQ0X0pPVVJOQUxfREVTVFJPWSwgbmV3IGV4dDRfaGFuZGxlX2Vycm9yKCkgY2FsbHMgd2lsbCBub3RcbiA0NDU6XHRcdCAqIHF1ZXVlIHNfc2JfdXBkX3dvcmsgYW5kIGV4dDRfZm9yY2VfY29tbWl0KCkgbWFrZXMgc3VyZSBhbnlcbiA0NDY6XHRcdCAqIGV4dDRfaGFuZGxlX2Vycm9yKCkgY2FsbHMgZnJvbSB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiBjb21taXQgYXJlXG4gNDQ3Olx0XHQgKiBmaW5pc2hlZC4gSGVuY2Ugbm8gbmV3IHNfc2JfdXBkX3dvcmsgY2FuIGJlIHF1ZXVlZCBhZnRlciB3ZVxuIDQ0ODpcdFx0ICogZmx1c2ggaXQgaGVyZS5cbiA0NDk6XHRcdCAqL1xuIDQ1MDpcdFx0ZXh0NF9zZXRfbW91bnRfZmxhZyhzYmktXHUwMDNlc19zYiwgRVhUNF9NRl9KT1VSTkFMX0RFU1RST1kpO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0ZXh0NF9mb3JjZV9jb21taXQoc2JpLVx1MDAzZXNfc2IpO1xuIDQ1MzpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19zYl91cGRfd29yayk7XG4gNDU0Olx0XG4gNDU1Olx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfZGVzdHJveShqb3VybmFsKTtcbiA0NTY6XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuIDQ1NzpcdFxuIDQ1ODpcdFx0cmV0dXJuIGVycjtcbiA0NTk6XHR9XG4gNDYwOlx0XG4gNDYxOlx0I2VuZGlmXHQvKiBfRVhUNF9KQkQyX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpvdXJuYWwgRGVzdHJ1Y3Rpb24gaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGZ1bmN0aW9uIGFuZCBJIHNlZSBpdCYjMzk7cyBzZXR0aW5nIGBzYmktJmd0O3Nfam91cm5hbCA9IE5VTEw7YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBqb3VybmFsIG1pZ2h0IGJlIGFjY2Vzc2VkIGFmdGVyIGl0JiMzOTtzIGJlZW4gZGVzdHJveWVkLiBUaGUgcGF0aCB0byB0aGUgaXNzdWUgbG9va3MgdG8gYmUgYGZhaWxlZF9tb3VudDY6YCB3aGljaCwgaWYgdHJpZ2dlcmVkLCB3b3VsZCBsZWFkIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgYmVpbmcgY2FsbGVkLiBUaGVuLCBpZiBzb21ldGhpbmcgaW4gYGZhaWxlZF9tb3VudF93cTpgIGxhdGVyIHRyaWVzIHRvIHVzZSB0aGUgam91cm5hbCwgd2UmIzM5O3JlIGluIHRyb3VibGUuCgpIbW0sIHRoZSBjb21tZW50cyBzYXkgdGhhdCB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIGBleHQ0X21iX3JlbGVhc2Uoc2IpYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbWVudCBub3RlcywgJiMzNDtUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC4mIzM0OyBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nOiBTbywgYGV4dDRfbWJfcmVsZWFzZShzYilgIGlzIHJlc3BvbnNpYmxlIGZvciBmbHVzaGluZywgYW5kIHRoYXQgZmx1c2hpbmcgY2FuIHJlLWFybSBgc19kaXNjYXJkX3dvcmtgLCB3aGljaCwgaWYgdGhlIGpvdXJuYWwgaXMgYWxyZWFkeSBkZXN0cm95ZWQsIHdpbGwgY2F1c2UgYSBjcmFzaC4gUmlnaHQ/IFRoZSBjb21taXQgaW1wbGllcyBgZXh0NF9tYl9yZWxlYXNlYCBpcyBmbHVzaGluZyBgc19kaXNjYXJkX3dvcmtgLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGBleHQ0X21iX3JlbGVhc2VgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLiBHb3R0YSBkaWcgZGVlcGVyIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMwOTM9ZXh0ZXJuIGludCBleHQ0X21iX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuZnMvZXh0NC9leHQ0LmgtMzA5NS1leHRlcm4gZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTE1LWVycl9tYl9yZWxlYXNlOlxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTctZXJyX291dDpcbi0tXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTEyMz1zdGF0aWMgdm9pZCBtYnRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVx0cGVyY3B1X2NvdW50ZXJfZGVzdHJveShcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM6MTI3Olx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVx0a2ZyZWUoc2ItXHUwMDNlc19iZGV2LVx1MDAzZWJkX3F1ZXVlKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0yMjM3PXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2Jlc3RfZm91bmQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0yMjYyLVx0ICogZG91YmxlIGFsbG9jYXRlIGJsb2Nrcy4gVGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlx0ICogaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHRcbmZzL2V4dDQvbWJhbGxvYy5jLTIyNjQtXHQgKi9cbi0tXG5mcy9leHQ0L21iYWxsb2MuYz0zODcxPXN0YXRpYyBpbnQgZXh0NF9tYl9jbGVhbnVwX3BhKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdycClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0zODg1LVxuZnMvZXh0NC9tYmFsbG9jLmM6Mzg4Njp2b2lkIGV4dDRfbWJfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDY4NT1zdGF0aWMgdm9pZCBleHQ0X21iX2NvbGxlY3Rfc3RhdHMoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00NzIwLSAqIGNvbnRleHQuICBXZSBkb24mIzM5O3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXG5mcy9leHQ0L21iYWxsb2MuYzo0NzIxOiAqIHBhX2ZyZWUgaW4gZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoKSwgYnV0IG9uIGZhaWx1cmUsIHdlJiMzOTt2ZSBhbHJlYWR5XG5mcy9leHQ0L21iYWxsb2MuYy00NzIyLSAqIHplcm9lZCBvdXQgYWMtXHUwMDNlYWNfYl9leC5mZV9sZW4sIHNvIGdyb3VwX3BhLVx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NDc5MD1zdGF0aWMgdm9pZCBleHQ0X21iX3VzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTQ4MDQtXHQgKiBpbnN0ZWFkIHdlIGNvcnJlY3QgcGEgbGF0ZXIsIGFmdGVyIGJsb2NrcyBhcmUgbWFya2VkXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1Olx0ICogaW4gb24tZGlzayBiaXRtYXAgLS0gc2VlIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KClcbmZzL2V4dDQvbWJhbGxvYy5jLTQ4MDYtXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ4NzY9ZXh0NF9tYl91c2VfcHJlYWxsb2NhdGVkKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTAxOS1cdFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcbmZzL2V4dDQvbWJhbGxvYy5jOjUwMjA6XHRcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy01MDIxLVx0XHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01MzUxPWV4dDRfbWJfbmV3X2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTM5NS1cdCAqIFdlIHdpbGwgbGF0ZXIgYWRkIHRoZSBuZXcgcGEgdG8gdGhlIHJpZ2h0IGJ1Y2tldFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcdCAqIGFmdGVyIHVwZGF0aW5nIHRoZSBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy01Mzk3LVx0ICovXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQxNj1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQxOC1cdFx0XHRzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cdFx0dHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoc2IsIE5VTEwsIGdyb3VwLCBiaXQsIG5leHQgLSBiaXQpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcdFx0dHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHBhLCAoZ3JwX2Jsa19zdGFydCAmIzQzO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0Ny1cdFx0XHRcdFx0XHQgICAgRVhUNF9DMkIoc2JpLCBiaXQpKSxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDY4PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ2OTpleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYnVkZHkgKmU0YixcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXHRcdFx0XHRzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cbmZzL2V4dDQvbWJhbGxvYy5jOjU0NzY6XHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoc2IsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXHRCVUdfT04ocGEtXHUwMDNlcGFfZGVsZXRlZCA9PSAwKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NDk5PWV4dDRfbWJfZGlzY2FyZF9ncm91cF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXHRcdGlmIChwYS1cdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XG5mcy9leHQ0L21iYWxsb2MuYzo1NTgxOlx0XHRcdGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShcdTAwMjZlNGIsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXHRcdFx0Y2FsbF9yY3UoXHUwMDI2KHBhKS1cdTAwM2V1LnBhX3JjdSwgZXh0NF9tYl9wYV9jYWxsYmFjayk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVx0XHR9IGVsc2Uge1xuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcdFx0XHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXHUwMDI2ZTRiLCBiaXRtYXBfYmgsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODUtXHRcdFx0ZXh0NF9tYl9wYV9mcmVlKHBhKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NjA3PXZvaWQgZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cdFx0bGlzdF9kZWwoXHUwMDI2cGEtXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo1NzA0Olx0XHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXHUwMDI2ZTRiLCBiaXRtYXBfYmgsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXHRcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTkzNT1leHQ0X21iX2Rpc2NhcmRfbGdfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVx0XHRsaXN0X2RlbChcdTAwMjZwYS1cdTAwM2VwYV9ncm91cF9saXN0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjYwMDA6XHRcdGV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShcdTAwMjZlNGIsIHBhKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXHRcdGV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjAxOD1zdGF0aWMgdm9pZCBleHQ0X21iX2FkZF9uX3RyaW0oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmM6NjA2NjpzdGF0aWMgdm9pZCBleHQ0X21iX3JlbGVhc2VfY29udGV4dChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuZnMvZXh0NC9tYmFsbG9jLmMtNjA2Ny17XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NjIyOT1leHQ0X2ZzYmxrX3QgZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cdH1cbmZzL2V4dDQvbWJhbGxvYy5jOjYzNTQ6XHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XG5mcy9leHQ0L21iYWxsb2MuYy02MzU1LVx0a21lbV9jYWNoZV9mcmVlKGV4dDRfYWNfY2FjaGVwLCBhYyk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NzI3Nz1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9mcmVlX2dyb3VwX2NsdXN0ZXJzX3NldCk7XG5mcy9leHQ0L21iYWxsb2MuYzo3Mjc4OkVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChleHQ0X21iX3JlbGVhc2UpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMjItXHRleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpO1xuZnMvZXh0NC9zdXBlci5jOjEzMjM6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTEzMjQtXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzY1LVx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG5mcy9leHQ0L3N1cGVyLmM6NTc2NjpcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG5mcy9leHQ0L3N1cGVyLmMtNTc2Ny1cdCAqL1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01NzY5LVx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuZnMvZXh0NC9zdXBlci5jOjU3NzA6XHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU3NzEtXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGV4dDRfbWJfcmVsZWFzZWAgaW4gYGZzL2V4dDQvbWJhbGxvYy5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcmVsZWFzZSBvZiBtZXRhZGF0YSBibG9ja3MuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgZXh0NCBibG9jayBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcHJvY2VzcywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgc3lzdGVtLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGl0IGltcGxlbWVudHMgdG8gZGVhbCB3aXRoIGluY29uc2lzdGVuY2llcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBmYW1pbGlhciB0ZXJyaXRvcnksIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIG1pZ2h0IGJlIG51YW5jZXMgdGhhdCBJIGNhbiBsZWFybiBmcm9tLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4ODA6XHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuMzg4MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7XG4zODgyOlx0XHR9XG4zODgzOlx0XHRyZXR1cm4gY291bnQ7XG4zODg0Olx0fVxuMzg4NTpcdFxuMzg4NjpcdHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4zODg3Olx0e1xuMzg4ODpcdFx0ZXh0NF9ncm91cF90IG5ncm91cHMgPSBleHQ0X2dldF9ncm91cHNfY291bnQoc2IpO1xuMzg4OTpcdFx0ZXh0NF9ncm91cF90IGk7XG4zODkwOlx0XHRpbnQgbnVtX21ldGFfZ3JvdXBfaW5mb3M7XG4zODkxOlx0XHRzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm8sICoqKmdyb3VwX2luZm87XG4zODkyOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbjM4OTM6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZXRfZ3JvdXBpbmZvX2NhY2hlKHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuMzg5NDpcdFx0aW50IGNvdW50O1xuMzg5NTpcdFxuMzg5NjpcdFx0LypcbjM4OTc6XHRcdCAqIHdhaXQgdGhlIGRpc2NhcmQgd29yayB0byBkcmFpbiBhbGwgb2YgZXh0NF9mcmVlX2RhdGFcbjM4OTg6XHRcdCAqL1xuMzg5OTpcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuMzkwMDpcdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnNiaS1cdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xuMzkwMTpcdFxuMzkwMjpcdFx0Z3JvdXBfaW5mbyA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzYmktXHUwMDNlc19ncm91cF9pbmZvKTtcbjM5MDM6XHRcdGlmIChncm91cF9pbmZvKSB7XG4zOTA0Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ncm91cHM7IGkmIzQzOyYjNDM7KSB7XG4zOTA1Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4zOTA2Olx0XHRcdFx0Z3JpbmZvID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhzYiwgaSk7XG4zOTA3Olx0XHRcdFx0aWYgKCFncmluZm8pXG4zOTA4Olx0XHRcdFx0XHRjb250aW51ZTtcbjM5MDk6XHRcdFx0XHRtYl9ncm91cF9iYl9iaXRtYXBfZnJlZShncmluZm8pO1xuMzkxMDpcdFx0XHRcdGV4dDRfbG9ja19ncm91cChzYiwgaSk7XG4zOTExOlx0XHRcdFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcbjM5MTI6XHRcdFx0XHRpZiAoY291bnQpXG4zOTEzOlx0XHRcdFx0XHRtYl9kZWJ1ZyhzYiwgXCYjMzQ7bWJhbGxvYzogJWQgUEFzIGxlZnRcXG5cJiMzNDssXG4zOTE0Olx0XHRcdFx0XHRcdCBjb3VudCk7XG4zOTE1Olx0XHRcdFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xuMzkxNjpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdyaW5mbyk7XG4zOTE3Olx0XHRcdH1cbjM5MTg6XHRcdFx0bnVtX21ldGFfZ3JvdXBfaW5mb3MgPSAobmdyb3VwcyAmIzQzO1xuMzkxOTpcdFx0XHRcdFx0RVhUNF9ERVNDX1BFUl9CTE9DSyhzYikgLSAxKSBcdTAwM2VcdTAwM2VcbjM5MjA6XHRcdFx0XHRFWFQ0X0RFU0NfUEVSX0JMT0NLX0JJVFMoc2IpO1xuMzkyMTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fbWV0YV9ncm91cF9pbmZvczsgaSYjNDM7JiM0MzspXG4zOTIyOlx0XHRcdFx0a2ZyZWUoZ3JvdXBfaW5mb1tpXSk7XG4zOTIzOlx0XHRcdGt2ZnJlZShncm91cF9pbmZvKTtcbjM5MjQ6XHRcdH1cbjM5MjU6XHRcdGV4dDRfbWJfYXZnX2ZyYWdtZW50X3NpemVfZGVzdHJveShzYmkpO1xuMzkyNjpcdFx0ZXh0NF9tYl9sYXJnZXN0X2ZyZWVfb3JkZXJzX2Rlc3Ryb3koc2JpKTtcbjM5Mjc6XHRcdGtmcmVlKHNiaS1cdTAwM2VzX21iX29mZnNldHMpO1xuMzkyODpcdFx0a2ZyZWUoc2JpLVx1MDAzZXNfbWJfbWF4cyk7XG4zOTI5Olx0XHRpcHV0KHNiaS1cdTAwM2VzX2J1ZGR5X2NhY2hlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCoqCgpPa2F5LCBzbyBgZXh0NF9tYl9yZWxlYXNlYCBjYWxscyBgZmx1c2hfd29yaygmYW1wO3NiaS0mZ3Q7c19kaXNjYXJkX3dvcmspYC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoLCBhbmQgaXQgc2F5czogKiYjMzQ7VGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuJiMzNDsqCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBoYW5nIG9uIGEgc2Vjb25kLiBJZiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBhbHJlYWR5IGZsdXNoaW5nIHRoaXMgd29yaywgaG93IGNhbiB0aGUgKmxhc3QgY29tbWl0KiByZS1hcm0gYHNfZGlzY2FyZF93b3JrYD8gQWgsIHJpZ2h0LiBUaGUgY29tbWVudCBtZWFucyB0aGUgKmZpbmFsIGNvbW1pdCBvZiB0aGUgam91cm5hbCogY2FuIHJlLWFybSBpdC4gVGhlIGlzc3VlIG11c3QgYmUgdGhhdCBpZiB0aGUgam91cm5hbCBpcyBkZXN0cm95ZWQgYmVmb3JlIGBleHQ0X21iX3JlbGVhc2VgLCB0aGUgam91cm5hbCBkZXN0cnVjdGlvbiBmb3JjZXMgYSBjb21taXQgd2hpY2ggKm1pZ2h0KiByZS1hcm0gdGhlIHdvcmsgcXVldWUsIHRoZW4gYGV4dDRfbWJfcmVsZWFzZWAgd2FpdHMgZm9yIGl0LiBJZiB0aGUgam91cm5hbCAqaXNuJiMzOTt0KiBkZXN0cm95ZWQgZmlyc3QsIGBleHQ0X21iX3JlbGVhc2VgIGZsdXNoZXMgdGhlIHdvcmtxdWV1ZSBhbmQgdGhlbiBsYXRlciBvbiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGZvcmNlcyBhbm90aGVyIGNvbW1pdCwgd2hpY2ggbWlnaHQgcmUtYXJtIGl0LiBCdXQgbm93LCBpdCYjMzk7cyBhcm1lZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC9mcmVlZCEgVGhpcyBsZWFkcyB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IGV4ZWN1dGVzIGFmdGVyIHRoZSBgc2JpYCBpcyBsb25nIGdvbmUuCgpTbywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSB1c2UtYWZ0ZXItZnJlZSB0aGF0IGNvdWxkIGhhcHBlbiBkdXJpbmcgYSBtb3VudCBmYWlsdXJlLiBIbW0sIGlzIHRoaXMgYSByZWFjaGFibGUgc2NlbmFyaW8/IFllcywgbW91bnQgZmFpbHVyZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgVUFGIGluIGEgd2VsbC1kZWZpbmVkIGVycm9yIHBhdGgsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkxldCYjMzk7cyBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX0VYVDRfRlNgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gQnV0IHdoYXQgYWJvdXQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gYHNfZGlzY2FyZF93b3JrYCBvciBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgPyBJIG5lZWQgdG8gY2hlY2sgdGhvc2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBzX2Rpc2NhcmRfd29ya2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NfZGlzY2FyZF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9iYWxsb2MuYz02ODk9aW50IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcylcbi0tXG5mcy9leHQ0L2JhbGxvYy5jLTcwOC1cdFx0XHRhdG9taWNfaW5jKFx1MDAyNnNiaS1cdTAwM2VzX3JldHJ5X2FsbG9jX3BlbmRpbmcpO1xuZnMvZXh0NC9iYWxsb2MuYzo3MDk6XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9iYWxsb2MuYy03MTAtXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZzYmktXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE2NzctXHRzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlzY2FyZF9saXN0O1xuZnMvZXh0NC9leHQ0Lmg6MTY3ODpcdHN0cnVjdCB3b3JrX3N0cnVjdCBzX2Rpc2NhcmRfd29yaztcbmZzL2V4dDQvZXh0NC5oLTE2NzktXHRhdG9taWNfdCBzX3JldHJ5X2FsbG9jX3BlbmRpbmc7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9MzY0Mj1zdGF0aWMgdm9pZCBleHQ0X2Rpc2NhcmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMzY0NC1cdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih3b3JrLFxuZnMvZXh0NC9tYmFsbG9jLmM6MzY0NTpcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLCBzX2Rpc2NhcmRfd29yayk7XG5mcy9leHQ0L21iYWxsb2MuYy0zNjQ2LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cdTAwM2VzX3NiO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM3MTY9aW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTM3ODItXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6Mzc4MzpcdElOSVRfV09SSyhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmssIGV4dDRfZGlzY2FyZF93b3JrKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTM3ODQtXHRhdG9taWNfc2V0KFx1MDAyNnNiaS1cdTAwM2VzX3JldHJ5X2FsbG9jX3BlbmRpbmcsIDApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM4ODY9dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy0zODk4LVx0ICovXG5mcy9leHQ0L21iYWxsb2MuYzozODk5Olx0Zmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9tYmFsbG9jLmMtMzkwMC1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX2xpc3QpKTtcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00MDE5PXZvaWQgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MDM3LVx0XHRpZiAod2FrZSlcbmZzL2V4dDQvbWJhbGxvYy5jOjQwMzg6XHRcdFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspO1xuZnMvZXh0NC9tYmFsbG9jLmMtNDAzOS1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc2NC1cdC8qXG5mcy9leHQ0L3N1cGVyLmM6NTc2NTpcdCAqIFRoZSBsYXN0IGNvbW1pdCBjYW4gcmUtYXJtIHNfZGlzY2FyZF93b3JrLCBzbyBkZXN0cm95IHRoZVxuZnMvZXh0NC9zdXBlci5jLTU3NjYtXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgZXh0NCBGaWxlc3lzdGVtIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgZXh0NCBidWcgZml4IHJlbGF0ZWQgdG8gYHNfZGlzY2FyZF93b3JrYC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgc19kaXNjYXJkX3dvcmtgIGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBleHQ0X21iX2luaXRgLCBhbmQgdGhlbiBnZXRzIHF1ZXVlZCB1cCBieSBgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFgLiBUaGF0JiMzOTtzIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGxpa2UgYSB0cmFuc2FjdGlvbiBjb21taXQgdHJpZ2dlcmVkIGR1cmluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHdhcyBxdWV1aW5nIHVwIHRoaXMgd29yaywgYnV0IGJlY2F1c2UgYGV4dDRfbWJfcmVsZWFzZWAgaGFkIGFscmVhZHkgYmVlbiBjYWxsZWQsIHRoZSB3b3JrIHdhcyBsZWZ0IHBlbmRpbmcuCgpUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGludm9sdmVzIGNoYW5naW5nIHRoZSBlcnJvciBwYXRoIGluIGBfX2V4dDRfZmlsbF9zdXBlcmAgdG8gY2FsbCBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgICpiZWZvcmUqIGBleHQ0X21iX3JlbGVhc2VgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZnV6emluZyB0YXJnZXRzLgoKT2J2aW91c2x5LCBgZXh0NF9maWxsX3N1cGVyYCAob3IgcmF0aGVyLCBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZCkgaXMgYSBrZXkgZW50cnkgcG9pbnQuIFRoaXMgaXMgdGhlIG1vdW50IHBhdGgsIHJpZ2h0PyBBbmQgd2Uga25vdyBzeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIG1vdW50IGNhbGxzIGZvciBleHQ0LiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFdlIGFsc28gd2FudCB0byBoaXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLgoKSSBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbWJfcmVsZWFzZWAgYmVjYXVzZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBBbmQgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBpbnZvbHZlZCBhcyB3ZWxsLiBXYWl0IGEgbWludXRlLi4uaXNuJiMzOTt0IGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgZGVmaW5lZCBhcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0NF9qYmQyLmhgPyBUaGF0IG1lYW5zIGl0IG1pZ2h0IG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MhIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgaW5saW5lcyB0aGF0LiBJZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBlbnN1cmUgaXQmIzM5O3Mgc3RpbGwgaW5kaXJlY3RseSB0YXJnZXRlZC4gUGVyaGFwcyB0aGF0IGNhbiBiZSBkb25lIGJ5IGhpdHRpbmcgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfam91cm5hbF9kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2piZDIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfamJkMi5oPTQxNj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM1LSAqL1xuZnMvZXh0NC9leHQ0X2piZDIuaDo0MzY6c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXG5mcy9leHQ0L2V4dDRfamJkMi5oLTQzNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEV4dDQgRmlsZXN5c3RlbSBDb2RlKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLCB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBzdGF0aWMgaW5saW5lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEdpdmVuIHRoYXQsIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gYF9fZXh0NF9maWxsX3N1cGVyYCBhbmQgYGV4dDRfbWJfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYF9fZXh0NF9maWxsX3N1cGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgc3RhdGljLCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4gQmV0dGVyIHRvIGRvdWJsZS1jaGVjayB0aGF0IGVhcmx5IHRoYW4gd2FzdGUgdGltZSBkb3duIGEgd3JvbmcgcGF0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19leHQ0X2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTUzMzk9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MzQ1LVxuZnMvZXh0NC9zdXBlci5jOjUzNDY6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNTM0Ny17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4MjI9c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODQxLVxuZnMvZXh0NC9zdXBlci5jOjU4NDI6XHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU4NDMtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIElubGluaW5nIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcsICYjMzQ7T2theSwgdGhpcyBmdW5jdGlvbiBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiYjMzQ7IEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSwgJiMzNDtJdCAqY291bGQqIHBvdGVudGlhbGx5IGJlIGlubGluZWQsIGJ1dCBpdCYjMzk7cyBhIHNpemFibGUgY2h1bmsgb2YgY29kZS4mIzM0OyBTaXplIGlzIGEga2V5IGZhY3Rvci4gQSBsYXJnZSBmdW5jdGlvbiBpcyBsZXNzIGxpa2VseSB0byBiZSBpbmxpbmVkLCBldmVuIGlmIHN0YXRpYy4gQnV0IHRoZW4gYSB0aG91Z2h0IGhpdHMgbWU6ICYjMzQ7V2FpdCBhIHNlY29uZCwgYGV4dDRfZmlsbF9zdXBlcmAgaXMgKmFsc28qIHN0YXRpYyEmIzM0OyBUaGF0IG1ha2VzIG1lIHBhdXNlLiBOb3cgSSYjMzk7bSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGZvY3VzIHRvIGBleHQ0X2dldF90cmVlYCB0byBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zIGltcGFjdHMgaG93IHRoZSBjb21waWxlciB3aWxsIGhhbmRsZSB0aGVtLCBhbmQgd2hldGhlciBpbmxpbmluZyBpcyBhIGZhY3RvciB0byBjb25zaWRlciBpbiB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG5mcy9leHQ0L3N1cGVyLmM6OTI6c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTEyNi1cdC5wYXJzZV9wYXJhbVx0PSBleHQ0X3BhcnNlX3BhcmFtLFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcdC5nZXRfdHJlZVx0PSBleHQ0X2dldF90cmVlLFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cdC5yZWNvbmZpZ3VyZVx0PSBleHQ0X3JlY29uZmlndXJlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODIyPXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTg3MS1cbmZzL2V4dDQvc3VwZXIuYzo1ODcyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODk2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbnMgaW4gZXh0NCoqCgpIbW0sIHNvIGBleHQ0X2dldF90cmVlYCBpcyBhbHNvIGRlY2xhcmVkIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgcG90ZW50aWFsIHJlZmFjdG9yaW5nIG9wcG9ydHVuaXRpZXMuIFN0YXRpYyBmdW5jdGlvbnMgY2FuIHNvbWV0aW1lcyBiZSBwcm9ibGVtYXRpYyBpbiBhIG1vZHVsYXIgY29udGV4dCwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBUaGV5IHR5cGljYWxseSBsaW1pdCB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIHJldXNlIG91dHNpZGUgdGhlaXIgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UuCgpOb3csIGxldCBtZSB0aGluay4uLiB3aGVyZSBlbHNlIG1pZ2h0IEkgZmluZCB0aGlzIHBhdHRlcm4/IFdoYXQgYWJvdXQgYGV4dDRfbWJfcmVsZWFzZWA/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBpdHMgZGVjbGFyYXRpb24uIElzIGl0IHN0YXRpYyBhcyB3ZWxsPyBJZiBpdCAqaXMqLCB0aGF0IGNvdWxkIGJlIHNpZ25pZmljYW50LiBJZiBpdCYjMzk7cyAqbm90KiwgdGhlbiBwZXJoYXBzIGl04oCZcyBwYXJ0IG9mIHNvbWUgbW9yZSBnZW5lcmFsIEFQSS4gVGhlIGJlaGF2aW9yIG9mIGBleHQ0X21iX3JlbGVhc2VgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBvciBsYWNrIHRoZXJlb2YsIG1pZ2h0IGJlIHRlbGxpbmcgbWUgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgc3RydWN0dXJlIGFuZCBpbnRlbmRlZCBzY29wZSBvZiB0aGF0IGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9tYmFsbG9jLmM9MjIzNz1zdGF0aWMgdm9pZCBleHQ0X21iX3VzZV9iZXN0X2ZvdW5kKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cdCAqIGRvdWJsZSBhbGxvY2F0ZSBibG9ja3MuIFRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZFxuZnMvZXh0NC9tYmFsbG9jLmM6MjI2MzpcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XG5mcy9leHQ0L21iYWxsb2MuYy0yMjY0LVx0ICovXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9Mzg3MT1zdGF0aWMgaW50IGV4dDRfbWJfY2xlYW51cF9wYShzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncnApXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cbmZzL2V4dDQvbWJhbGxvYy5jOjM4ODY6dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvbWJhbGxvYy5jLTM4ODcte1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ2ODU9c3RhdGljIHZvaWQgZXh0NF9tYl9jb2xsZWN0X3N0YXRzKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJiMzOTt0IG5lZWQgdGhpcyBmb3IgTUJfR1JPVVBfUEEgYmVjYXVzZSB3ZSBvbmx5IGNoYW5nZVxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSYjMzk7dmUgYWxyZWFkeVxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVx1MDAzZWFjX2JfZXguZmVfbGVuLCBzbyBncm91cF9wYS1cdTAwM2VwYV9mcmVlIGlzIG5vdCBjaGFuZ2VkLlxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTQ3OTA9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyxcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVx0ICogaW5zdGVhZCB3ZSBjb3JyZWN0IHBhIGxhdGVyLCBhZnRlciBibG9ja3MgYXJlIG1hcmtlZFxuZnMvZXh0NC9tYmFsbG9jLmM6NDgwNTpcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXG5mcy9leHQ0L21iYWxsb2MuYy00ODA2LVx0ICogT3RoZXIgQ1BVcyBhcmUgcHJldmVudGVkIGZyb20gYWxsb2NhdGluZyBmcm9tIHRoaXMgcGEgYnkgbGdfbXV0ZXhcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz00ODc2PWV4dDRfbWJfdXNlX3ByZWFsbG9jYXRlZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXHRcdCAqICAgICAgZXh0NF9tYl9uZXdfYmxvY2tzXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlx0XHQgKiAgICAgICBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cdFx0ICogICAgICAgIGV4dDRfbWJfcHV0X3BhXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTM1MT1leHQ0X21iX25ld19ncm91cF9wYShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXHQgKiBXZSB3aWxsIGxhdGVyIGFkZCB0aGUgbmV3IHBhIHRvIHRoZSByaWdodCBidWNrZXRcbmZzL2V4dDQvbWJhbGxvYy5jOjUzOTY6XHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxuZnMvZXh0NC9tYmFsbG9jLmMtNTM5Ny1cdCAqL1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU0MTY9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG5mcy9leHQ0L21iYWxsb2MuYzo1NDE3OmV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaCxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXHRcdFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU0NDUtXHRcdHRyYWNlX2V4dDRfbWJhbGxvY19kaXNjYXJkKHNiLCBOVUxMLCBncm91cCwgYml0LCBuZXh0IC0gYml0KTtcbmZzL2V4dDQvbWJhbGxvYy5jOjU0NDY6XHRcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShwYSwgKGdycF9ibGtfc3RhcnQgJiM0MztcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NDctXHRcdFx0XHRcdFx0ICAgIEVYVDRfQzJCKHNiaSwgYml0KSksXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcbmZzL2V4dDQvbWJhbGxvYy5jOjU0Njk6ZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsXG5mcy9leHQ0L21iYWxsb2MuYy01NDcwLVx0XHRcdFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzUtXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2Olx0dHJhY2VfZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKHNiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NDc3LVx0QlVHX09OKHBhLVx1MDAzZXBhX2RlbGV0ZWQgPT0gMCk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NTgwLVx0XHRpZiAocGEtXHUwMDNlcGFfdHlwZSA9PSBNQl9HUk9VUF9QQSkge1xuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcdFx0XHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXHUwMDI2ZTRiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTgyLVx0XHRcdGNhbGxfcmN1KFx1MDAyNihwYSktXHUwMDNldS5wYV9yY3UsIGV4dDRfbWJfcGFfY2FsbGJhY2spO1xuZnMvZXh0NC9tYmFsbG9jLmMtNTU4My1cdFx0fSBlbHNlIHtcbmZzL2V4dDQvbWJhbGxvYy5jOjU1ODQ6XHRcdFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NTg1LVx0XHRcdGV4dDRfbWJfcGFfZnJlZShwYSk7XG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDMtXHRcdGxpc3RfZGVsKFx1MDAyNnBhLVx1MDAzZXBhX2dyb3VwX2xpc3QpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NTcwNDpcdFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy01NzA1LVx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNTk5OS1cdFx0bGlzdF9kZWwoXHUwMDI2cGEtXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XG5mcy9leHQ0L21iYWxsb2MuYzo2MDAwOlx0XHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXHUwMDI2ZTRiLCBwYSk7XG5mcy9leHQ0L21iYWxsb2MuYy02MDAxLVx0XHRleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNjA2NS0gKi9cbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbmZzL2V4dDQvbWJhbGxvYy5jLTYwNjcte1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYzNTMtXHR9XG5mcy9leHQ0L21iYWxsb2MuYzo2MzU0Olx0ZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoYWMpO1xuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cdGttZW1fY2FjaGVfZnJlZShleHQ0X2FjX2NhY2hlcCwgYWMpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xuZnMvZXh0NC9tYmFsbG9jLmM6NzI3ODpFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9tYl9yZWxlYXNlKTtcbmZzL2V4dDQvbWJhbGxvYy5jLTcyNzktRVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfcmVhZF9ibG9ja19iaXRtYXBfbm93YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIGV4dDQgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIGFuZCB0cnlpbmcgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBgZXh0NF9tYl9yZWxlYXNlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQsIGxpa2VseSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMsIGFzIGl0IHByb2JhYmx5IHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVzZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHVzYWdlIGZyb20gYSBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwZXJzcGVjdGl2ZSwgZ2l2ZW4gaXQmIzM5O3MgYSBnZW5lcmFsbHkgaW1wb3J0YW50IGZ1bmN0aW9uLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGV4dDRfcHV0X3N1cGVyYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRlYWxzIHdpdGggdW5tb3VudGluZyB0aGUgZmlsZXN5c3RlbSwgYW5kIHRoYXQgaXQgZW5kcyB1cCBjYWxsaW5nIGBleHQ0X21iX3JlbGVhc2VgIHRvby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBpbnZlc3RpZ2F0ZSBgZXh0NF9tYl9yZWxlYXNlYCBzbyBJIGRvbiYjMzk7dCBtaXNzIGFueSBjcml0aWNhbCBjb250ZXh0LCBhbmQgSSBzaG91bGQgYWxzbyBzZWUgaG93IHRoZSBjYWxscyB0byBgZXh0NF9tYl9yZWxlYXNlYCBhcmUgaGFuZGxlZCBpbiBgZXh0NF9wdXRfc3VwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3B1dF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9MTI2OT1zdGF0aWMgdm9pZCBleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxuZnMvZXh0NC9zdXBlci5jOjEyODI6c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy0xMjgzLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTY2OT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjc3LVx0LmV2aWN0X2lub2RlXHQ9IGV4dDRfZXZpY3RfaW5vZGUsXG5mcy9leHQ0L3N1cGVyLmM6MTY3ODpcdC5wdXRfc3VwZXJcdD0gZXh0NF9wdXRfc3VwZXIsXG5mcy9leHQ0L3N1cGVyLmMtMTY3OS1cdC5zeW5jX2ZzXHQ9IGV4dDRfc3luY19mcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBFWFQ0IEZpbGVzeXN0ZW0gTW91bnQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgbW91bnQgcHJvY2VzcyBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZXh0NF9wdXRfc3VwZXJgLCBJIHJlbWVtYmVyIHRoYXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGluZm9ybWF0aXZlIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGV4dGVybmFsIGNhbGxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgc3ltYm9sLiBgZXh0NF9tYl9yZWxlYXNlYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBmb2N1cyBvbiBpbiB0aGlzIGNvbnRleHQuCgpIb2xkIG9uLCBJIGFsc28gcmVjYWxsIHRoYXQgYGV4dDRfZmlsbF9zdXBlcmAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCBmb3IgdHJhY2luZywgYnV0IHNvIGlzIGBleHQ0X2dldF90cmVlYC4gSG1tLCB0aGlzIGlzIGJlY29taW5nIHRyaWNreS4gQXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBtb3VudCBwYXRoIHRoYXQgbWlnaHQgYmUgZWFzaWVyIHRvIGZvbGxvdz8gSSBuZWVkIHRvIGZpbmQgYW4gZW50cnkgcG9pbnQgdGhhdCYjMzk7cyBleHBvc2VkLiBMZXQgbWUgY2hlY2sgYGV4dDRfaW5pdF9mc19jb250ZXh0YCAtLSB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgY29udGV4dC4gSSYjMzk7bGwgc2VlIHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTk0PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbmZzL2V4dDQvc3VwZXIuYy05Ni1zdGF0aWMgdm9pZCBleHQ0X2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEzND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzYtXHQubmFtZVx0XHRcdD0gXCYjMzQ7ZXh0MlwmIzM0OyxcbmZzL2V4dDQvc3VwZXIuYzoxMzc6XHQuaW5pdF9mc19jb250ZXh0XHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxuZnMvZXh0NC9zdXBlci5jLTEzOC1cdC5wYXJhbWV0ZXJzXHRcdD0gZXh0NF9wYXJhbV9zcGVjcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQzX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE1Mi1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQzXCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjE1MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXG5mcy9leHQ0L3N1cGVyLmMtMTU0LVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDM2PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwNTAtXG5mcy9leHQ0L3N1cGVyLmM6MjA1MTppbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTIwNTIte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz03NTE5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQ0X2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTc1MjEtXHQubmFtZVx0XHRcdD0gXCYjMzQ7ZXh0NFwmIzM0OyxcbmZzL2V4dDQvc3VwZXIuYzo3NTIyOlx0LmluaXRfZnNfY29udGV4dFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcbmZzL2V4dDQvc3VwZXIuYy03NTIzLVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBleHQ0IEZpbGVzeXN0ZW0gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGV4dDQgY29kZS4uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdXNlZnVsOyBJIGNhbiBwb3RlbnRpYWxseSB1c2UgdGhpcyBmdW5jdGlvbiBhbmQgYGV4dDRfbWJfcmVsZWFzZWAgYXMgY3J1Y2lhbCBmb2N1cyBwb2ludHMgZm9yIGFuYWx5c2lzLCBnaXZlbiB0aGV5JiMzOTtyZSBub3QgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYGV4dDRfbWJfcmVsZWFzZWAuLi4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBpbiBlcnJvciBwYXRocyBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MsIGFuZCBhbHNvIGluIGBleHQ0X3B1dF9zdXBlcmAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjbGVhbnVwLiBIbW0sIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50IGluIHRlcm1zIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGxpZmVjeWNsZT8gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGRvZXNuJiMzOTt0IHByb3ZpZGUgYSB1c2VmdWwgcG9pbnQgdG8gbG9vayBhdCBtb3JlIGJyb2FkbHkuIFdoYXQgYWJvdXQgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYD8gQWggeWVzLCBpdCBxdWV1ZXMgYHNfZGlzY2FyZF93b3JrYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgdG91Y2hlcyBvbiBwb3RlbnRpYWwgYmFja2dyb3VuZCB0YXNrcyBhbmQgZGF0YSBzYW5pdGl6YXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZXNlIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMxMTU9ZXh0ZXJuIGludCBleHQ0X3RyaW1fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc3RyaW1fcmFuZ2UgKik7XG5mcy9leHQ0L2V4dDQuaDozMTE2OmV4dGVybiB2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpO1xuZnMvZXh0NC9leHQ0LmgtMzExNy1leHRlcm4gdm9pZCBleHQ0X21iX21hcmtfYmIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsb2NrLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTM5NzM9c3RhdGljIHZvaWQgZXh0NF9mcmVlX2RhdGFfaW5fYnVkZHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy00MDE4LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmM6NDAxOTp2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXG5mcy9leHQ0L21iYWxsb2MuYy00MDIwLXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTA5PXN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUxNC1cbmZzL2V4dDQvc3VwZXIuYzo1MTU6XHRleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YShzYiwgdHhuLVx1MDAzZXRfdGlkKTtcbmZzL2V4dDQvc3VwZXIuYy01MTYtXHRleHQ0X21heWJlX3VwZGF0ZV9zdXBlcmJsb2NrKHNiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTQKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZpeCoqCgpPa2F5LCBzbyBgZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0LCBhbG9uZyB3aXRoIGBleHQ0X21iX3JlbGVhc2VgLCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIHRob3NlIHN5bWJvbHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBBaCwgeWVzLCBgQ09ORklHX0pCRDJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19FWFQ0X0ZTYC4gUGVyZmVjdCwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIGRpc3RpbGwgdGhpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBEZWZpbml0ZWx5LCB5ZXMuCiogICAqKkZvY3VzU3ltYm9scyoqOiBgZXh0NF9tYl9yZWxlYXNlYCwgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYCwgYW5kIGFsc28gYGV4dDRfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBzZWVtcyByZWxldmFudCB0byBpbml0aWFsaXNhdGlvbiB3aGljaCBpcyBwYXJ0IG9mIHRoZSB2dWxuZXJhYmlsaXR5LgoqICAgKipFbmFibGVDb25maWdzKio6IE9ubHkgYEVYVDRfRlNgIGlzIHJlcXVpcmVkLgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aXRoaW4gZXh0NCYjMzk7cyBtb3VudCBlcnJvciBoYW5kbGluZy4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgdGltaW5nIG9mIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gaW4gcmVsYXRpb24gdG8gYGV4dDRfbWJfcmVsZWFzZWAmIzM5O3MgZmx1c2hpbmcgb2YgYHNfZGlzY2FyZF93b3JrYC4gSWYgdGhlIGpvdXJuYWwgaXNuJiMzOTt0IGZ1bGx5IGNsZWFuZWQgdXAgKmJlZm9yZSogdGhhdCByZWxlYXNlIGZ1bmN0aW9uIGRvZXMgaXRzIHRoaW5nLCBhIGxhdGVyIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gY2FuIHJlLWVuYWJsZSBgc19kaXNjYXJkX3dvcmtgLiBUaGlzIHNldHMgdXAgdGhlIHBlcmZlY3Qgc2NlbmFyaW8gZm9yIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IHRyaWVzIHRvIGV4ZWN1dGUgaXRzIHdvcmsgKmFmdGVyKiB0aGUgc3VwZXJibG9jayYjMzk7cyBkYXRhIGlzIGZyZWVkLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHRlc3QgdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfbWJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9tYl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2V4dDRfcHJvY2Vzc19mcmVlZF9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfaW5pdF9mc19jb250ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNGI2MTEyZTVkNmM1OS4uNThiMjEwNjM3YjU3YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTc2MSw2ICYjNDM7NTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogZmFpbGVkX21vdW50NzoKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiBmYWlsZWRfbW91bnQ2OgomIzQzOwkvKgomIzQzOwkgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGUKJiM0MzsJICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzYmktJmd0O3Nfam91cm5hbCkKJiM0MzsJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCWV4dDRfbWJfcmVsZWFzZShzYik7CiAJZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHNiaSk7CiBmYWlsZWRfbW91bnQ1Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGV4dDQgRXJyb3IgUGF0aCBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBhbiBlcnJvciBwYXRoIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4dDQvc3VwZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBwcmV2aW91cyBjb21taXQgaW50cm9kdWNlZCB0aGUgcG90ZW50aWFsIGZvciBgc19kaXNjYXJkX3dvcmtgIHRvIGJlIHJlLWFybWVkLCB3aGljaCwgZHVyaW5nIGEgbW91bnQgZmFpbHVyZSwgY291bGQgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVhaywgb3IgZXZlbiBhIGNyYXNoLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpcyB0aGUgYWRkaXRpb24gb2YgYGV4dDRfam91cm5hbF9kZXN0cm95KClgICpiZWZvcmUqIGBleHQ0X21iX3JlbGVhc2UoKWAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIFRoaXMgZGVzdHJ1Y3Rpb24gb2YgdGhlIGpvdXJuYWwgKmJlZm9yZSogZnJlZWluZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlIHRvIHByZXZlbnQgdGhlIGFmb3JlbWVudGlvbmVkIGlzc3Vlcy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldC4gSXQgZW5zdXJlcyB0aGF0IHRoZSBqb3VybmFsIGlzIHByb3Blcmx5IGNsZWFuZWQgdXAgYmVmb3JlIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGZyZWVkIG1lbW9yeS4gVGhlIGNvZGUgc25pcHBldCBjb25maXJtcyBteSBhc3Nlc3NtZW50OyB0aGUgYWRkZWQgYGlmIChzYmktJmd0O3Nfam91cm5hbClgIGNoZWNrIGlzIGEgbmljZSB0b3VjaCwgZW5zdXJpbmcgdGhlIGpvdXJuYWwgYWN0dWFsbHkgZXhpc3RzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgaXQsIGZvciBleGFtcGxlIGluIGEgbm9uLWpvdXJuYWxlZCBmaWxlc3lzdGVtLCB3aGljaCBjb3VsZCB0aGVuIGNhdXNlIG90aGVyIHByb2JsZW1zLgoKSSBzZWUgbm8gZXZpZGVuY2UgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBmaXggaXMgcHVyZWx5IGFuIGVycm9yIHBhdGggY2xlYW51cDsgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gc2NydXRpbnkuIFN0YW5kYXJkIHRvb2xzLCBsaWtlIEtBU0FOLCBzaG91bGQgZWFzaWx5IGNhdGNoIHRoZSB0eXBlcyBvZiB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gTXkgZGV0ZXJtaW5hdGlvbiBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBtb3VudCB0byBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSByZWxlYXNpbmcgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciAoYGV4dDRfbWJfcmVsZWFzZWApLiBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlcmUgYHNfZGlzY2FyZF93b3JrYCBjb3VsZCBiZSByZS1hcm1lZCBieSB0aGUgbGFzdCBjb21taXQuIFRoaXMgdHlwZSBvZiBidWcgKHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbiwgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBpcyB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1NS4yMDUzODkzMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTk5MjQ4NDgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gICAgXCJleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YVwiLFxuICAgIFwiZXh0NF9pbml0X2ZzX2NvbnRleHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZXh0NCBtb3VudCBlcnJvciBwYXRoLiBJZiB0aGUgam91cm5hbCBpcyBub3QgZGVzdHJveWVkIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIHNfZGlzY2FyZF93b3JrLCBhIHN1YnNlcXVlbnQgam91cm5hbCBkZXN0cm95IGNhbiBmb3JjZSBhIGNvbW1pdCB0aGF0IHJlLWFybXMgc19kaXNjYXJkX3dvcmssIGxlYWRpbmcgdG8gYSBVQUYgd2hlbiB0aGUgd29ya3F1ZXVlIGV4ZWN1dGVzIHRoZSB3b3JrIGFmdGVyIHRoZSBzdXBlcmJsb2NrIGluZm8gaXMgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1NS4yMDUzOTQ2ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTAwNjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDExY2UxNWNlMTJkODU2ZmJjODRkMjUyOWI0NDJkODU1ODNkZTIzZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggNGI2MTEyZTVkNmM1OS4uNThiMjEwNjM3YjU3YiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtNTc2MSw2ICs1NzYxLDEyIEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIGZhaWxlZF9tb3VudDc6XFxuIFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG4gZmFpbGVkX21vdW50NjpcXG4rXFx0LypcXG4rXFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuK1xcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuK1xcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbiBcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG4gZmFpbGVkX21vdW50NTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDg6NTUuNjMxMTAxNDQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODEwNTU5ODcyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgICBcImV4dDRfaW5pdF9mc19jb250ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aC4gSWYgdGhlIGpvdXJuYWwgaXMgbm90IGRlc3Ryb3llZCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBzX2Rpc2NhcmRfd29yaywgYSBzdWJzZXF1ZW50IGpvdXJuYWwgZGVzdHJveSBjYW4gZm9yY2UgYSBjb21taXQgdGhhdCByZS1hcm1zIHNfZGlzY2FyZF93b3JrLCBsZWFkaW5nIHRvIGEgVUFGIHdoZW4gdGhlIHdvcmtxdWV1ZSBleGVjdXRlcyB0aGUgd29yayBhZnRlciB0aGUgc3VwZXJibG9jayBpbmZvIGlzIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTFjZTE1Y2UxMmQ4NTZmYmM4NGQyNTI5YjQ0MmQ4NTU4M2RlMjNlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA2OjA4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCA0YjYxMTJlNWQ2YzU5Li41OGIyMTA2MzdiNTdiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC01NzYxLDYgKzU3NjEsMTIgQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBmYWlsZWRfbW91bnQ3OlxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuIGZhaWxlZF9tb3VudDY6XG4rXHQvKlxuK1x0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXG4rXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxuK1x0ICovXG4rXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbClcbitcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdGV4dDRfbWJfcmVsZWFzZShzYik7XG4gXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcbiBmYWlsZWRfbW91bnQ1OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDg6NTUuNjMxMTAyNzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNTg2MjcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgZXh0NCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgZnMvZXh0NC9zdXBlci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgbW91bnQgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGQgYSBjYWxsIHRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgd2l0aCB0aGUgYXJndW1lbnRzIGBzYmlgIGFuZCBgc2JpLVx1MDAzZXNfam91cm5hbGAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkncmUgY2xlYW5pbmcgdXAgYSBqb3VybmFsIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwZXJibG9jaywgbGlrZWx5IHdoZW4gYSBtb3VudCBvcGVyYXRpb24gaGFzIGZhaWxlZC4gVGhlIGxhYmVsIGBmYWlsZWRfbW91bnQ2YCBpcyBhIGRlY2VudCBjbHVlOyB0aGF0IHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgYW5hbHlzaXMuIEknbSBndWVzc2luZyB0aGlzIGNhbGwgaXMgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBlcnJvciBwYXRoIG9mIGBleHQ0X2ZpbGxfc3VwZXJgLCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9leHQ0L3N1cGVyLmNgLiBMZXQncyBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSA1NzYxIGFuZCBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoaXMgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpcyBiZWluZyBpbmplY3RlZCwgd2hhdCBvdGhlciBjb250ZXh0dWFsIGNvZGUgaXMgYXJvdW5kIGl0LCBhbmQgd2hhdCBmYWlsdXJlIHNjZW5hcmlvcyBpdCdzIGludGVuZGVkIHRvIGhhbmRsZS4gSXQncyBhIGNsZWFudXAgc3RlcDsgaG9wZWZ1bGx5LCBpdCBwcmV2ZW50cyByZXNvdXJjZSBsZWFrcyBvciBjb3JydXB0aW9uIGlmIHRoZSBtb3VudCBmYWlscyBtaWQtb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowODo1OS42MzY5Njc1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg0NDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYWlsZWRfbW91bnQ2OlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzYyLVxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc2MzpmYWlsZWRfbW91bnQ2OlxcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA4OjU5LjY4MzgxNjQ1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzQ3MDM0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGluLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCBhcyB0aG91Z2ggdGhlIHRob3VnaHRzIGFyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCBpcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGV4cGVjdGVkIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gS25vd2luZyB0aGUgXCJ3aHlcIiB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIGhvdyBJIGRpc3NlY3QgdGhlIFwiaG93XCIuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIG90aGVycywgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gZ3Jhc3AgaXRzIHRydWUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MDIuMzU4NTIzMzYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTY0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhaWxlZF9tb3VudDY6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjItXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbmZzL2V4dDQvc3VwZXIuYzo1NzYzOmZhaWxlZF9tb3VudDY6XFxuZnMvZXh0NC9zdXBlci5jLTU3NjQtXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MDIuNDAyNjkxNDAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTc5NjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbGx5IFVudXNlZCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgb3V0cHV0IGZyb20sIHByb2JhYmx5LCBhIGJ1aWxkIG9yIGFuYWx5c2lzIHRvb2wsIGFuZCBpdCBsb29rcyBsaWtlIGAtLXNob3ctZnVuY3Rpb25gIGlzIHRoZSBjdWxwcml0LiBUaGF0J3MgdXN1YWxseSB0aGUgZGVmYXVsdCwgc28gdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBIb3dldmVyLCB0aGUgb3V0cHV0IGlzIGZsYWdnaW5nIGBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZGAuIEhtbSwgdGhhdCdzIG5vdCBpZGVhbC4gQSBcIm1heWJlX3VudXNlZFwiIGF0dHJpYnV0ZSBzaG91bGRuJ3QgYmUgc2hvd2luZyB1cCBpZiB0aGUgZnVuY3Rpb24gKmlzKiBhY3R1YWxseSB1c2VkLCByaWdodD8gVGhlIHRvb2wgKnNob3VsZCogYmUgZXhjbHVkaW5nIHRydWx5IHVudXNlZCBmdW5jdGlvbnMuIFNvLCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQgd2l0aCBpdHMgYW5hbHlzaXMuXG5cbkknbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIHRvb2wgdGhpbmtzIGlzIGdvaW5nIG9uLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjb25maXJtIGl0IG15c2VsZi4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBmdW5jdGlvbidzIHVzZS4gUmVhZGluZyB0aGUgY29kZSBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgcm91dGUgaGVyZSwgbGlrZWx5IGludm9sdmluZyBncmVwcGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGNoZWNraW5nIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGFjdHVhbGx5IHVzZWQgb3IgdHJ1bHkgdW51c2VkIGFuZCB3cm9uZ2x5IGZsYWdnZWQsIGJlY2F1c2UgdGhpcyBjYW4gcG9pbnQgdG8gYSBkZWVwZXIgaXNzdWUgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBhIHRvb2wsIG9yIGV2ZW4gYSBzdWJ0bGUgZXJyb3IgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowNS45NTI0ODk1NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzAwOlxcdFxcdFxcdGVyciA9IGV4dDRfZW5hYmxlX3F1b3RhcyhzYik7XFxuNTcwMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjU3MDI6XFx0XFx0XFx0XFx0Z290byBmYWlsZWRfbW91bnQ4O1xcbjU3MDM6XFx0XFx0fVxcbjU3MDQ6XFx0I2VuZGlmICAvKiBDT05GSUdfUVVPVEEgKi9cXG41NzA1OlxcdFxcbjU3MDY6XFx0XFx0LypcXG41NzA3OlxcdFxcdCAqIFNhdmUgdGhlIG9yaWdpbmFsIGJkZXYgbWFwcGluZydzIHdiX2VyciB2YWx1ZSB3aGljaCBjb3VsZCBiZVxcbjU3MDg6XFx0XFx0ICogdXNlZCB0byBkZXRlY3QgdGhlIG1ldGFkYXRhIGFzeW5jIHdyaXRlIGVycm9yLlxcbjU3MDk6XFx0XFx0ICovXFxuNTcxMDpcXHRcXHRlcnJzZXFfY2hlY2tfYW5kX2FkdmFuY2UoXFx1MDAyNnNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX21hcHBpbmctXFx1MDAzZXdiX2VycixcXG41NzExOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c2JpLVxcdTAwM2VzX2JkZXZfd2JfZXJyKTtcXG41NzEyOlxcdFxcdEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIHw9IEVYVDRfT1JQSEFOX0ZTO1xcbjU3MTM6XFx0XFx0ZXh0NF9vcnBoYW5fY2xlYW51cChzYiwgZXMpO1xcbjU3MTQ6XFx0XFx0RVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNj0gfkVYVDRfT1JQSEFOX0ZTO1xcbjU3MTU6XFx0XFx0LypcXG41NzE2OlxcdFxcdCAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gYWZ0ZXIgdXBkYXRpbmcgZnJlZSBzcGFjZS9pbm9kZSBjb3VudGVycyBhbmRcXG41NzE3OlxcdFxcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAuIE90aGVyd2lzZSB0aGUgc3VwZXJibG9jayBjYW4gaGF2ZSBhbiBpbmNvcnJlY3RcXG41NzE4OlxcdFxcdCAqIGNoZWNrc3VtIGluIHRoZSBidWZmZXIgY2FjaGUgdW50aWwgaXQgaXMgd3JpdHRlbiBvdXQgYW5kXFxuNTcxOTpcXHRcXHQgKiBlMmZzcHJvZ3MgcHJvZ3JhbXMgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlIHN5c3RlbSBpbW1lZGlhdGVseVxcbjU3MjA6XFx0XFx0ICogYWZ0ZXIgaXQgaXMgbW91bnRlZCBjYW4gZmFpbC5cXG41NzIxOlxcdFxcdCAqL1xcbjU3MjI6XFx0XFx0ZXh0NF9zdXBlcmJsb2NrX2NzdW1fc2V0KHNiKTtcXG41NzIzOlxcdFxcdGlmIChuZWVkc19yZWNvdmVyeSkge1xcbjU3MjQ6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXFxcInJlY292ZXJ5IGNvbXBsZXRlXFxcIik7XFxuNTcyNTpcXHRcXHRcXHRlcnIgPSBleHQ0X21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc2IsIGVzKTtcXG41NzI2OlxcdFxcdFxcdGlmIChlcnIpXFxuNTcyNzpcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZF9tb3VudDk7XFxuNTcyODpcXHRcXHR9XFxuNTcyOTpcXHRcXG41NzMwOlxcdFxcdGlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkgXFx1MDAyNlxcdTAwMjYgIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzYi1cXHUwMDNlc19iZGV2KSkge1xcbjU3MzE6XFx0XFx0XFx0ZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORyxcXG41NzMyOlxcdFxcdFxcdFxcdCBcXFwibW91bnRpbmcgd2l0aCBcXFxcXFxcImRpc2NhcmRcXFxcXFxcIiBvcHRpb24sIGJ1dCB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZGlzY2FyZFxcXCIpO1xcbjU3MzM6XFx0XFx0XFx0Y2xlYXJfb3B0KHNiLCBESVNDQVJEKTtcXG41NzM0OlxcdFxcdH1cXG41NzM1OlxcdFxcbjU3MzY6XFx0XFx0aWYgKGVzLVxcdTAwM2VzX2Vycm9yX2NvdW50KSB7XFxuNTczNzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMgPSA1KjYwO1xcdC8qIGZpcnN0IHRpbWUgIDUgbWludXRlcyAqL1xcbjU3Mzg6XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCxcXG41NzM5OlxcdFxcdFxcdFxcdFxcdCAgamlmZmllcyArIHNlY3NfdG9famlmZmllcyhzYmktXFx1MDAzZXNfZXJyX3JlcG9ydF9zZWMpKTtcXG41NzQwOlxcdFxcdH1cXG41NzQxOlxcdFxcdHNiaS1cXHUwMDNlc19lcnJfcmVwb3J0X3NlYyA9IDI0KjYwKjYwOyAvKiBPbmNlIGEgZGF5ICovXFxuNTc0MjpcXHRcXG41NzQzOlxcdFxcdC8qIEVuYWJsZSBtZXNzYWdlIHJhdGVsaW1pdGluZy4gRGVmYXVsdCBpcyAxMCBtZXNzYWdlcyBwZXIgNSBzZWNzLiAqL1xcbjU3NDQ6XFx0XFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19lcnJfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzQ1OlxcdFxcdHJhdGVsaW1pdF9zdGF0ZV9pbml0KFxcdTAwMjZzYmktXFx1MDAzZXNfd2FybmluZ19yYXRlbGltaXRfc3RhdGUsIDUgKiBIWiwgMTApO1xcbjU3NDY6XFx0XFx0cmF0ZWxpbWl0X3N0YXRlX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlc19tc2dfcmF0ZWxpbWl0X3N0YXRlLCA1ICogSFosIDEwKTtcXG41NzQ3OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc193YXJuaW5nX2NvdW50LCAwKTtcXG41NzQ4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc19tc2dfY291bnQsIDApO1xcbjU3NDk6XFx0XFxuNTc1MDpcXHRcXHQvKiBSZWdpc3RlciBzeXNmcyBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBjb21wbGV0ZS4gKi9cXG41NzUxOlxcdFxcdGVyciA9IGV4dDRfcmVnaXN0ZXJfc3lzZnMoc2IpO1xcbjU3NTI6XFx0XFx0aWYgKGVycilcXG41NzUzOlxcdFxcdFxcdGdvdG8gZmFpbGVkX21vdW50OTtcXG41NzU0OlxcdFxcbjU3NTU6XFx0XFx0cmV0dXJuIDA7XFxuNTc1NjpcXHRcXG41NzU3OlxcdGZhaWxlZF9tb3VudDk6XFxuNTc1ODpcXHRcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG41NzU5OlxcdGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuNTc2MDpcXHRcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbjU3NjE6XFx0ZmFpbGVkX21vdW50NzpcXG41NzYyOlxcdFxcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcXG41NzYzOlxcdGZhaWxlZF9tb3VudDY6XFxuNTc2NDpcXHRcXHQvKlxcbjU3NjU6XFx0XFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuNTc2NjpcXHRcXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxcbjU3Njc6XFx0XFx0ICovXFxuNTc2ODpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpXFxuNTc2OTpcXHRcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG41NzcwOlxcdFxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuNTc3MTpcXHRcXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG41NzcyOlxcdGZhaWxlZF9tb3VudDU6XFxuNTc3MzpcXHRcXHRleHQ0X3BlcmNwdV9wYXJhbV9kZXN0cm95KHNiaSk7XFxuNTc3NDpcXHRcXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG41Nzc1OlxcdFxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuNTc3NjpcXHRmYWlsZWRfbW91bnQ0YTpcXG41Nzc3OlxcdFxcdGRwdXQoc2ItXFx1MDAzZXNfcm9vdCk7XFxuNTc3ODpcXHRcXHRzYi1cXHUwMDNlc19yb290ID0gTlVMTDtcXG41Nzc5OlxcdGZhaWxlZF9tb3VudDQ6XFxuNTc4MDpcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsIFxcXCJtb3VudCBmYWlsZWRcXFwiKTtcXG41NzgxOlxcdFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuNTc4MjpcXHRcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbjU3ODM6XFx0ZmFpbGVkX21vdW50X3dxOlxcbjU3ODQ6XFx0XFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuNTc4NTpcXHRcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbjU3ODY6XFx0XFxuNTc4NzpcXHRcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2Jsb2NrX2NhY2hlKTtcXG41Nzg4OlxcdFxcdHNiaS1cXHUwMDNlc19lYV9ibG9ja19jYWNoZSA9IE5VTEw7XFxuNTc4OTpcXHRcXG41NzkwOlxcdFxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbCkge1xcbjU3OTE6XFx0XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuNTc5MjpcXHRcXHR9XFxuNTc5MzpcXHRmYWlsZWRfbW91bnQzYTpcXG41Nzk0OlxcdFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbjU3OTU6XFx0ZmFpbGVkX21vdW50MzpcXG41Nzk2OlxcdFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuNTc5NzpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfc2JfdXBkX3dvcmspO1xcbjU3OTg6XFx0XFx0ZXh0NF9zdG9wX21tcGQoc2JpKTtcXG41Nzk5OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzYmktXFx1MDAzZXNfZXJyX3JlcG9ydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjA1Ljk1Mjk3NzU3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjY5MTA0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRXh0NCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaW5pdGlhbGl6aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSwgcmlnaHQ/IEl0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGtlcm5lbCBzdGFydHMgdHJhbnNsYXRpbmcgdGhlIHJhdyBibG9jayBkZXZpY2UgaW50byBzb21ldGhpbmcgd2UgY2FuIGFjdHVhbGx5IHdvcmsgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBlbnRpcmUgcHJvY2VzcyBraWNrcyBvZmYuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZ29lcyBmcm9tIGEgcmF3IGRldmljZSB0byBhIG1vdW50YWJsZSBmaWxlc3lzdGVtIHN0cnVjdHVyZS4gSSBiZXR0ZXIgdHJhY2UgdGhlIGNhbGwgZ3JhcGggYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBzZXRzIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowOC44MTk4OTEyNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjAzNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTM0NS1cXG5mcy9leHQ0L3N1cGVyLmM6NTM0NjpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNTM0Ny17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTgyMj1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg0MS1cXG5mcy9leHQ0L3N1cGVyLmM6NTg0MjpcXHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01ODQzLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTowOC44Njg1MDQ2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5NDYyMTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHQ0IEpvdXJuYWwgRGVzdHJ1Y3Rpb24gLSBBIFF1ZXN0aW9uIG9mIFJlZHVuZGFuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgaXQncyBhZGRpbmcgYGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbClgIGF0IGBmYWlsZWRfbW91bnQ2OmAuIEZhaXIgZW5vdWdoLCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBjbGVhbiB1cCBpZiB0aGUgbW91bnQgZmFpbHMuIEJ1dCB0aGVuLCBJIHNlZSBhbm90aGVyIGNhbGwgdG8gYGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbClgIGxhdGVyIG9uLCBhdCBgZmFpbGVkX21vdW50X3dxOmAuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGZhaWxlZF9tb3VudDY6YCBpcyBoaXQsIHNob3VsZG4ndCBgc2JpLVx1MDAzZXNfam91cm5hbGAgYmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGUgZmlyc3QgYGV4dDRfam91cm5hbF9kZXN0cm95YCBjYWxsPyBPdGhlcndpc2UsIHdlJ3JlIHBvdGVudGlhbGx5IGRlc3Ryb3lpbmcgdGhlIGpvdXJuYWwgdHdpY2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBkb3VibGUtZnJlZXMsIGNvcnJ1cHRpb24sIHRoZSB3b3Jrcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgdG8gbWFrZSBzdXJlIGl0IGhhbmRsZXMgZG91YmxlIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIGJ1dCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGlzbid0LlxuXG5UaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGNhc2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSwgc28gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGluZyB0aGlzIHNjZW5hcmlvLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZmlyc3QgZGVzdHJ1Y3Rpb24gaXMgaGFuZGxlZCwgYW5kIHRoZSBzZWNvbmQgaXMgc2tpcHBlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxMy42NjMxMjkxNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzUwODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfam91cm5hbF9kZXN0cm95XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTI4Mj1zdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzMTItXFx0XFx0YWJvcnRlZCA9IGlzX2pvdXJuYWxfYWJvcnRlZChzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jOjEzMTM6XFx0XFx0ZXJyID0gZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTEzMTQtXFx0XFx0aWYgKChlcnIgXFx1MDAzYyAwKSBcXHUwMDI2XFx1MDAyNiAhYWJvcnRlZCkge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NjQ9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDMtb3V0OlxcbmZzL2V4dDQvc3VwZXIuYzo1MDQ0OlxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy01MDQ1LVxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzY4LVxcdGlmIChzYmktXFx1MDAzZXNfam91cm5hbClcXG5mcy9leHQ0L3N1cGVyLmM6NTc2OTpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MC1cXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3OTAtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKSB7XFxuZnMvZXh0NC9zdXBlci5jOjU3OTE6XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTU3OTItXFx0fVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYwNjQ9c3RhdGljIGpvdXJuYWxfdCAqZXh0NF9vcGVuX2Rldl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjA5Ni1vdXRfam91cm5hbDpcXG5mcy9leHQ0L3N1cGVyLmM6NjA5NzpcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTYwOTgtb3V0X2JkZXY6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjEwMz1zdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjIxMy1cXHRpZiAoZXJyKSB7XFxuZnMvZXh0NC9zdXBlci5jOjYyMTQ6XFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koRVhUNF9TQihzYiksIGpvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy02MjE1LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjIzMS1lcnJfb3V0OlxcbmZzL2V4dDQvc3VwZXIuYzo2MjMyOlxcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjIzMy1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxMy43MDc4ODQxNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MTIwNTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGV4dDRfam91cm5hbF9kZXN0cm95YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxldCdzIGRpdmUgaW50byB0aGUgYGV4dDRfam91cm5hbF9kZXN0cm95YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBqb3VybmFsLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3Mgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgaXQgaGFuZGxlcyB0aGUgam91cm5hbCBpbm9kZSwgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbCwgYW55IG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBvbi1kaXNrIGpvdXJuYWwgbWV0YWRhdGEuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uOlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBkZXN0cnVjdGlvbiwgcGFydGljdWxhcmx5IGlmIHRoZSBmaWxlc3lzdGVtIGlzIHN0aWxsIGFjdGl2ZT8gV2hhdCBsb2NrcyBhcmUgdXNlZCwgYW5kIHdoYXQncyB0aGVpciBzY29wZT8gSXMgdGhlcmUgYSByaXNrIG9mIGRlYWRsb2NrP1xuKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBEb2VzIGl0IGVuc3VyZSBhbGwgam91cm5hbCBibG9ja3MgYXJlIHByb3Blcmx5IHJlbGVhc2VkIGJhY2sgdG8gdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzPyBEb2VzIGl0IGNvcnJlY3RseSBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgam91cm5hbD8gQW55IHBvdGVudGlhbCBmb3IgaW5jb21wbGV0ZSBjbGVhbnVwIG9yIGRhbmdsaW5nIHBvaW50ZXJzP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBjaGVja3MgZm9yIGVycm9ycyBkdXJpbmcgdGhlIGNsZWFudXAgcHJvY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIGl0IGVuY291bnRlcnMgYSB3cml0ZSBlcnJvciB3aGVuIHRyeWluZyB0byBjbGVhciBtZXRhZGF0YSBvbiBkaXNrPyBJcyB0aGVyZSBhIGdyYWNlZnVsIGZhbGxiYWNrIG1lY2hhbmlzbT9cbiogICAqKlRyYW5zYWN0aW9uIEhhbmRsaW5nOioqIERvZXMgaXQgY29ycmVjdGx5IGZsdXNoIGFueSBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMgYmVmb3JlIGRlYWxsb2NhdGluZyB0aGUgam91cm5hbD8gQXJlIHRoZXJlIHNjZW5hcmlvcyB3aGVyZSBhIHRyYW5zYWN0aW9uIG1pZ2h0IGJlIGxlZnQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBkZXN0cm95IHByb2Nlc3MgaXMgaW50ZXJydXB0ZWQ/XG4qICAgKipJbm9kZSBIYW5kbGluZzoqKiBIb3cgaXMgdGhlIGpvdXJuYWwgaW5vZGUgaGFuZGxlZD8gRG9lcyBpdCBwcm9wZXJseSB1cGRhdGUgdGhlIGlub2RlJ3Mgc3RhdGUgdG8gcmVmbGVjdCB0aGF0IHRoZSBqb3VybmFsIGlzIGdvbmU/IEFueSBjb25zaWRlcmF0aW9ucyBhcm91bmQgdGhlIGxhc3QgbW91bnQgdGltZSwgd2hpY2ggbWlnaHQgbmVlZCB0byBiZSBjbGVhcmVkP1xuKiAgICoqUGVyc2lzdGVuY2U6KiogRG9lcyBpdCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBmdW5jdGlvbiBhcmUgcGVyc2lzdGVkIHRvIGRpc2sgdG8gZ3VhcmFudGVlIGEgY29uc2lzdGVudCBmaWxlc3lzdGVtIHN0YXRlIGFmdGVyIGEgcmVib290P1xuKiAgICoqSW50ZWdyYXRpb246KiogSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIHRoZSBmaWxlc3lzdGVtIGxpZmVjeWNsZT8gSXMgdGhlcmUgYSBjbGVhbiBjYWxsLWNoYWluIGZvciB0aGlzLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHJvYnVzdCB0aGlzIGZ1bmN0aW9uIGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgZmlsZXN5c3RlbSBpbnN0YWJpbGl0eSwgd2hpY2ggSSBjYW4gdGhlbiBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBhbnkga25vd24gaXNzdWVzLCBvciBDVkUncyByZWxhdGluZyB0byBqb3VybmFsIGRlc3RydWN0aW9uIGluIGV4dDQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToxOC4zNjkwOTQxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1Mzg3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuaD00MTY9c3RhdGljIGlubGluZSBpbnQgZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM1LSAqL1xcbmZzL2V4dDQvZXh0NF9qYmQyLmg6NDM2OnN0YXRpYyBpbmxpbmUgaW50IGV4dDRfam91cm5hbF9kZXN0cm95KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgam91cm5hbF90ICpqb3VybmFsKVxcbmZzL2V4dDQvZXh0NF9qYmQyLmgtNDM3LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMxMi1cXHRcXHRhYm9ydGVkID0gaXNfam91cm5hbF9hYm9ydGVkKHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTMxMzpcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMxNC1cXHRcXHRpZiAoKGVyciBcXHUwMDNjIDApIFxcdTAwMjZcXHUwMDI2ICFhYm9ydGVkKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk2ND1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTA0My1vdXQ6XFxuZnMvZXh0NC9zdXBlci5jOjUwNDQ6XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNDUtXFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc1OT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjgtXFx0aWYgKHNiaS1cXHUwMDNlc19qb3VybmFsKVxcbmZzL2V4dDQvc3VwZXIuYzo1NzY5OlxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy01NzcwLVxcdGV4dDRfbWJfcmVsZWFzZShzYik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc5MC1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwpIHtcXG5mcy9leHQ0L3N1cGVyLmM6NTc5MTpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc5Mi1cXHR9XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjA2ND1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MDk2LW91dF9qb3VybmFsOlxcbmZzL2V4dDQvc3VwZXIuYzo2MDk3OlxcdGV4dDRfam91cm5hbF9kZXN0cm95KEVYVDRfU0Ioc2IpLCBqb3VybmFsKTtcXG5mcy9leHQ0L3N1cGVyLmMtNjA5OC1vdXRfYmRldjpcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz02MTAzPXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MjEzLVxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3N1cGVyLmM6NjIxNDpcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShFWFQ0X1NCKHNiKSwgam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jLTYyMTUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MjMxLWVycl9vdXQ6XFxuZnMvZXh0NC9zdXBlci5jOjYyMzI6XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koRVhUNF9TQihzYiksIGpvdXJuYWwpO1xcbmZzL2V4dDQvc3VwZXIuYy02MjMzLVxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjE4LjQxNTYzODA0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU1MzgzMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gd2l0aGluIGBmcy9leHQ0L2V4dDRfamJkMi5oYC4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgam91cm5hbCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZm9yIGV4dDQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZmlsZSBzeXN0ZW0gdW5tb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgZXZlbiBqb3VybmFsIHJlcGxheSBhZnRlciBhIGNyYXNoLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgc3BlY2lmaWMgY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBkZWFsbG9jYXRpbmcgdGhlIGpvdXJuYWwgbWV0YWRhdGEsIGZyZWVpbmcgYXNzb2NpYXRlZCBidWZmZXJzLCBhbmQgZW5zdXJpbmcgdGhhdCBubyBsaW5nZXJpbmcgcmVzb3VyY2VzIGNvbXByb21pc2UgZGF0YSBpbnRlZ3JpdHkuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBhbmQgamJkMiBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZHVyaW5nIHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjIyLjI3MTAyMzUxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHR9XFxuIDQzMTpcXHRcXG4gNDMyOlxcdC8qXFxuIDQzMzpcXHQgKiBQYXNzIGpvdXJuYWwgZXhwbGljaXRseSBhcyBpdCBtYXkgbm90IGJlIGNhY2hlZCBpbiB0aGUgc2JpLVxcdTAwM2VzX2pvdXJuYWwgaW4gc29tZVxcbiA0MzQ6XFx0ICogY2FzZXNcXG4gNDM1OlxcdCAqL1xcbiA0MzY6XFx0c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuIDQzNzpcXHR7XFxuIDQzODpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0LypcXG4gNDQxOlxcdFxcdCAqIEF0IHRoaXMgcG9pbnQgb25seSB0d28gdGhpbmdzIGNhbiBiZSBvcGVyYXRpbmcgb24gdGhlIGpvdXJuYWwuXFxuIDQ0MjpcXHRcXHQgKiBKQkQyIHRocmVhZCBwZXJmb3JtaW5nIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgc19zYl91cGRfd29ya1xcbiA0NDM6XFx0XFx0ICogaXNzdWluZyBzYiB1cGRhdGUgdGhyb3VnaCB0aGUgam91cm5hbC4gT25jZSB3ZSBzZXRcXG4gNDQ0OlxcdFxcdCAqIEVYVDRfSk9VUk5BTF9ERVNUUk9ZLCBuZXcgZXh0NF9oYW5kbGVfZXJyb3IoKSBjYWxscyB3aWxsIG5vdFxcbiA0NDU6XFx0XFx0ICogcXVldWUgc19zYl91cGRfd29yayBhbmQgZXh0NF9mb3JjZV9jb21taXQoKSBtYWtlcyBzdXJlIGFueVxcbiA0NDY6XFx0XFx0ICogZXh0NF9oYW5kbGVfZXJyb3IoKSBjYWxscyBmcm9tIHRoZSBydW5uaW5nIHRyYW5zYWN0aW9uIGNvbW1pdCBhcmVcXG4gNDQ3OlxcdFxcdCAqIGZpbmlzaGVkLiBIZW5jZSBubyBuZXcgc19zYl91cGRfd29yayBjYW4gYmUgcXVldWVkIGFmdGVyIHdlXFxuIDQ0ODpcXHRcXHQgKiBmbHVzaCBpdCBoZXJlLlxcbiA0NDk6XFx0XFx0ICovXFxuIDQ1MDpcXHRcXHRleHQ0X3NldF9tb3VudF9mbGFnKHNiaS1cXHUwMDNlc19zYiwgRVhUNF9NRl9KT1VSTkFMX0RFU1RST1kpO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRleHQ0X2ZvcmNlX2NvbW1pdChzYmktXFx1MDAzZXNfc2IpO1xcbiA0NTM6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX3NiX3VwZF93b3JrKTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0ZXJyID0gamJkMl9qb3VybmFsX2Rlc3Ryb3koam91cm5hbCk7XFxuIDQ1NjpcXHRcXHRzYmktXFx1MDAzZXNfam91cm5hbCA9IE5VTEw7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdHJldHVybiBlcnI7XFxuIDQ1OTpcXHR9XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdCNlbmRpZlxcdC8qIF9FWFQ0X0pCRDJfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOToyMi4yNzExMDAyNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTk2Njg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEpvdXJuYWwgRGVzdHJ1Y3Rpb24gaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGV4dDRfam91cm5hbF9kZXN0cm95YCBmdW5jdGlvbiBhbmQgSSBzZWUgaXQncyBzZXR0aW5nIGBzYmktXHUwMDNlc19qb3VybmFsID0gTlVMTDtgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHByZXZlbnRzIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8uIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGpvdXJuYWwgbWlnaHQgYmUgYWNjZXNzZWQgYWZ0ZXIgaXQncyBiZWVuIGRlc3Ryb3llZC4gVGhlIHBhdGggdG8gdGhlIGlzc3VlIGxvb2tzIHRvIGJlIGBmYWlsZWRfbW91bnQ2OmAgd2hpY2gsIGlmIHRyaWdnZXJlZCwgd291bGQgbGVhZCB0byBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGJlaW5nIGNhbGxlZC4gVGhlbiwgaWYgc29tZXRoaW5nIGluIGBmYWlsZWRfbW91bnRfd3E6YCBsYXRlciB0cmllcyB0byB1c2UgdGhlIGpvdXJuYWwsIHdlJ3JlIGluIHRyb3VibGUuXG5cbkhtbSwgdGhlIGNvbW1lbnRzIHNheSB0aGF0IHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYGV4dDRfbWJfcmVsZWFzZShzYilgLiBTcGVjaWZpY2FsbHksIHRoZSBjb21tZW50IG5vdGVzLCBcIlRoZSBsYXN0IGNvbW1pdCBjYW4gcmUtYXJtIHNfZGlzY2FyZF93b3JrLCBzbyBkZXN0cm95IHRoZSBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlwiIEkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6IFNvLCBgZXh0NF9tYl9yZWxlYXNlKHNiKWAgaXMgcmVzcG9uc2libGUgZm9yIGZsdXNoaW5nLCBhbmQgdGhhdCBmbHVzaGluZyBjYW4gcmUtYXJtIGBzX2Rpc2NhcmRfd29ya2AsIHdoaWNoLCBpZiB0aGUgam91cm5hbCBpcyBhbHJlYWR5IGRlc3Ryb3llZCwgd2lsbCBjYXVzZSBhIGNyYXNoLiBSaWdodD8gVGhlIGNvbW1pdCBpbXBsaWVzIGBleHQ0X21iX3JlbGVhc2VgIGlzIGZsdXNoaW5nIGBzX2Rpc2NhcmRfd29ya2AuIExldCBtZSBjaGVjayB0aGUgY29kZSBmb3IgYGV4dDRfbWJfcmVsZWFzZWAgdG8gc2VlIGlmIHRoYXQncyBhY2N1cmF0ZS4gR290dGEgZGlnIGRlZXBlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MjcuMjQxMDY5ODI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4MjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzA5Mz1leHRlcm4gaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzA5NDpleHRlcm4gdm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2V4dDQvZXh0NC5oLTMwOTUtZXh0ZXJuIGV4dDRfZnNibGtfdCBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlX3QgKixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9NzM9c3RhdGljIGludCBtYnRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xMTUtZXJyX21iX3JlbGVhc2U6XFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxMTY6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTExNy1lcnJfb3V0Olxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYz0xMjM9c3RhdGljIHZvaWQgbWJ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI2LVxcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZyZWVjbHVzdGVyc19jb3VudGVyKTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjEyNzpcXHRleHQ0X21iX3JlbGVhc2Uoc2IpO1xcbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmMtMTI4LVxcdGtmcmVlKHNiLVxcdTAwM2VzX2JkZXYtXFx1MDAzZWJkX3F1ZXVlKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg1PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkwPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3Nj1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTE9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE2PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDY5OmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NS1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDQ6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMDpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NDpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyNzg6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyODI9c3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzIyLVxcdGV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7XFxuZnMvZXh0NC9zdXBlci5jOjEzMjM6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtMTMyNC1cXHRleHQ0X2V4dF9yZWxlYXNlKHNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01NzU5PWZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTc2NS1cXHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcXG5mcy9leHQ0L3N1cGVyLmM6NTc2NjpcXHQgKiBqb3VybmFsIGJlZm9yZSBleHQ0X21iX3JlbGVhc2UoKSBmbHVzaGVzIGl0LlxcbmZzL2V4dDQvc3VwZXIuYy01NzY3LVxcdCAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjktXFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuZnMvZXh0NC9zdXBlci5jOjU3NzA6XFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTc3MS1cXHRleHQ0X2ZsZXhfZ3JvdXBzX2ZyZWUoc2JpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MjcuMjg3NTU3MjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTU3OTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgZXh0NF9tYl9yZWxlYXNlYCBpbiBgZnMvZXh0NC9tYmFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWxlYXNlIG9mIG1ldGFkYXRhIGJsb2Nrcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhbGxvY2F0aW9uIGNvbnRleHQuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGV4dDQgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHByb2Nlc3MsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGpvdXJuYWxpbmcgc3lzdGVtLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGl0IGltcGxlbWVudHMgdG8gZGVhbCB3aXRoIGluY29uc2lzdGVuY2llcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGZhbWlsaWFyIHRlcnJpdG9yeSwgYnV0IEkgYWxzbyBleHBlY3QgdGhlcmUgbWlnaHQgYmUgbnVhbmNlcyB0aGF0IEkgY2FuIGxlYXJuIGZyb20uIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MzAuNzAzMzU0NjE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21iYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODgwOlxcdFxcdFxcdGNvdW50Kys7XFxuMzg4MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7XFxuMzg4MjpcXHRcXHR9XFxuMzg4MzpcXHRcXHRyZXR1cm4gY291bnQ7XFxuMzg4NDpcXHR9XFxuMzg4NTpcXHRcXG4zODg2OlxcdHZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMzg4NzpcXHR7XFxuMzg4ODpcXHRcXHRleHQ0X2dyb3VwX3Qgbmdyb3VwcyA9IGV4dDRfZ2V0X2dyb3Vwc19jb3VudChzYik7XFxuMzg4OTpcXHRcXHRleHQ0X2dyb3VwX3QgaTtcXG4zODkwOlxcdFxcdGludCBudW1fbWV0YV9ncm91cF9pbmZvcztcXG4zODkxOlxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbywgKioqZ3JvdXBfaW5mbztcXG4zODkyOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpO1xcbjM4OTM6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGdldF9ncm91cGluZm9fY2FjaGUoc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbjM4OTQ6XFx0XFx0aW50IGNvdW50O1xcbjM4OTU6XFx0XFxuMzg5NjpcXHRcXHQvKlxcbjM4OTc6XFx0XFx0ICogd2FpdCB0aGUgZGlzY2FyZCB3b3JrIHRvIGRyYWluIGFsbCBvZiBleHQ0X2ZyZWVfZGF0YVxcbjM4OTg6XFx0XFx0ICovXFxuMzg5OTpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG4zOTAwOlxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbjM5MDE6XFx0XFxuMzkwMjpcXHRcXHRncm91cF9pbmZvID0gcmN1X2FjY2Vzc19wb2ludGVyKHNiaS1cXHUwMDNlc19ncm91cF9pbmZvKTtcXG4zOTAzOlxcdFxcdGlmIChncm91cF9pbmZvKSB7XFxuMzkwNDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbmdyb3VwczsgaSsrKSB7XFxuMzkwNTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4zOTA2OlxcdFxcdFxcdFxcdGdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpO1xcbjM5MDc6XFx0XFx0XFx0XFx0aWYgKCFncmluZm8pXFxuMzkwODpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zOTA5OlxcdFxcdFxcdFxcdG1iX2dyb3VwX2JiX2JpdG1hcF9mcmVlKGdyaW5mbyk7XFxuMzkxMDpcXHRcXHRcXHRcXHRleHQ0X2xvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTE6XFx0XFx0XFx0XFx0Y291bnQgPSBleHQ0X21iX2NsZWFudXBfcGEoZ3JpbmZvKTtcXG4zOTEyOlxcdFxcdFxcdFxcdGlmIChjb3VudClcXG4zOTEzOlxcdFxcdFxcdFxcdFxcdG1iX2RlYnVnKHNiLCBcXFwibWJhbGxvYzogJWQgUEFzIGxlZnRcXFxcblxcXCIsXFxuMzkxNDpcXHRcXHRcXHRcXHRcXHRcXHQgY291bnQpO1xcbjM5MTU6XFx0XFx0XFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGkpO1xcbjM5MTY6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgZ3JpbmZvKTtcXG4zOTE3OlxcdFxcdFxcdH1cXG4zOTE4OlxcdFxcdFxcdG51bV9tZXRhX2dyb3VwX2luZm9zID0gKG5ncm91cHMgK1xcbjM5MTk6XFx0XFx0XFx0XFx0XFx0RVhUNF9ERVNDX1BFUl9CTE9DSyhzYikgLSAxKSBcXHUwMDNlXFx1MDAzZVxcbjM5MjA6XFx0XFx0XFx0XFx0RVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKTtcXG4zOTIxOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fbWV0YV9ncm91cF9pbmZvczsgaSsrKVxcbjM5MjI6XFx0XFx0XFx0XFx0a2ZyZWUoZ3JvdXBfaW5mb1tpXSk7XFxuMzkyMzpcXHRcXHRcXHRrdmZyZWUoZ3JvdXBfaW5mbyk7XFxuMzkyNDpcXHRcXHR9XFxuMzkyNTpcXHRcXHRleHQ0X21iX2F2Z19mcmFnbWVudF9zaXplX2Rlc3Ryb3koc2JpKTtcXG4zOTI2OlxcdFxcdGV4dDRfbWJfbGFyZ2VzdF9mcmVlX29yZGVyc19kZXN0cm95KHNiaSk7XFxuMzkyNzpcXHRcXHRrZnJlZShzYmktXFx1MDAzZXNfbWJfb2Zmc2V0cyk7XFxuMzkyODpcXHRcXHRrZnJlZShzYmktXFx1MDAzZXNfbWJfbWF4cyk7XFxuMzkyOTpcXHRcXHRpcHV0KHNiaS1cXHUwMDNlc19idWRkeV9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjMwLjcwMzcwMDc1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDA5ODk0MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBgZXh0NF9tYl9yZWxlYXNlYCBjYWxscyBgZmx1c2hfd29yayhcdTAwMjZzYmktXHUwMDNlc19kaXNjYXJkX3dvcmspYC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoLCBhbmQgaXQgc2F5czogKlwiVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXCIqXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBzZWNvbmQuIElmIGBleHQ0X21iX3JlbGVhc2VgIGlzIGFscmVhZHkgZmx1c2hpbmcgdGhpcyB3b3JrLCBob3cgY2FuIHRoZSAqbGFzdCBjb21taXQqIHJlLWFybSBgc19kaXNjYXJkX3dvcmtgPyBBaCwgcmlnaHQuIFRoZSBjb21tZW50IG1lYW5zIHRoZSAqZmluYWwgY29tbWl0IG9mIHRoZSBqb3VybmFsKiBjYW4gcmUtYXJtIGl0LiBUaGUgaXNzdWUgbXVzdCBiZSB0aGF0IGlmIHRoZSBqb3VybmFsIGlzIGRlc3Ryb3llZCBiZWZvcmUgYGV4dDRfbWJfcmVsZWFzZWAsIHRoZSBqb3VybmFsIGRlc3RydWN0aW9uIGZvcmNlcyBhIGNvbW1pdCB3aGljaCAqbWlnaHQqIHJlLWFybSB0aGUgd29yayBxdWV1ZSwgdGhlbiBgZXh0NF9tYl9yZWxlYXNlYCB3YWl0cyBmb3IgaXQuIElmIHRoZSBqb3VybmFsICppc24ndCogZGVzdHJveWVkIGZpcnN0LCBgZXh0NF9tYl9yZWxlYXNlYCBmbHVzaGVzIHRoZSB3b3JrcXVldWUgYW5kIHRoZW4gbGF0ZXIgb24gYGV4dDRfam91cm5hbF9kZXN0cm95YCBmb3JjZXMgYW5vdGhlciBjb21taXQsIHdoaWNoIG1pZ2h0IHJlLWFybSBpdC4gQnV0IG5vdywgaXQncyBhcm1lZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC9mcmVlZCEgVGhpcyBsZWFkcyB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IGV4ZWN1dGVzIGFmdGVyIHRoZSBgc2JpYCBpcyBsb25nIGdvbmUuXG5cblNvLCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlIHRoYXQgY291bGQgaGFwcGVuIGR1cmluZyBhIG1vdW50IGZhaWx1cmUuIEhtbSwgaXMgdGhpcyBhIHJlYWNoYWJsZSBzY2VuYXJpbz8gWWVzLCBtb3VudCBmYWlsdXJlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBVQUYgaW4gYSB3ZWxsLWRlZmluZWQgZXJyb3IgcGF0aCwgc28gaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkxldCdzIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfRVhUNF9GU2AgaXMgb2J2aW91c2x5IHJlcXVpcmVkLiBCdXQgd2hhdCBhYm91dCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byBgc19kaXNjYXJkX3dvcmtgIG9yIGBleHQ0X2pvdXJuYWxfZGVzdHJveWA/IEkgbmVlZCB0byBjaGVjayB0aG9zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgc19kaXNjYXJkX3dvcmtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE0MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjM3LjcxMzU5Nzk0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NjQwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic19kaXNjYXJkX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9iYWxsb2MuYz02ODk9aW50IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcylcXG4tLVxcbmZzL2V4dDQvYmFsbG9jLmMtNzA4LVxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnNiaS1cXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nKTtcXG5mcy9leHQ0L2JhbGxvYy5jOjcwOTpcXHRcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L2JhbGxvYy5jLTcxMC1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZzYmktXFx1MDAzZXNfcmV0cnlfYWxsb2NfcGVuZGluZyk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTY3Ny1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlzY2FyZF9saXN0O1xcbmZzL2V4dDQvZXh0NC5oOjE2Nzg6XFx0c3RydWN0IHdvcmtfc3RydWN0IHNfZGlzY2FyZF93b3JrO1xcbmZzL2V4dDQvZXh0NC5oLTE2NzktXFx0YXRvbWljX3Qgc19yZXRyeV9hbGxvY19wZW5kaW5nO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9MzY0Mj1zdGF0aWMgdm9pZCBleHQ0X2Rpc2NhcmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy0zNjQ0LVxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih3b3JrLFxcbmZzL2V4dDQvbWJhbGxvYy5jOjM2NDU6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbywgc19kaXNjYXJkX3dvcmspO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTM2NDYtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS1cXHUwMDNlc19zYjtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM3MTY9aW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzc4Mi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6Mzc4MzpcXHRJTklUX1dPUksoXFx1MDAyNnNiaS1cXHUwMDNlc19kaXNjYXJkX3dvcmssIGV4dDRfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy0zNzg0LVxcdGF0b21pY19zZXQoXFx1MDAyNnNiaS1cXHUwMDNlc19yZXRyeV9hbGxvY19wZW5kaW5nLCAwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4ODY9dm9pZCBleHQ0X21iX3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTM4OTgtXFx0ICovXFxuZnMvZXh0NC9tYmFsbG9jLmM6Mzg5OTpcXHRmbHVzaF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZGlzY2FyZF93b3JrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy0zOTAwLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfbGlzdCkpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDAxOT12b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00MDM3LVxcdFxcdGlmICh3YWtlKVxcbmZzL2V4dDQvbWJhbGxvYy5jOjQwMzg6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2c2JpLVxcdTAwM2VzX2Rpc2NhcmRfd29yayk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDAzOS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU3NTk9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzY0LVxcdC8qXFxuZnMvZXh0NC9zdXBlci5jOjU3NjU6XFx0ICogVGhlIGxhc3QgY29tbWl0IGNhbiByZS1hcm0gc19kaXNjYXJkX3dvcmssIHNvIGRlc3Ryb3kgdGhlXFxuZnMvZXh0NC9zdXBlci5jLTU3NjYtXFx0ICogam91cm5hbCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6MzcuNzY4MjY4MjkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDgyOTQwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIGV4dDQgRmlsZXN5c3RlbSBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBleHQ0IGJ1ZyBmaXggcmVsYXRlZCB0byBgc19kaXNjYXJkX3dvcmtgLiBJJ20gc2VlaW5nIHRoYXQgYHNfZGlzY2FyZF93b3JrYCBnZXRzIGluaXRpYWxpemVkIGR1cmluZyBgZXh0NF9tYl9pbml0YCwgYW5kIHRoZW4gZ2V0cyBxdWV1ZWQgdXAgYnkgYGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhYC4gVGhhdCdzIGFsbCBoYXBwZW5pbmcgZHVyaW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IHNlZW1zIGxpa2UgYSB0cmFuc2FjdGlvbiBjb21taXQgdHJpZ2dlcmVkIGR1cmluZyBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIHdhcyBxdWV1aW5nIHVwIHRoaXMgd29yaywgYnV0IGJlY2F1c2UgYGV4dDRfbWJfcmVsZWFzZWAgaGFkIGFscmVhZHkgYmVlbiBjYWxsZWQsIHRoZSB3b3JrIHdhcyBsZWZ0IHBlbmRpbmcuXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGVycm9yIHBhdGggaW4gYF9fZXh0NF9maWxsX3N1cGVyYCB0byBjYWxsIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIHRoaW5rIGFib3V0IGZ1enppbmcgdGFyZ2V0cy5cblxuT2J2aW91c2x5LCBgZXh0NF9maWxsX3N1cGVyYCAob3IgcmF0aGVyLCBgX19leHQ0X2ZpbGxfc3VwZXJgLCBzaW5jZSB0aGF0J3Mgd2hhdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQpIGlzIGEga2V5IGVudHJ5IHBvaW50LiBUaGlzIGlzIHRoZSBtb3VudCBwYXRoLCByaWdodD8gQW5kIHdlIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgZnV6emluZyBtb3VudCBjYWxscyBmb3IgZXh0NC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIFdlIGFsc28gd2FudCB0byBoaXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgYnVnLlxuXG5JIG5lZWQgdG8gbG9vayBhdCBgZXh0NF9tYl9yZWxlYXNlYCBiZWNhdXNlIGl0J3MgcGFydCBvZiB0aGUgb3JpZ2luYWwgcHJvYmxlbS4gQW5kIGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgaXMgaW52b2x2ZWQgYXMgd2VsbC4gV2FpdCBhIG1pbnV0ZS4uLmlzbid0IGBleHQ0X2pvdXJuYWxfZGVzdHJveWAgZGVmaW5lZCBhcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0NF9qYmQyLmhgPyBUaGF0IG1lYW5zIGl0IG1pZ2h0IG5vdCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MhIEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgaW5saW5lcyB0aGF0LiBJZiBpdCdzIGlubGluZWQsIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gZW5zdXJlIGl0J3Mgc3RpbGwgaW5kaXJlY3RseSB0YXJnZXRlZC4gUGVyaGFwcyB0aGF0IGNhbiBiZSBkb25lIGJ5IGhpdHRpbmcgdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjQzLjkxNjU2NDk0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NDc1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHQ0X2piZDIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfamJkMi5oPTQxNj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuaC00MzUtICovXFxuZnMvZXh0NC9leHQ0X2piZDIuaDo0MzY6c3RhdGljIGlubGluZSBpbnQgZXh0NF9qb3VybmFsX2Rlc3Ryb3koc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuZnMvZXh0NC9leHQ0X2piZDIuaC00Mzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo0My45NTkwMTY3NDNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMjE0Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEV4dDQgRmlsZXN5c3RlbSBDb2RlKipcblxuQWxyaWdodCwgeWVwLCBjb25maXJtZWQsIHRoZSBrZXkgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCBpcyBgc3RhdGljIGlubGluZWAuIFRoYXQncyBpbXBvcnRhbnQuIEdpdmVuIHRoYXQsIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gYF9fZXh0NF9maWxsX3N1cGVyYCBhbmQgYGV4dDRfbWJfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOb3csIGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIGluZGVlZCBkZWNsYXJlZCBhcyBzdGF0aWMsIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24gYW5kIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIEJldHRlciB0byBkb3VibGUtY2hlY2sgdGhhdCBlYXJseSB0aGFuIHdhc3RlIHRpbWUgZG93biBhIHdyb25nIHBhdGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NDguNzgxMTY4NjE0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk2NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2V4dDRfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTUzMzk9c3RhdGljIGJvb2wgZXh0NF9pc19zdHJpcGVfaW5jb21wYXRpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgc3RyaXBlKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNDUtXFxuZnMvZXh0NC9zdXBlci5jOjUzNDY6c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTUzNDcte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4MjI9c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4NDEtXFxuZnMvZXh0NC9zdXBlci5jOjU4NDI6XFx0cmV0ID0gX19leHQ0X2ZpbGxfc3VwZXIoZmMsIHNiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTg0My1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MDk6NDguODI1MTM4NTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzY0ODIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIElubGluaW5nIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoaW5raW5nLCBcIk9rYXksIHRoaXMgZnVuY3Rpb24gaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cIiBJIGltbWVkaWF0ZWx5IHJlYWxpemUsIFwiSXQgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBpbmxpbmVkLCBidXQgaXQncyBhIHNpemFibGUgY2h1bmsgb2YgY29kZS5cIiBTaXplIGlzIGEga2V5IGZhY3Rvci4gQSBsYXJnZSBmdW5jdGlvbiBpcyBsZXNzIGxpa2VseSB0byBiZSBpbmxpbmVkLCBldmVuIGlmIHN0YXRpYy4gQnV0IHRoZW4gYSB0aG91Z2h0IGhpdHMgbWU6IFwiV2FpdCBhIHNlY29uZCwgYGV4dDRfZmlsbF9zdXBlcmAgaXMgKmFsc28qIHN0YXRpYyFcIiBUaGF0IG1ha2VzIG1lIHBhdXNlLiBOb3cgSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIExldCdzIHNoaWZ0IG91ciBmb2N1cyB0byBgZXh0NF9nZXRfdHJlZWAgdG8gc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbXBhY3RzIGhvdyB0aGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgdGhlbSwgYW5kIHdoZXRoZXIgaW5saW5pbmcgaXMgYSBmYWN0b3IgdG8gY29uc2lkZXIgaW4gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1My43MDE2MjQwNzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTA4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZ2V0X3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XFxuZnMvZXh0NC9zdXBlci5jOjkyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYy05My1zdGF0aWMgaW50IGV4dDRfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXh0NF9jb250ZXh0X29wcyA9IHtcXG5mcy9leHQ0L3N1cGVyLmMtMTI2LVxcdC5wYXJzZV9wYXJhbVxcdD0gZXh0NF9wYXJzZV9wYXJhbSxcXG5mcy9leHQ0L3N1cGVyLmM6MTI3OlxcdC5nZXRfdHJlZVxcdD0gZXh0NF9nZXRfdHJlZSxcXG5mcy9leHQ0L3N1cGVyLmMtMTI4LVxcdC5yZWNvbmZpZ3VyZVxcdD0gZXh0NF9yZWNvbmZpZ3VyZSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01ODIyPXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODcxLVxcbmZzL2V4dDQvc3VwZXIuYzo1ODcyOnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTU4NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1My43NDY1MzY3NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTA4ODQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgU3RhdGljIEZ1bmN0aW9ucyBpbiBleHQ0KipcblxuSG1tLCBzbyBgZXh0NF9nZXRfdHJlZWAgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMsIGlzbid0IGl0PyBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSdtIGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgcmVmYWN0b3Jpbmcgb3Bwb3J0dW5pdGllcy4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIHByb2JsZW1hdGljIGluIGEgbW9kdWxhciBjb250ZXh0LCBkZXBlbmRpbmcgb24gaG93IHRoZXkncmUgdXNlZC4gVGhleSB0eXBpY2FsbHkgbGltaXQgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciByZXVzZSBvdXRzaWRlIHRoZWlyIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgdW5sZXNzIHNwZWNpZmljYWxseSBleHBvc2VkIHRocm91Z2ggYSB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlLlxuXG5Ob3csIGxldCBtZSB0aGluay4uLiB3aGVyZSBlbHNlIG1pZ2h0IEkgZmluZCB0aGlzIHBhdHRlcm4/IFdoYXQgYWJvdXQgYGV4dDRfbWJfcmVsZWFzZWA/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gSXMgaXQgc3RhdGljIGFzIHdlbGw/IElmIGl0ICppcyosIHRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQuIElmIGl0J3MgKm5vdCosIHRoZW4gcGVyaGFwcyBpdOKAmXMgcGFydCBvZiBzb21lIG1vcmUgZ2VuZXJhbCBBUEkuIFRoZSBiZWhhdmlvciBvZiBgZXh0NF9tYl9yZWxlYXNlYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbGFjayB0aGVyZW9mLCBtaWdodCBiZSB0ZWxsaW5nIG1lIHNvbWV0aGluZyBpbXBvcnRhbnQgYWJvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaW50ZW5kZWQgc2NvcGUgb2YgdGhhdCBjb2RlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjA5OjU3LjQ0NzYyNzM4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMzAxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9tYl9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvbWJhbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvbWJhbGxvYy5jPTIyMzc9c3RhdGljIHZvaWQgZXh0NF9tYl91c2VfYmVzdF9mb3VuZChzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2Mi1cXHQgKiBkb3VibGUgYWxsb2NhdGUgYmxvY2tzLiBUaGUgcmVmZXJlbmNlIGlzIGRyb3BwZWRcXG5mcy9leHQ0L21iYWxsb2MuYzoyMjYzOlxcdCAqIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtMjI2NC1cXHQgKi9cXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM4NzE9c3RhdGljIGludCBleHQ0X21iX2NsZWFudXBfcGEoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzozODg2OnZvaWQgZXh0NF9tYl9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9tYmFsbG9jLmMtMzg4Ny17XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00Njg1PXN0YXRpYyB2b2lkIGV4dDRfbWJfY29sbGVjdF9zdGF0cyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMC0gKiBjb250ZXh0LiAgV2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBNQl9HUk9VUF9QQSBiZWNhdXNlIHdlIG9ubHkgY2hhbmdlXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDcyMTogKiBwYV9mcmVlIGluIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0KCksIGJ1dCBvbiBmYWlsdXJlLCB3ZSd2ZSBhbHJlYWR5XFxuZnMvZXh0NC9tYmFsbG9jLmMtNDcyMi0gKiB6ZXJvZWQgb3V0IGFjLVxcdTAwM2VhY19iX2V4LmZlX2xlbiwgc28gZ3JvdXBfcGEtXFx1MDAzZXBhX2ZyZWUgaXMgbm90IGNoYW5nZWQuXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz00NzkwPXN0YXRpYyB2b2lkIGV4dDRfbWJfdXNlX2dyb3VwX3BhKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy00ODA0LVxcdCAqIGluc3RlYWQgd2UgY29ycmVjdCBwYSBsYXRlciwgYWZ0ZXIgYmxvY2tzIGFyZSBtYXJrZWRcXG5mcy9leHQ0L21iYWxsb2MuYzo0ODA1OlxcdCAqIGluIG9uLWRpc2sgYml0bWFwIC0tIHNlZSBleHQ0X21iX3JlbGVhc2VfY29udGV4dCgpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDgwNi1cXHQgKiBPdGhlciBDUFVzIGFyZSBwcmV2ZW50ZWQgZnJvbSBhbGxvY2F0aW5nIGZyb20gdGhpcyBwYSBieSBsZ19tdXRleFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NDg3Nj1leHQ0X21iX3VzZV9wcmVhbGxvY2F0ZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUwMTktXFx0XFx0ICogICAgICBleHQ0X21iX25ld19ibG9ja3NcXG5mcy9leHQ0L21iYWxsb2MuYzo1MDIwOlxcdFxcdCAqICAgICAgIGV4dDRfbWJfcmVsZWFzZV9jb250ZXh0XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTAyMS1cXHRcXHQgKiAgICAgICAgZXh0NF9tYl9wdXRfcGFcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTUzNTE9ZXh0NF9tYl9uZXdfZ3JvdXBfcGEoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTUtXFx0ICogV2Ugd2lsbCBsYXRlciBhZGQgdGhlIG5ldyBwYSB0byB0aGUgcmlnaHQgYnVja2V0XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTM5NjpcXHQgKiBhZnRlciB1cGRhdGluZyB0aGUgcGFfZnJlZSBpbiBleHQ0X21iX3JlbGVhc2VfY29udGV4dFxcbmZzL2V4dDQvbWJhbGxvYy5jLTUzOTctXFx0ICovXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NDE2PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZFxcbmZzL2V4dDQvbWJhbGxvYy5jOjU0MTc6ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0MTgtXFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ0NS1cXHRcXHR0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChzYiwgTlVMTCwgZ3JvdXAsIGJpdCwgbmV4dCAtIGJpdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTQ0NjpcXHRcXHR0cmFjZV9leHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEocGEsIChncnBfYmxrX3N0YXJ0ICtcXG5mcy9leHQ0L21iYWxsb2MuYy01NDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X0MyQihzYmksIGJpdCkpLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ2OD1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWRcXG5mcy9leHQ0L21iYWxsb2MuYzo1NDY5OmV4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzAtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTQ3NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo1NDc2OlxcdHRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShzYiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU0NzctXFx0QlVHX09OKHBhLVxcdTAwM2VwYV9kZWxldGVkID09IDApO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTQ5OT1leHQ0X21iX2Rpc2NhcmRfZ3JvdXBfcHJlYWxsb2NhdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODAtXFx0XFx0aWYgKHBhLVxcdTAwM2VwYV90eXBlID09IE1CX0dST1VQX1BBKSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4MTpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU1ODItXFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNihwYSktXFx1MDAzZXUucGFfcmN1LCBleHQ0X21iX3BhX2NhbGxiYWNrKTtcXG5mcy9leHQ0L21iYWxsb2MuYy01NTgzLVxcdFxcdH0gZWxzZSB7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NTU4NDpcXHRcXHRcXHRleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEoXFx1MDAyNmU0YiwgYml0bWFwX2JoLCBwYSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNTU4NS1cXHRcXHRcXHRleHQ0X21iX3BhX2ZyZWUocGEpO1xcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmM9NTYwNz12b2lkIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNTcwMy1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cGEtXFx1MDAzZXBhX2dyb3VwX2xpc3QpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjU3MDQ6XFx0XFx0ZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKFxcdTAwMjZlNGIsIGJpdG1hcF9iaCwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTU3MDUtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTU5MzU9ZXh0NF9tYl9kaXNjYXJkX2xnX3ByZWFsbG9jYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy01OTk5LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYS1cXHUwMDNlcGFfZ3JvdXBfbGlzdCk7XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjAwMDpcXHRcXHRleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoXFx1MDAyNmU0YiwgcGEpO1xcbmZzL2V4dDQvbWJhbGxvYy5jLTYwMDEtXFx0XFx0ZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYwMTg9c3RhdGljIHZvaWQgZXh0NF9tYl9hZGRfbl90cmltKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MDY1LSAqL1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYwNjY6c3RhdGljIHZvaWQgZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG5mcy9leHQ0L21iYWxsb2MuYy02MDY3LXtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYyMjk9ZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1My1cXHR9XFxuZnMvZXh0NC9tYmFsbG9jLmM6NjM1NDpcXHRleHQ0X21iX3JlbGVhc2VfY29udGV4dChhYyk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNjM1NS1cXHRrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTtcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcyNzc9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfZnJlZV9ncm91cF9jbHVzdGVyc19zZXQpO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjcyNzg6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWJfcmVsZWFzZSk7XFxuZnMvZXh0NC9tYmFsbG9jLmMtNzI3OS1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9yZWFkX2Jsb2NrX2JpdG1hcF9ub3dhaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjowOTo1Ny40OTE2NjMyNDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MDM2NDE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgYW5kIHRyeWluZyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIGBleHQ0X21iX3JlbGVhc2VgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgIGlzIGEgYmlnIGNsdWUg4oCTIGl0IG1lYW5zIGl0J3MgZXhwb3J0ZWQsIGxpa2VseSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMsIGFzIGl0IHByb2JhYmx5IHJlcHJlc2VudHMgYSBjcml0aWNhbCBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgdXNlZCBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyB1c2FnZSBmcm9tIGEgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcGVyc3BlY3RpdmUsIGdpdmVuIGl0J3MgYSBnZW5lcmFsbHkgaW1wb3J0YW50IGZ1bmN0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGBleHQ0X3B1dF9zdXBlcmAuIEkga25vdyB0aGF0IGZ1bmN0aW9uLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0IGRlYWxzIHdpdGggdW5tb3VudGluZyB0aGUgZmlsZXN5c3RlbSwgYW5kIHRoYXQgaXQgZW5kcyB1cCBjYWxsaW5nIGBleHQ0X21iX3JlbGVhc2VgIHRvby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBpbnZlc3RpZ2F0ZSBgZXh0NF9tYl9yZWxlYXNlYCBzbyBJIGRvbid0IG1pc3MgYW55IGNyaXRpY2FsIGNvbnRleHQsIGFuZCBJIHNob3VsZCBhbHNvIHNlZSBob3cgdGhlIGNhbGxzIHRvIGBleHQ0X21iX3JlbGVhc2VgIGFyZSBoYW5kbGVkIGluIGBleHQ0X3B1dF9zdXBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDEuNTMyMDMwMDY3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU2NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3B1dF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTEyNjk9c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxcbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjc3LVxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTY3ODpcXHQucHV0X3N1cGVyXFx0PSBleHQ0X3B1dF9zdXBlcixcXG5mcy9leHQ0L3N1cGVyLmMtMTY3OS1cXHQuc3luY19mc1xcdD0gZXh0NF9zeW5jX2ZzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowMS41NzY2MDA4NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NTI5NDg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgRVhUNCBGaWxlc3lzdGVtIE1vdW50IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBtb3VudCBwcm9jZXNzIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYGV4dDRfcHV0X3N1cGVyYCwgSSByZW1lbWJlciB0aGF0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGluZm9ybWF0aXZlIGp1bXBpbmctb2ZmIHBvaW50IGZvciB0cmFjaW5nIGV4dGVybmFsIGNhbGxzLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgc3ltYm9sLiBgZXh0NF9tYl9yZWxlYXNlYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBmb2N1cyBvbiBpbiB0aGlzIGNvbnRleHQuXG5cbkhvbGQgb24sIEkgYWxzbyByZWNhbGwgdGhhdCBgZXh0NF9maWxsX3N1cGVyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgbm90IGlkZWFsIGZvciB0cmFjaW5nLCBidXQgc28gaXMgYGV4dDRfZ2V0X3RyZWVgLiBIbW0sIHRoaXMgaXMgYmVjb21pbmcgdHJpY2t5LiBBcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIG1vdW50IHBhdGggdGhhdCBtaWdodCBiZSBlYXNpZXIgdG8gZm9sbG93PyBJIG5lZWQgdG8gZmluZCBhbiBlbnRyeSBwb2ludCB0aGF0J3MgZXhwb3NlZC4gTGV0IG1lIGNoZWNrIGBleHQ0X2luaXRfZnNfY29udGV4dGAgLS0gdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEknbGwgc2VlIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDowNS41MjE4OTc4OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTk5NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfaW5pdF9mc19jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9OTQ9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jOjk1OnN0YXRpYyBpbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmMtOTYtc3RhdGljIHZvaWQgZXh0NF9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEzND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTEzNi1cXHQubmFtZVxcdFxcdFxcdD0gXFxcImV4dDJcXFwiLFxcbmZzL2V4dDQvc3VwZXIuYzoxMzc6XFx0LmluaXRfZnNfY29udGV4dFxcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXh0NC9zdXBlci5jLTEzOC1cXHQucGFyYW1ldGVyc1xcdFxcdD0gZXh0NF9wYXJhbV9zcGVjcyxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNTA9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNTItXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQzXFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6MTUzOlxcdC5pbml0X2ZzX2NvbnRleHRcXHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxcbmZzL2V4dDQvc3VwZXIuYy0xNTQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjAzNj1zdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTIwNTAtXFxuZnMvZXh0NC9zdXBlci5jOjIwNTE6aW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9leHQ0L3N1cGVyLmMtMjA1Mi17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NzUxOT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0NF9mc190eXBlID0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTc1MjEtXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQ0XFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6NzUyMjpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcXG5mcy9leHQ0L3N1cGVyLmMtNzUyMy1cXHQucGFyYW1ldGVyc1xcdFxcdD0gZXh0NF9wYXJhbV9zcGVjcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MDUuNTY2OTA2MjYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjQxNjg2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgZXh0NCBGaWxlc3lzdGVtIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZXh0NCBjb2RlLi4uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHVzZWZ1bDsgSSBjYW4gcG90ZW50aWFsbHkgdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGBleHQ0X21iX3JlbGVhc2VgIGFzIGNydWNpYWwgZm9jdXMgcG9pbnRzIGZvciBhbmFseXNpcywgZ2l2ZW4gdGhleSdyZSBub3QgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYGV4dDRfbWJfcmVsZWFzZWAuLi4gUmlnaHQsIGl0J3MgY2FsbGVkIGluIGVycm9yIHBhdGhzIGR1cmluZyB0aGUgbW91bnQgcHJvY2VzcywgYW5kIGFsc28gaW4gYGV4dDRfcHV0X3N1cGVyYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGNsZWFudXAuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQgaW4gdGVybXMgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgbGlmZWN5Y2xlPyBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgZXh0NF9qb3VybmFsX2Rlc3Ryb3lgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgZG9lc24ndCBwcm92aWRlIGEgdXNlZnVsIHBvaW50IHRvIGxvb2sgYXQgbW9yZSBicm9hZGx5LiBXaGF0IGFib3V0IGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWA/IEFoIHllcywgaXQgcXVldWVzIGBzX2Rpc2NhcmRfd29ya2AuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgdG91Y2hlcyBvbiBwb3RlbnRpYWwgYmFja2dyb3VuZCB0YXNrcyBhbmQgZGF0YSBzYW5pdGl6YXRpb24uIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlc2UgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjEwLjAzMTA3NzQ2MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MzExNT1leHRlcm4gaW50IGV4dDRfdHJpbV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzdHJpbV9yYW5nZSAqKTtcXG5mcy9leHQ0L2V4dDQuaDozMTE2OmV4dGVybiB2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpO1xcbmZzL2V4dDQvZXh0NC5oLTMxMTctZXh0ZXJuIHZvaWQgZXh0NF9tYl9tYXJrX2JiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayxcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTM5NzM9c3RhdGljIHZvaWQgZXh0NF9mcmVlX2RhdGFfaW5fYnVkZHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTQwMTgtICovXFxuZnMvZXh0NC9tYmFsbG9jLmM6NDAxOTp2b2lkIGV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHRpZF90IGNvbW1pdF90aWQpXFxuZnMvZXh0NC9tYmFsbG9jLmMtNDAyMC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTA5PXN0YXRpYyB2b2lkIGV4dDRfam91cm5hbF9jb21taXRfY2FsbGJhY2soam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTE0LVxcbmZzL2V4dDQvc3VwZXIuYzo1MTU6XFx0ZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGEoc2IsIHR4bi1cXHUwMDNldF90aWQpO1xcbmZzL2V4dDQvc3VwZXIuYy01MTYtXFx0ZXh0NF9tYXliZV91cGRhdGVfc3VwZXJibG9jayhzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjEwLjA3ODE4NDE5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI2ODAyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEZpeCoqXG5cbk9rYXksIHNvIGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCwgYWxvbmcgd2l0aCBgZXh0NF9tYl9yZWxlYXNlYCwgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBrZWVwIG15IGV5ZSBvbiB0aG9zZSBzeW1ib2xzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBBaCwgeWVzLCBgQ09ORklHX0pCRDJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYENPTkZJR19FWFQ0X0ZTYC4gUGVyZmVjdCwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5MZXQncyBkaXN0aWxsIHRoaXM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBEZWZpbml0ZWx5LCB5ZXMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGV4dDRfbWJfcmVsZWFzZWAsIGBleHQ0X3Byb2Nlc3NfZnJlZWRfZGF0YWAsIGFuZCBhbHNvIGBleHQ0X2luaXRfZnNfY29udGV4dGAuIFRoaXMgc2VlbXMgcmVsZXZhbnQgdG8gaW5pdGlhbGlzYXRpb24gd2hpY2ggaXMgcGFydCBvZiB0aGUgdnVsbmVyYWJpbGl0eS5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogT25seSBgRVhUNF9GU2AgaXMgcmVxdWlyZWQuXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aXRoaW4gZXh0NCdzIG1vdW50IGVycm9yIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSB0aW1pbmcgb2Ygam91cm5hbCBkZXN0cnVjdGlvbiBpbiByZWxhdGlvbiB0byBgZXh0NF9tYl9yZWxlYXNlYCdzIGZsdXNoaW5nIG9mIGBzX2Rpc2NhcmRfd29ya2AuIElmIHRoZSBqb3VybmFsIGlzbid0IGZ1bGx5IGNsZWFuZWQgdXAgKmJlZm9yZSogdGhhdCByZWxlYXNlIGZ1bmN0aW9uIGRvZXMgaXRzIHRoaW5nLCBhIGxhdGVyIGpvdXJuYWwgZGVzdHJ1Y3Rpb24gY2FuIHJlLWVuYWJsZSBgc19kaXNjYXJkX3dvcmtgLiBUaGlzIHNldHMgdXAgdGhlIHBlcmZlY3Qgc2NlbmFyaW8gZm9yIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGF0IHdvcmtxdWV1ZSBldmVudHVhbGx5IHRyaWVzIHRvIGV4ZWN1dGUgaXRzIHdvcmsgKmFmdGVyKiB0aGUgc3VwZXJibG9jaydzIGRhdGEgaXMgZnJlZWQuIEl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHRlc3QgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5NCwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTYuNjA0OTg5MTMyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwOTcwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X21iX3JlbGVhc2VcIixcbiAgICBcImV4dDRfcHJvY2Vzc19mcmVlZF9kYXRhXCIsXG4gICAgXCJleHQ0X2luaXRfZnNfY29udGV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBleHQ0IG1vdW50IGVycm9yIHBhdGguIElmIHRoZSBqb3VybmFsIGlzIG5vdCBkZXN0cm95ZWQgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgc19kaXNjYXJkX3dvcmssIGEgc3Vic2VxdWVudCBqb3VybmFsIGRlc3Ryb3kgY2FuIGZvcmNlIGEgY29tbWl0IHRoYXQgcmUtYXJtcyBzX2Rpc2NhcmRfd29yaywgbGVhZGluZyB0byBhIFVBRiB3aGVuIHRoZSB3b3JrcXVldWUgZXhlY3V0ZXMgdGhlIHdvcmsgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgaW5mbyBpcyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfbWJfcmVsZWFzZVwiLFxuICAgIFwiZXh0NF9wcm9jZXNzX2ZyZWVkX2RhdGFcIixcbiAgICBcImV4dDRfaW5pdF9mc19jb250ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGV4dDQgbW91bnQgZXJyb3IgcGF0aC4gSWYgdGhlIGpvdXJuYWwgaXMgbm90IGRlc3Ryb3llZCBiZWZvcmUgZXh0NF9tYl9yZWxlYXNlKCkgZmx1c2hlcyBzX2Rpc2NhcmRfd29yaywgYSBzdWJzZXF1ZW50IGpvdXJuYWwgZGVzdHJveSBjYW4gZm9yY2UgYSBjb21taXQgdGhhdCByZS1hcm1zIHNfZGlzY2FyZF93b3JrLCBsZWFkaW5nIHRvIGEgVUFGIHdoZW4gdGhlIHdvcmtxdWV1ZSBleGVjdXRlcyB0aGUgd29yayBhZnRlciB0aGUgc3VwZXJibG9jayBpbmZvIGlzIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDY6MTA6MTYuNjg3MDkzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxMDc3MTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA2OjEwOjE2LjY4NzY0Mjc5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1MTAyMTgxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWNlMTVjZTEyZDg1NmZiYzg0ZDI1MjliNDQyZDg1NTgzZGUyM2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDY6MDg6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDRiNjExMmU1ZDZjNTkuLjU4YjIxMDYzN2I1N2IgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTU3NjEsNiArNTc2MSwxMiBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIGZhaWxlZF9tb3VudDc6XG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4gZmFpbGVkX21vdW50NjpcbitcdC8qXG4rXHQgKiBUaGUgbGFzdCBjb21taXQgY2FuIHJlLWFybSBzX2Rpc2NhcmRfd29yaywgc28gZGVzdHJveSB0aGVcbitcdCAqIGpvdXJuYWwgYmVmb3JlIGV4dDRfbWJfcmVsZWFzZSgpIGZsdXNoZXMgaXQuXG4rXHQgKi9cbitcdGlmIChzYmktXHUwMDNlc19qb3VybmFsKVxuK1x0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0ZXh0NF9tYl9yZWxlYXNlKHNiKTtcbiBcdGV4dDRfZmxleF9ncm91cHNfZnJlZShzYmkpO1xuIGZhaWxlZF9tb3VudDU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoxNi42ODc2NDQwNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEwMTg5MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBleHQ0IEVycm9yIFBhdGggRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBhbiBlcnJvciBwYXRoIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vdW50aW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL2V4dDQvc3VwZXIuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBhIHByZXZpb3VzIGNvbW1pdCBpbnRyb2R1Y2VkIHRoZSBwb3RlbnRpYWwgZm9yIGBzX2Rpc2NhcmRfd29ya2AgdG8gYmUgcmUtYXJtZWQsIHdoaWNoLCBkdXJpbmcgYSBtb3VudCBmYWlsdXJlLCBjb3VsZCBsZWFkIHRvIGEgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrLCBvciBldmVuIGEgY3Jhc2guIFRoZSBjb3JlIG9mIHRoaXMgZml4IGlzIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9qb3VybmFsX2Rlc3Ryb3koKWAgKmJlZm9yZSogYGV4dDRfbWJfcmVsZWFzZSgpYCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdy4gVGhpcyBkZXN0cnVjdGlvbiBvZiB0aGUgam91cm5hbCAqYmVmb3JlKiBmcmVlaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3Igc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUgdG8gcHJldmVudCB0aGUgYWZvcmVtZW50aW9uZWQgaXNzdWVzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIHNhZmV0eSBuZXQuIEl0IGVuc3VyZXMgdGhhdCB0aGUgam91cm5hbCBpcyBwcm9wZXJseSBjbGVhbmVkIHVwIGJlZm9yZSBwb3RlbnRpYWxseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmcmVlZCBtZW1vcnkuIFRoZSBjb2RlIHNuaXBwZXQgY29uZmlybXMgbXkgYXNzZXNzbWVudDsgdGhlIGFkZGVkIGBpZiAoc2JpLVx1MDAzZXNfam91cm5hbClgIGNoZWNrIGlzIGEgbmljZSB0b3VjaCwgZW5zdXJpbmcgdGhlIGpvdXJuYWwgYWN0dWFsbHkgZXhpc3RzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgaXQsIGZvciBleGFtcGxlIGluIGEgbm9uLWpvdXJuYWxlZCBmaWxlc3lzdGVtLCB3aGljaCBjb3VsZCB0aGVuIGNhdXNlIG90aGVyIHByb2JsZW1zLlxuXG5JIHNlZSBubyBldmlkZW5jZSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGZpeCBpcyBwdXJlbHkgYW4gZXJyb3IgcGF0aCBjbGVhbnVwOyBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueS4gU3RhbmRhcmQgdG9vbHMsIGxpa2UgS0FTQU4sIHNob3VsZCBlYXNpbHkgY2F0Y2ggdGhlIHR5cGVzIG9mIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIE15IGRldGVybWluYXRpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNjoxMDoyNS4xOTc4Mzc1OTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDQgbW91bnQgdG8gZGVzdHJveSB0aGUgam91cm5hbCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IgKGBleHQ0X21iX3JlbGVhc2VgKS4gVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZXJlIGBzX2Rpc2NhcmRfd29ya2AgY291bGQgYmUgcmUtYXJtZWQgYnkgdGhlIGxhc3QgY29tbWl0LiBUaGlzIHR5cGUgb2YgYnVnICh1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb24sIGludmFsaWQgbWVtb3J5IGFjY2VzcykgaXMgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBib3VuZHMgY2hlY2tzLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IG1vdW50IHRvIGRlc3Ryb3kgdGhlIGpvdXJuYWwgYmVmb3JlIHJlbGVhc2luZyB0aGUgbXVsdGktYmxvY2sgYWxsb2NhdG9yIChgZXh0NF9tYl9yZWxlYXNlYCkuIFRoaXMgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVyZSBgc19kaXNjYXJkX3dvcmtgIGNvdWxkIGJlIHJlLWFybWVkIGJ5IHRoZSBsYXN0IGNvbW1pdC4gVGhpcyB0eXBlIG9mIGJ1ZyAodXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9uLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGlzIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNrcywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[1] Phase: Succeeded StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 06:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 06:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2] Phase: Succeeded StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 06:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 06:10:36 +0000 UTC FinishedAt: 2026-08-20 06:10:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwt4gx/series-workflowwt4gx-convert-artifact-1233002659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 06:10:46 +0000 UTC FinishedAt: 2026-08-20 06:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 06:10:46 +0000 UTC FinishedAt: 2026-08-20 06:32:08 +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:*371955c1-e113-4845-9f6d-37f30f9d1666,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-workflowwt4gx/series-workflowwt4gx-convert-artifact-1233002659/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": "fcb45a86-81a3-43a5-ba90-4923fb2e0b81", "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-workflowwt4gx/series-workflowwt4gx-build-action-3912799505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 06:10:46 +0000 UTC FinishedAt: 2026-08-20 06:31:58 +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:*371955c1-e113-4845-9f6d-37f30f9d1666,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-workflowwt4gx/series-workflowwt4gx-convert-artifact-1233002659/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": "fcb45a86-81a3-43a5-ba90-4923fb2e0b81", "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-workflowwt4gx/series-workflowwt4gx-build-action-3912799505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 06:32:08 +0000 UTC FinishedAt: 2026-08-20 06:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 06:32:08 +0000 UTC FinishedAt: 2026-08-20 06:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 06:32:08 +0000 UTC FinishedAt: 2026-08-20 06:32:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 06:32:08 +0000 UTC FinishedAt: 2026-08-20 06:32:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwt4gx/series-workflowwt4gx-convert-artifact-2480595930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 06:32:19 +0000 UTC FinishedAt: 2026-08-20 06:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 06:32:19 +0000 UTC FinishedAt: 2026-08-20 06:34:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fcb45a86-81a3-43a5-ba90-4923fb2e0b81,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-workflowwt4gx/series-workflowwt4gx-build-action-3912799505/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-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 06:34:16 +0000 UTC FinishedAt: 2026-08-20 06:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 06:34:16 +0000 UTC FinishedAt: 2026-08-20 06:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 06:34:16 +0000 UTC FinishedAt: 2026-08-20 06:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 06:34:16 +0000 UTC FinishedAt: 2026-08-20 06:53:39 +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:*371955c1-e113-4845-9f6d-37f30f9d1666,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-workflowwt4gx/series-workflowwt4gx-convert-artifact-2480595930/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": "3512d237-4377-41a4-9ce6-80ae1e805afe", "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-workflowwt4gx/series-workflowwt4gx-build-action-154022078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 06:34:16 +0000 UTC FinishedAt: 2026-08-20 06:53:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*371955c1-e113-4845-9f6d-37f30f9d1666,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-workflowwt4gx/series-workflowwt4gx-convert-artifact-2480595930/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": "3512d237-4377-41a4-9ce6-80ae1e805afe", "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-workflowwt4gx/series-workflowwt4gx-build-action-154022078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 06:53:39 +0000 UTC FinishedAt: 2026-08-20 06:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 06:53:39 +0000 UTC FinishedAt: 2026-08-20 06:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 06:53:39 +0000 UTC FinishedAt: 2026-08-20 06:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 06:53:39 +0000 UTC FinishedAt: 2026-08-20 06:55:41 +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:*3512d237-4377-41a4-9ce6-80ae1e805afe,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-workflowwt4gx/series-workflowwt4gx-build-action-154022078/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-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"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:*fcb45a86-81a3-43a5-ba90-4923fb2e0b81,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3512d237-4377-41a4-9ce6-80ae1e805afe,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-workflowwt4gx/series-workflowwt4gx-build-action-3912799505/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-workflowwt4gx/series-workflowwt4gx-build-action-154022078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 06:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 06:56:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"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-workflowwt4gx/series-workflowwt4gx-convert-artifact-3859702159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 06:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 06:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 06:55:51 +0000 UTC FinishedAt: 2026-08-20 06:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 06:56:11 +0000 UTC FinishedAt: 2026-08-20 10:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt4gx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_mb_release","ext4_process_freed_data","ext4_init_fs_context"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cb8a75eec0877810b50aa1c5a833f929525cd2ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9bb628b2-bbc7-4cf6-815a-e3d4ab08357b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 06:56:11 +0000 UTC FinishedAt: 2026-08-20 10:00:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fcb45a86-81a3-43a5-ba90-4923fb2e0b81,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3512d237-4377-41a4-9ce6-80ae1e805afe,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-workflowwt4gx/series-workflowwt4gx-build-action-3912799505/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-workflowwt4gx/series-workflowwt4gx-build-action-154022078/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-workflowwt4gx/series-workflowwt4gx-convert-artifact-3859702159/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,}